diff --git a/LocalPackages/depthkit.avpro/CHANGELOG.md b/LocalPackages/depthkit.avpro/CHANGELOG.md
new file mode 100644
index 0000000..cb4680d
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/CHANGELOG.md
@@ -0,0 +1,18 @@
+## Changelog
+
+### 0.2.1
+* Added work-around for crashing on Quest
+* Update SDK license agreement
+
+### 0.2.0
+* Updated to Unity 2022.3
+* Tested with AVPro Video 2.9.1
+
+### 0.1.3
+* Updated assembly definitions.
+
+### 0.1.2
+* Player name and component name updated.
+
+### 0.1.1
+* Media references are supported by Depthkit clips.
\ No newline at end of file
diff --git a/LocalPackages/depthkit.avpro/CHANGELOG.md.meta b/LocalPackages/depthkit.avpro/CHANGELOG.md.meta
new file mode 100644
index 0000000..4a38e8d
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a45ad1881a758b641abc18c0bfc596be
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/LocalPackages/depthkit.avpro/LICENSE.md b/LocalPackages/depthkit.avpro/LICENSE.md
new file mode 100644
index 0000000..4dac3aa
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/LICENSE.md
@@ -0,0 +1,138 @@
+SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT
+
+The text of this license (this “License”) may be found at: www.depthkit.tv/license-agreement-v1
+
+Thank you for your interest in using the Simile Inc dba Scatter ("Scatter") Software Development Kit (the "SDK").
+In order to obtain and use the SDK, you must first agree to the terms of this License. If you do not agree to the
+terms of this License, then you may not use the SDK.
+
+SDK LICENSE
+1. Subject to the terms and conditions of this License, Scatter hereby
+grants to you a worldwide, non-exclusive, royalty-free, sublicenseable license to use, reproduce, modify,
+embed and redistribute (subject to restrictions below) the software contained in the SDK, including, but
+not limited to, the samples, headers, documentation and source code. This License is subject to the
+following terms and conditions:
+1.1 This license grants you the non-exclusive license and right to use the SDK to develop
+methods to play back content produced in the software suite known as Depth Kit (such content referred
+to as your “Content”) in the Unity game engine, as well as other features that may be added from time to
+time by Scatter. You may not use the SDK to connect Depth Kit to any software platform or game engine
+other than Unity.
+1.2 For avoidance of doubt, when you use the SDK in or with your Content, you retain all
+rights to your Content, and you have no obligations to share or license your Content (including your
+source and object code) to Scatter or any third parties; provided, however, Scatter retains all rights to the
+SDK and the headers, libraries and APIs of Depth Kit and other tools made available by Scatter, including
+those that may be incorporated into your Content by virtue of your producing it through Depth Kit.
+1.3 You agree not to commit any act intended to (a) interfere with the normal operation of
+Depth Kit or the SDK, (b) provide software to Depth Kit users or developers that would induce breach of
+any Scatter agreements, or (c) provide software to Scatter or Depth Kit users that contains malware,
+viruses, hacks, bots, Trojan horses, or other malicious code.
+1.4 You may not use the SDK for any purpose not expressly permitted by this License. You
+may not:
+
+a. decompile;
+b. reverse engineer;
+c. disassemble; or
+d. attempt to derive the source code of any part of the SDK where source code is
+not directly provided to you, or any other software or firmware provided to you by Scatter in binary
+form (except as and only to the extent any foregoing restriction is prohibited by applicable law).
+
+REDISTRIBUTION
+2. Subject to the terms and conditions of this License, your license to redistribute and sublicense the SDK
+is also expressly made subject to the following conditions:
+2.1 You may sublicense and redistribute the binary or object code form of the SDK in whole
+for no charge or as part of a for-charge piece of Content; provided, however, you may only license,
+sublicense or redistribute the binary or object code of the SDK (and not the SDK’s source code) in its
+entirety. The SDK, including its associated libraries, and your Content that includes any portion of the
+SDK, may only be used with Depth Kit and may not be used, licensed, or sublicensed to interface with
+software that is not authorized and approved by Scatter;
+2.2 You must include with all such redistributed or sublicensed SDK code the following copyright
+notice: “Copyright 2016-2024 Simile Inc dba Scatter. All rights reserved.”;
+2.3 You must give any other recipients of the SDK a copy of this License as such recipients,
+licensees or sublicensees may only use the SDK subject to the terms of this License and such recipient's,
+licensee's or sublicensee's agreement to and acceptance of this License with Scatter; and
+2.4 The SDK includes a “LICENSE” text file (the “License Notice”), and any SDK distribution that
+you distribute must include a copy of this License with the License Notice.
+
+GENERAL PROVISIONS
+3. Additional Materials
+3.1 Scatter may include in this SDK additional content (e.g., samples) for demonstration,
+references or other specific purposes. Such content will be clearly marked in the SDK and is subject to
+any included terms and conditions.
+3.2 Your use of third-party materials included in the SDK, or which the SDK may be dependent
+upon (including without limitation Unity), may be subject to other terms and conditions typically found in
+separate third-party license agreements or "READ ME" files included with such third-party materials. To
+the extent such other terms and conditions conflict with the terms and conditions of this License, the
+former will control with respect to the applicable third-party materials. The terms of licensing the Unity
+game engine can be found here: https://unity3d.com/legal/terms-of-service/software.
+4. THE SDK AND ANY COMPONENT THEREOF ARE PROVIDED “AS IS” AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL Scatter AS THE COPYRIGHT OWNER OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SDK, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOME JURISDICTIONS DO NOT PERMIT THE
+EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO YOU MAY HAVE ADDITIONAL
+RIGHTS.
+5. This License does not grant permission to use the trade names, trademarks, service marks, or product
+names of Scatter, including without limitation “Depth Kit,” except as required for reasonable and customary
+use in describing the origin of the SDK, and reproducing the content of the License Notice file. Scatter
+reserves all rights not expressly granted to you under this License. Neither Scatter’s name nor the names
+of Scatter’s contributors, licensors, employees, or contractors, may be used to endorse or promote
+products developed using the SDK without specific prior written permission of Scatter.
+6. You are responsible for ensuring that your use of the SDK and your Content complies with all
+applicable laws (including privacy laws) wherever your Content is made available. You acknowledge and
+agree that you are solely responsible for any health and safety issues arising from your Content.
+7. Your acceptance of the terms and conditions of this License in and of itself and for all of your Content
+may be evidenced by your usage of the SDK or acceptance of this License. As this License is updated for
+future releases of the SDK, you agree to abide by and meet all requirements of future updates of this
+License for those future SDK releases, with acceptance evidenced by usage of the SDK or any element
+thereof and the future updates of this License will apply for your Content that may be developed for or
+with that future SDK or any element thereof (i.e., you cannot sidestep out of the requirements of future
+updates of the License by developing against an older release of the SDK or License). You acknowledge
+that future versions of the SDK may be provided for a fee or otherwise under substantially different terms
+from those provided hereunder.
+8. Scatter reserves the right to terminate this License and all your rights hereunder immediately in the
+event you materially breach this License.
+9. Furthermore, Scatter also reserves the right to cancel or terminate this License for any of the following
+reasons:
+a. Intellectual property infringement by you for your Content that is used with or by
+the SDK;
+b. Content that violates applicable law;
+c. Health and safety issues associated with your Content;
+d. Use of the SDK with a commercial product other than Depth Kit and Unity; and
+e. Failure to provide required notices as set forth above.
+10. You agree to fully indemnify Scatter from any and all losses, costs, damages and expenses (including
+reasonable attorney's fees) arising out of your Content or any breach of this License.
+11. Scatter may discontinue or change functionality of Depth Kit or the SDK at any time, and your
+continued use of Depth Kit or the SDK or use of any modified or additional services in connection
+therewith is conditioned upon your adherence to the terms of this License, as modified by Scatter from
+time to time, as well as any additional license agreements necessitated by additional features.
+12. In the event any provision of this License is determined to be invalid, prohibited or unenforceable by a
+court or other body of competent jurisdiction, this License shall be construed as if such invalid, prohibited
+or unenforceable provision has been more narrowly drawn so as not to be invalid, prohibited or
+unenforceable.
+13. You may not assign any rights or obligations under this License without the advance written consent
+of Scatter, which may be withheld in its sole discretion. Scatter may assign its rights or obligations under
+this License in its sole discretion.
+14. Failure of either party at any time to enforce any of the provisions of this License will not be construed
+as a waiver of such provisions or in any way affect the validity of this License or parts thereof.
+15. Your remedies under this License shall be limited to the right to collect money damages, if any, and
+you hereby waive your right to injunctive or other equitable relief.
+16. You will comply with all applicable export control laws of the United States and any other applicable
+governmental authority, including without limitation, the U.S. Export Administration Regulations. You
+agree that this License and the SDK and accompanying documentation are Scatter's confidential
+information (and is not publicly available), and you will not use it, disclose it or make it available to others
+except in accordance with the terms of this License.
+17. This License shall be governed by the laws of the State of New York, without giving effect to choice of
+law principles. All disputes relating to this License shall be resolved by binding non-appearance-based
+arbitration before a single arbitrator in New York County, New York. The arbitration shall be conducted in
+accordance with the rules and procedures of JAMS then in effect, and the judgment of the arbitrator shall
+be final and capable of entry in any court of competent jurisdiction. You and Scatter agree to submit to the
+personal jurisdiction of the courts located within New York County, New York in connection with any
+entrance of an arbitrator’s judgment or decision or any dispute with respect to the arbitration process or
+procedure or Scatter’s exercise of its equitable rights or remedies.
+
+Effective as of October 7, 2016
diff --git a/LocalPackages/depthkit.avpro/LICENSE.md.meta b/LocalPackages/depthkit.avpro/LICENSE.md.meta
new file mode 100644
index 0000000..6ea7622
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0d89158092f3e114f891a5191ce27b87
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/LocalPackages/depthkit.avpro/README.md b/LocalPackages/depthkit.avpro/README.md
new file mode 100644
index 0000000..53909fc
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/README.md
@@ -0,0 +1,2 @@
+# Depthkit AVPro 2.x Video Player
+Copyright 2021 Scatter All Rights reserved.
diff --git a/LocalPackages/depthkit.avpro/README.md.meta b/LocalPackages/depthkit.avpro/README.md.meta
new file mode 100644
index 0000000..8c0cbac
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f0f0d066ae4548c4e862f61bb1fd6319
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/LocalPackages/depthkit.avpro/Runtime.meta b/LocalPackages/depthkit.avpro/Runtime.meta
new file mode 100644
index 0000000..719bfef
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fcf5e9af809730a408d295b8b1d848db
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/LocalPackages/depthkit.avpro/Runtime/AVProVideoPlayer.cs b/LocalPackages/depthkit.avpro/Runtime/AVProVideoPlayer.cs
new file mode 100644
index 0000000..0e9791e
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/Runtime/AVProVideoPlayer.cs
@@ -0,0 +1,408 @@
+/************************************************************************************
+
+Depthkit Unity SDK License v1
+Copyright 2016-2024 Simile Inc dba Scatter. All Rights reserved.
+
+Licensed under the the Simile Inc dba Scatter ("Scatter")
+Software Development Kit License Agreement (the "License");
+you may not use this SDK except in compliance with the License,
+which is provided at the time of installation or download,
+or which otherwise accompanies this software in either electronic or hard copy form.
+
+You may obtain a copy of the License at http://www.depthkit.tv/license-agreement-v1
+
+Unless required by applicable law or agreed to in writing,
+the SDK distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and limitations under the License.
+
+************************************************************************************/
+
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Reflection;
+using RenderHeads.Media.AVProVideo;
+
+#if !DK_AVPROv1
+
+namespace Depthkit
+{
+ ///
+ /// Implementation of the Depthkit player with an AVProVideo 2.x backend
+ [AddComponentMenu("Depthkit/Players/Depthkit Video Player (AVPro)")]
+ public class AVProVideoPlayer : Depthkit.ClipPlayer
+ {
+ [SerializeField, HideInInspector]
+ ///
+ /// Reference to the AVProVideo Component
+ protected MediaPlayer m_mediaPlayer;
+
+ [HideInInspector]
+ // Note: on AVProVideo 2.9.1 when building to Quest, and possibly all Android devices,
+ // There is a crash when exposing MediaPlayer.TextureProvider.GetTexture() directly.
+ // To work around this, we use a RenderTexture and Graphics.Blit to copy the video
+ // texture, and then return the copy. Whenever AVPro fixes this issue,
+ // we can remove this work around.
+ public bool disableAndroidTextureCopyWorkAround = false;
+
+ protected RenderTexture m_rt = null;
+
+ string m_path;
+ MediaPathType m_pathType;
+
+ public override void CreatePlayer()
+ {
+ m_mediaPlayer = gameObject.GetComponent();
+ if (m_mediaPlayer == null)
+ {
+ // no media component already added to this component, try adding a MediaPlayer component
+ try
+ {
+ m_mediaPlayer = gameObject.AddComponent();
+ }
+ catch (Exception e)
+ {
+ Debug.LogError("AVProVideo not found in project: " + e.ToString());
+ }
+ }
+ }
+
+ public override bool IsPlayerCreated()
+ {
+ return m_mediaPlayer != null;
+ }
+
+ public override bool IsPlayerSetup()
+ {
+ if (!IsPlayerCreated())
+ {
+ return false;
+ }
+ return m_mediaPlayer.MediaPath != null && (m_mediaPlayer.MediaSource == MediaSource.Path ? m_mediaPlayer.MediaPath.Path != "" : m_mediaPlayer.MediaReference != null);
+ }
+
+ ///
+ /// Sets the video from a path. Assumed relative to data folder path.
+ public override void SetVideoPath(string path)
+ {
+ if (!IsPlayerCreated())
+ {
+ return;
+ }
+
+ path = path.Replace("\\", "/");
+ if (path.StartsWith(Application.dataPath))
+ {
+ path = "Assets" + path.Substring(Application.dataPath.Length);
+ }
+
+ m_path = path;
+ m_pathType = MediaPathType.RelativeToProjectFolder;
+ }
+
+ ///
+ /// Get the absolute path to the video.
+ public override string GetVideoPath()
+ {
+ if (!IsPlayerSetup())
+ {
+ return "";
+ }
+ return m_mediaPlayer.MediaPath.GetResolvedFullPath();
+ }
+
+ public override IEnumerator Load()
+ {
+ //start the loading operation
+ m_mediaPlayer.OpenMedia(new MediaPath(m_path, m_pathType), false);
+ events.OnClipLoadingStarted();
+
+ //while the video is loading you can't play it
+ while (!m_mediaPlayer.Control.CanPlay())
+ {
+ videoLoaded = false;
+ yield return null;
+ }
+ videoLoaded = true;
+ events.OnClipLoadingFinished();
+ yield return null;
+ }
+
+ public override void StartVideoLoad()
+ {
+ StartCoroutine(Load());
+ }
+
+ public override IEnumerator LoadAndPlay()
+ {
+ StartVideoLoad();
+ while (!videoLoaded)
+ {
+ yield return null;
+ }
+ Play();
+ yield return null;
+ }
+ public override void Play()
+ {
+ if (videoLoaded || m_mediaPlayer.MediaOpened)
+ {
+ videoLoaded = true;
+ m_mediaPlayer.Control.Play();
+ events.OnClipPlaybackStarted();
+ }
+ }
+ public override void Pause()
+ {
+ m_mediaPlayer.Control.Pause();
+ events.OnClipPlaybackPaused();
+ }
+ public override void Stop()
+ {
+ if (m_mediaPlayer != null && m_mediaPlayer.Control != null)
+ m_mediaPlayer.Control.Stop();
+ events.OnClipPlaybackStopped();
+ }
+
+ public override double GetCurrentTime()
+ {
+ return m_mediaPlayer.Control.GetCurrentTime();
+ }
+
+ public override int GetCurrentFrame()
+ {
+ if (m_mediaPlayer != null && m_mediaPlayer.TextureProducer != null)
+ {
+ return m_mediaPlayer.TextureProducer.GetTextureFrameCount();
+ }
+ return -1;
+ }
+
+ public override double GetDuration()
+ {
+ return m_mediaPlayer.Info.GetDuration();
+ }
+
+ public override Texture GetTexture()
+ {
+ if (m_mediaPlayer != null && m_mediaPlayer.MediaOpened && m_mediaPlayer.TextureProducer != null)
+ {
+ Texture2D tex = m_mediaPlayer.TextureProducer.GetTexture() as Texture2D;
+ if (tex != null)
+ {
+ // Avoid crash on android when directly returning the TextureProducer.GetTexture()
+ if (Application.platform == RuntimePlatform.Android && !disableAndroidTextureCopyWorkAround)
+ {
+ if (m_rt == null ||
+ m_rt.width != tex.width ||
+ m_rt.height != tex.height)
+ {
+ if (m_rt != null)
+ {
+ m_rt.Release();
+ m_rt = null;
+ }
+ m_rt = new RenderTexture(tex.width, tex.height, 0);
+ m_rt.Create();
+ }
+
+ Graphics.Blit(tex, m_rt);
+
+ return m_rt;
+ }
+ else
+ {
+ return tex;
+ }
+ }
+ }
+
+ return null;
+ }
+ public override bool IsTextureFlipped()
+ {
+ if (m_mediaPlayer != null && m_mediaPlayer.TextureProducer != null)
+ {
+ return m_mediaPlayer.TextureProducer.RequiresVerticalFlip();
+ }
+ return false;
+ }
+
+ public override GammaCorrection GammaCorrectDepth()
+ {
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear)
+ {
+ if (m_mediaPlayer.Info != null && !m_mediaPlayer.Info.PlayerSupportsLinearColorSpace())
+ {
+ return GammaCorrection.None;
+ }
+ else
+ {
+ return GammaCorrection.LinearToGammaSpace;
+ }
+ }
+ else // ColorSpace.Gamma
+ {
+ return GammaCorrection.None;
+ }
+ }
+
+ public override GammaCorrection GammaCorrectColor()
+ {
+
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear)
+ {
+ if (m_mediaPlayer.Info != null && !m_mediaPlayer.Info.PlayerSupportsLinearColorSpace())
+ {
+ return GammaCorrection.GammaToLinearSpace;
+ }
+ else
+ {
+ return GammaCorrection.None;
+ }
+ }
+ else // ColorSpace.Gamma
+ {
+ return GammaCorrection.None;
+ }
+ }
+
+ public override bool IsPlaying()
+ {
+ return (!IsPlayerSetup() || !IsPlayerCreated() || m_mediaPlayer.Control == null) ? false : m_mediaPlayer.Control.IsPlaying();
+ }
+
+ public override void RemoveComponents()
+ {
+ if (!Application.isPlaying)
+ {
+ DestroyImmediate(m_mediaPlayer, true);
+ DestroyImmediate(this, true);
+ }
+ else
+ {
+ Destroy(m_mediaPlayer);
+ Destroy(this);
+ }
+ }
+
+ public override void OnMetadataUpdated(Depthkit.Metadata metadata) { /* do nothing */}
+
+ public override string GetPlayerTypeName()
+ {
+ return typeof(Depthkit.AVProVideoPlayer).Name;
+ }
+
+ public new static string GetPlayerPrettyName()
+ {
+ return "Video Player (AVPro)";
+ }
+
+ public RenderHeads.Media.AVProVideo.MediaPlayer GetPlayerBackend()
+ {
+ return m_mediaPlayer;
+ }
+
+ public override void Seek(float toTimeSeconds)
+ {
+ if (m_mediaPlayer == null)
+ {
+ return;
+ }
+
+ if (m_mediaPlayer.Control == null)
+ {
+ var Init = m_mediaPlayer.GetType().GetMethod("Initialise", BindingFlags.NonPublic | BindingFlags.Instance);
+ Init?.Invoke(m_mediaPlayer, null);
+ }
+
+ var control = m_mediaPlayer.Control;
+ if (control == null)
+ {
+ return;
+ }
+
+ if (control.IsPlaying())
+ {
+ control.Pause(); // Pause since we'll just be seeking.
+ }
+
+ float currentTime = (float)control.GetCurrentTime();
+ float directorTime = toTimeSeconds;
+
+ if (!Mathf.Approximately(currentTime, directorTime))
+ {
+ var preSeekFrameCount = m_mediaPlayer.TextureProducer.GetTextureFrameCount();
+
+ float preSeekTime = (float)control.GetCurrentTime();
+
+ control.Seek(directorTime);
+
+ float postSeekTime = (float)control.GetCurrentTime();
+
+ if (!Mathf.Approximately(preSeekTime, postSeekTime))
+ {
+ control.WaitForNextFrame(GetDummyCamera(), preSeekFrameCount);
+ }
+ }
+
+ m_mediaPlayer.Player.Update();
+ }
+
+ static Camera _dummyCamera;
+ private static Camera GetDummyCamera()
+ {
+ if (_dummyCamera == null)
+ {
+ const string goName = "Video Dummy Camera";
+ GameObject go = GameObject.Find(goName);
+ if (go == null)
+ {
+ go = new GameObject(goName);
+ go.hideFlags = HideFlags.HideInHierarchy | HideFlags.DontSave;
+ go.SetActive(false);
+ if (Application.isPlaying)
+ {
+ DontDestroyOnLoad(go);
+ }
+
+ _dummyCamera = go.AddComponent();
+ _dummyCamera.hideFlags = HideFlags.HideInInspector | HideFlags.DontSave;
+ _dummyCamera.cullingMask = 0;
+ _dummyCamera.clearFlags = CameraClearFlags.Nothing;
+ _dummyCamera.enabled = false;
+ }
+ else
+ {
+ _dummyCamera = go.GetComponent();
+ }
+ }
+ return _dummyCamera;
+ }
+ public override uint GetVideoWidth()
+ {
+ return m_mediaPlayer != null && m_mediaPlayer.Info != null ? (uint)m_mediaPlayer.Info.GetVideoWidth() : 0;
+ }
+ public override uint GetVideoHeight()
+ {
+ return m_mediaPlayer != null && m_mediaPlayer.Info != null ? (uint)m_mediaPlayer.Info.GetVideoHeight() : 0;
+ }
+
+ public override bool SupportsPosterFrame()
+ {
+ return true;
+ }
+
+ void OnDisable()
+ {
+ if (m_rt != null)
+ {
+ m_rt.Release();
+ m_rt = null;
+ }
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/LocalPackages/depthkit.avpro/Runtime/AVProVideoPlayer.cs.meta b/LocalPackages/depthkit.avpro/Runtime/AVProVideoPlayer.cs.meta
new file mode 100644
index 0000000..f8749d9
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/Runtime/AVProVideoPlayer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f836f7125ecaa7a40b96bbc592961c04
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: 42c51ff9981f3e24b83cd7ad3c56e235, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/LocalPackages/depthkit.avpro/Runtime/Depthkit.AVPro.asmdef b/LocalPackages/depthkit.avpro/Runtime/Depthkit.AVPro.asmdef
new file mode 100644
index 0000000..58abbca
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/Runtime/Depthkit.AVPro.asmdef
@@ -0,0 +1,17 @@
+{
+ "name": "Depthkit.AVPro",
+ "rootNamespace": "",
+ "references": [
+ "GUID:3ca842002c51d0a43b73e45298809a13",
+ "GUID:d757665d4a59fe94bab8bd5391e60e3d"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/LocalPackages/depthkit.avpro/Runtime/Depthkit.AVPro.asmdef.meta b/LocalPackages/depthkit.avpro/Runtime/Depthkit.AVPro.asmdef.meta
new file mode 100644
index 0000000..34b94a0
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/Runtime/Depthkit.AVPro.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9399828fa2dee0448ab66bbae2c0eb43
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/LocalPackages/depthkit.avpro/package.json b/LocalPackages/depthkit.avpro/package.json
new file mode 100644
index 0000000..fd38e24
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "nyc.scatter.depthkit.avpro",
+ "version": "0.2.1",
+ "displayName": "Depthkit AVPro Video Player",
+ "description": "Use the Depthkit AVPro Video Player to playback Depthkit captures as combined-per-pixel videos using the AVPro Video Player from RenderHeads.\n\nNote AVPro Video is a dependency of this package, and is sold separately on the Unity Asset Store and supported by RenderHeads.",
+ "unity": "2022.3",
+ "dependencies": {
+ "nyc.scatter.depthkit.core" : "0.14.2"
+ },
+ "samples": [],
+ "keywords": [
+ "Depthkit",
+ "Volumetric",
+ "Scatter"
+ ],
+ "author": {
+ "name": "Scatter",
+ "email": "support@depthkit.tv",
+ "url": "https://www.depthkit.tv"
+ }
+}
\ No newline at end of file
diff --git a/LocalPackages/depthkit.avpro/package.json.meta b/LocalPackages/depthkit.avpro/package.json.meta
new file mode 100644
index 0000000..9706b52
--- /dev/null
+++ b/LocalPackages/depthkit.avpro/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 404e38087f0d5504cb3538ae1c4f5dd7
+PackageManifestImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Audio/Kueche.Selbststaendig_Kochen.1.F.wav b/Viagg-io/Assets/Audio/Kueche.1.F.Selbststaendig_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Selbststaendig_Kochen.1.F.wav
rename to Viagg-io/Assets/Audio/Kueche.1.F.Selbststaendig_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Selbststaendig_Kochen.1.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.1.F.Selbststaendig_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Selbststaendig_Kochen.1.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.1.F.Selbststaendig_Kochen.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.1.F.wav b/Viagg-io/Assets/Audio/Kueche.1.F.Zusammen_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.1.F.wav
rename to Viagg-io/Assets/Audio/Kueche.1.F.Zusammen_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.1.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.1.F.Zusammen_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.1.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.1.F.Zusammen_Kochen.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Outro.1.G.wav b/Viagg-io/Assets/Audio/Kueche.1.G.Outro.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Outro.1.G.wav
rename to Viagg-io/Assets/Audio/Kueche.1.G.Outro.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Outro.1.G.wav.meta b/Viagg-io/Assets/Audio/Kueche.1.G.Outro.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Outro.1.G.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.1.G.Outro.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.2.F.wav b/Viagg-io/Assets/Audio/Kueche.2.F.Zusammen_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.2.F.wav
rename to Viagg-io/Assets/Audio/Kueche.2.F.Zusammen_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.2.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.2.F.Zusammen_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.2.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.2.F.Zusammen_Kochen.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Outro.2.G.wav b/Viagg-io/Assets/Audio/Kueche.2.G.Outro.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Outro.2.G.wav
rename to Viagg-io/Assets/Audio/Kueche.2.G.Outro.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Outro.2.G.wav.meta b/Viagg-io/Assets/Audio/Kueche.2.G.Outro.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Outro.2.G.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.2.G.Outro.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.3.F.wav b/Viagg-io/Assets/Audio/Kueche.3.F.Zusammen_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.3.F.wav
rename to Viagg-io/Assets/Audio/Kueche.3.F.Zusammen_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.3.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.3.F.Zusammen_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.3.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.3.F.Zusammen_Kochen.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Outro.3.G.wav b/Viagg-io/Assets/Audio/Kueche.3.G.Outro.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Outro.3.G.wav
rename to Viagg-io/Assets/Audio/Kueche.3.G.Outro.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Outro.3.G.wav.meta b/Viagg-io/Assets/Audio/Kueche.3.G.Outro.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Outro.3.G.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.3.G.Outro.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.4.F.wav b/Viagg-io/Assets/Audio/Kueche.4.F.Zusammen_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.4.F.wav
rename to Viagg-io/Assets/Audio/Kueche.4.F.Zusammen_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.4.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.4.F.Zusammen_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.4.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.4.F.Zusammen_Kochen.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.5.F.wav b/Viagg-io/Assets/Audio/Kueche.5.F.Zusammen_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.5.F.wav
rename to Viagg-io/Assets/Audio/Kueche.5.F.Zusammen_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.5.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.5.F.Zusammen_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.5.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.5.F.Zusammen_Kochen.wav.meta
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.6.F.wav b/Viagg-io/Assets/Audio/Kueche.6.F.Zusammen_Kochen.wav
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.6.F.wav
rename to Viagg-io/Assets/Audio/Kueche.6.F.Zusammen_Kochen.wav
diff --git a/Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.6.F.wav.meta b/Viagg-io/Assets/Audio/Kueche.6.F.Zusammen_Kochen.wav.meta
similarity index 100%
rename from Viagg-io/Assets/Audio/Kueche.Zusammen_Kochen.6.F.wav.meta
rename to Viagg-io/Assets/Audio/Kueche.6.F.Zusammen_Kochen.wav.meta
diff --git a/Viagg-io/Assets/BehaviourTrees/3.2-Grotto.bt.txt b/Viagg-io/Assets/BehaviourTrees/3.2-Grotto.bt.txt
index 733d299..8a258da 100644
--- a/Viagg-io/Assets/BehaviourTrees/3.2-Grotto.bt.txt
+++ b/Viagg-io/Assets/BehaviourTrees/3.2-Grotto.bt.txt
@@ -1,8 +1,9 @@
Tree("Root") {
Composite(Sequence) {
- RunTree("32_Grotto_Kueche_Intro")
- RunTree("32_Grotto_Kueche_Zwiebeln_schneiden")
- RunTree("32_Grotto_Kueche_alles_gefunden")
+ //RunTree("32_Grotto_Kueche_Intro")
+ //RunTree("32_Grotto_Kueche_Zwiebeln_schneiden")
+ // RunTree("32_Grotto_Kueche_alles_gefunden")
+ RunTree("32_Grotto_Kueche_Zusammen_Kochen")
}
}
@@ -11,106 +12,164 @@ Tree("32_Grotto_Kueche_Intro") {
BTC.Run("AudioSource.AUDIO.Kueche1FIntro")
// Schuerze greifen
- // Was passiert mit der Schuerze? Schuerze verstecken
- BTC.Run("NamedGrabEvent.INTERACTABLES.Schuerze")
//BTC.GetKeyDown("Return")
+ BTC.Run("GO/NamedGrabEvent.INTERACTABLES.Schuerze")
+ BTC.Hide("GO/NamedGrabEvent.INTERACTABLES.Schuerze")
BTC.Run("AudioSource.AUDIO.Kueche2FIntro")
// Rezept vorlesen: Button Klick
BTC.Set("TextMeshPro.HANDMENU.Option1Button", "text", "Rezept vorlesen")
BTC.Show("GO.HANDMENU.Option1Button")
- BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
- //BTC.GetKeyDown("Return")
+
+ Composite(Race) {
+ Composite(Sequence) {
+ // auf Button klicken
+ BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
+ //BTC.GetKeyDown("Return")
+ }
+ Composite(Sequence) {
+ // keine Reaktion
+ BTC.Wait(5)
+ // BTC.Run(Audio)
+ BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
+ }
+ }
BTC.Hide("GO.HANDMENU.Option1Button")
+
BTC.Run("AudioSource.AUDIO.Kueche3FIntro")
// Pilze leuchten
- // ...
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Steinpilze")
Composite(Race) {
Composite(Sequence) {
// Pilze ins Wasser Glas legen
- // GrabEvent auf Pilz?
- BTC.Set("Collider.INTERACTABLES.Wasser", "otherTag", "Steinpilze")
- BTC.Run("Collider.INTERACTABLES.Wasser")
- //BTC.GetKeyDown("Return")
-
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Steinpilze")
+ BTC.Set("Collider.INTERACTABLES.GlassWasserTrigger", "otherTag", "Steinpilze")
+ BTC.Run("Collider.INTERACTABLES.GlassWasserTrigger")
}
Composite(Sequence) {
// Keine Reaction
BTC.Wait(5)
- RunTree("32_Grotto_Kueche_Steinpilze_Hilfe")
+ BTC.Run("AudioSource.AUDIO.Kueche1FSteinpilze")
+ // Pilze ins Wasser Glas legen
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Steinpilze")
+ BTC.Set("Collider.INTERACTABLES.GlassWasserTrigger", "otherTag", "Steinpilze")
+ BTC.Run("Collider.INTERACTABLES.GlassWasserTrigger")
}
}
- }
-}
-
-Tree("32_Grotto_Kueche_Steinpilze_Hilfe") {
- Composite(Sequence) {
- BTC.Run("AudioSource.AUDIO.Kueche1FSteinpilze")
- BTC.Set("Collider.INTERACTABLES.Wasser", "otherTag", "Steinpilze")
- BTC.Run("Collider.INTERACTABLES.Wasser")
- //BTC.GetKeyDown("Return")
- }
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Steinpilze")
+ }
}
Tree("32_Grotto_Kueche_Zwiebeln_schneiden") {
Composite(Sequence) {
BTC.Run("AudioSource.AUDIO.Kueche1FZwiebelnsc")
- // Zwiebeln reichen
- // Wie reiche ich die Zwiebeln? Auf eine bestimmte stelle am Tisch legen?
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Zwiebeln")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- //BTC.GetKeyDown("Return")
+ // Zwiebeln schneiden
+ // ...
+
BTC.Run("AudioSource.AUDIO.Kueche2FZwiebelnsc")
// Zutaten leuchten
- // ...
+ Composite(Marathon) {
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon")
+ BTC.Show("GO/NamedSocketEvent.SOCKETS.BouillonSocket")
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein")
+ BTC.Show("GO/NamedSocketEvent.SOCKETS.WeissweinSocket")
+ BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto")
+ BTC.Show("GO/NamedSocketEvent.SOCKETS.RisottoSocket")
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel")
+ BTC.Show("GO/NamedSocketEvent.SOCKETS.OlivenoelSocket")
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer")
+ BTC.Show("GO/NamedSocketEvent.SOCKETS.PfefferSocket")
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Salz")
+ BTC.Show("GO/NamedSocketEvent.SOCKETS.SalzSocket")
+ }
+
- // Zutaten auf die Arbeitsflaeche legen
- RunTree("32_Grotto_Kueche_Zwiebeln_schneiden_Zutaten_suchen")
- // Keine Reaction
- //BTC.Wait(10)
- //BTC.Run("AudioSource.AUDIO.Kueche1FkeineReakt")
+ // Zutaten auf die Arbeitsflaeche legen mithilfe Sockets
+ Composite(Marathon) {
+
+ Decorator (RepeatUntilFailed) {
+ Decorator(Inverter) {
+ Composite(Sequence) {
+ BTC.Run("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto")
+ //BTC.GetKeyDown("Return")
+
+ Composite(Race) {
+ Composite(Sequence) {
+ // Success
+ BTC.Run("GO/NamedSocketEvent.SOCKETS.RisottoSocket")
+ BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto")
+ BTC.SetBool("IsSnapped")
+ }
+ Composite(Sequence) {
+ // Fail
+ BTC.Run("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto")
+
+ Composite(Marathon) {
+ BTC.Run("AudioSource.AUDIO.Kueche2FZwiebelnsc")
+ // Objekt geht zurueck
+ BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto", -6.733, 1.362, -18.908)
+ }
+
+ BTC.SetBool("IsSnapped", false)
+ }
+ }
+
+ BTC.CompareBool("IsSnapped")
+ } // Sequence
+ }
+ } // Repeat
+
+
+ Composite(Sequence) {
+
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Salz")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Salz")
+ BTC.Run("GO/NamedSocketEvent.SOCKETS.SalzSocket")
+ }
+ Composite(Sequence) {
+
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer")
+ BTC.Run("GO/NamedSocketEvent.SOCKETS.PfefferSocket")
+ }
+ Composite(Sequence) {
+
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein")
+ BTC.Run("GO/NamedSocketEvent.SOCKETS.WeissweinSocket")
+ }
+ Composite(Sequence) {
+
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon")
+ BTC.Run("GO/NamedSocketEvent.SOCKETS.BouillonSocket")
+ }
+ Composite(Sequence) {
+
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel")
+ BTC.Run("GO/NamedSocketEvent.SOCKETS.OlivenoelSocket")
+ }
+ }
+
+ BTC.Wait(1)
+
+ Composite(Marathon) {
+ BTC.Hide("GO/NamedSocketEvent.SOCKETS.OlivenoelSocket")
+ BTC.Hide("GO/NamedSocketEvent.SOCKETS.BouillonSocket")
+ BTC.Hide("GO/NamedSocketEvent.SOCKETS.WeissweinSocket")
+ BTC.Hide("GO/NamedSocketEvent.SOCKETS.PfefferSocket")
+ BTC.Hide("GO/NamedSocketEvent.SOCKETS.SalzSocket")
+ BTC.Hide("GO/NamedSocketEvent.SOCKETS.RisottoSocket")
+ }
}
}
-Tree("32_Grotto_Kueche_Zwiebeln_schneiden_Zutaten_suchen") {
- Composite(Marathon) {
- Composite(Sequence) {
- BTC.Run("NamedGrabEvent.INTERACTABLES.Risotto")
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Risotto")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- }
- Composite(Sequence) {
- BTC.Run("NamedGrabEvent.INTERACTABLES.Salz")
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Salz")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- }
- Composite(Sequence) {
- BTC.Run("NamedGrabEvent.INTERACTABLES.Pfeffer")
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Pfeffer")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- }
- Composite(Sequence) {
- BTC.Run("NamedGrabEvent.INTERACTABLES.Weisswein")
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Weisswein")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- }
- Composite(Sequence) {
- BTC.Run("NamedGrabEvent.INTERACTABLES.Bouillon")
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Bouillon")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- }
- Composite(Sequence) {
- BTC.Run("NamedGrabEvent.INTERACTABLES.Olivenoel")
- BTC.Set("Collider.INTERACTABLES.Arbeitsflaeche", "otherTag", "Olivenoel")
- BTC.Run("Collider.INTERACTABLES.Arbeitsflaeche")
- }
- }
-}
Tree("32_Grotto_Kueche_alles_gefunden") {
Composite(Sequence) {
@@ -121,8 +180,8 @@ Tree("32_Grotto_Kueche_alles_gefunden") {
// Zwiebeln in Topf geben
BTC.Run("NamedGrabEvent.INTERACTABLES.Zwiebeln")
- BTC.Set("Collider.STATIC.Pfanne004", "otherTag", "Zwiebeln")
- BTC.Run("Collider.STATIC.Pfanne004")
+ BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Zwiebeln")
+ BTC.Run("Collider.INTERACTABLES.Topf")
BTC.Run("AudioSource.AUDIO.Kueche3Fallesgefun")
// Frage beantworten
@@ -215,16 +274,111 @@ Tree("32_Grotto_Kueche_Kochen_Anzahl") {
Tree("32_Grotto_Kueche_Zusammen_Kochen") {
Composite(Sequence) {
- BTC.GetKeyDown("Return")
+ BTC.Run("AudioSource.AUDIO.Kueche1FZusammenKo")
+
+ // Risotto in Topf geben
+ BTC.Run("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto")
+ BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Risotto")
+ BTC.Run("Collider.INTERACTABLES.Topf")
+
+ // Ruehren
+ BTC.Run("NamedGrabEvent.INTERACTABLES.Loeffel")
+ BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Loeffel")
+ BTC.Run("Collider.INTERACTABLES.Topf")
+ // Wie lange ruehren?
+ BTC.Wait(2)
+ BTC.Run("AudioSource.AUDIO.Kueche2FZusammenKo")
+
+ // Wein leuchtet
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein")
+
+ // Wein greifen
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein")
+
+ // Wein in Topf giessen
+ // ...
+ BTC.Run("AudioSource.AUDIO.Kueche3FZusammenKo")
+
+ // Bouillon leuchtet
+ BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon")
+
+ // Bouillon greifen
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon")
+ BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon")
+
+ // Bouillon in Topf geben
+ // ...
+ BTC.Run("AudioSource.AUDIO.Kueche4FZusammenKo")
+
+ // Glas Wasser mit Steinpilze in Topf geben
+ BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Steinpilze")
+ BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Steinpilze")
+ BTC.Run("Collider.INTERACTABLES.Topf")
+
+ RunTree("32_Grotto_Kueche_Parmigiano")
}
}
Tree("32_Grotto_Kueche_Selbststaendig_Kochen") {
Composite(Sequence) {
- BTC.GetKeyDown("Return")
+ BTC.Run("AudioSource.AUDIO.Kueche1FSelbststae")
+ // Selbstaendig kochen...
+ // ...
+
+ RunTree("32_Grotto_Kueche_Parmigiano")
}
}
+Tree("32_Grotto_Kueche_Parmigiano") {
+ Composite(Sequence) {
+ BTC.Run("AudioSource.AUDIO.Kueche4FZusammenKo")
+
+ // Parmigiano in Topf geben
+ BTC.Run("NamedGrabEvent.INTERACTABLES.Parmigiano")
+ BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Parmigiano")
+ BTC.Run("Collider.INTERACTABLES.Topf")
+
+ BTC.Run("AudioSource.AUDIO.Kueche4FZusammenKo") // Richtige Audio fehlt
+
+ // Antwort User
+ BTC.Set("TextMeshPro.HANDMENU.Option1Button", "text", "Ja")
+ BTC.Show("GO.HANDMENU.Option1Button")
+ Composite(Race) {
+ BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
+ BTC.Wait(5)
+ }
+ BTC.Hide("GO.HANDMENU.Option1Button")
+
+ BTC.Run("AudioSource.AUDIO.Kueche4FZusammenKo") // Richtige Audio fehlt
+
+ // Stelle für Pfanne leuchtet
+ BTC.Enable("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer")
+
+ // Pfanne rueber stellen
+ BTC.Run("NamedGrabEvent.INTERACTABLES.Topf")
+ BTC.Set("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer", "otherTag", "Topf")
+ BTC.Run("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer")
+ BTC.Disable("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer")
+
+ BTC.Run("AudioSource.AUDIO.Kueche5FZusammenKo")
+ BTC.Run("AudioSource.AUDIO.Kueche6FZusammenKo")
+
+ // --- Outro ---
+ BTC.Run("AudioSource.AUDIO.Kueche1GOutro")
+ BTC.Run("AudioSource.AUDIO.Kueche2GOutro")
+
+ // Name sagen
+ BTC.Set("TextMeshPro.HANDMENU.Option1Button", "text", "Mein Name ist User.")
+ BTC.Show("GO.HANDMENU.Option1Button")
+ Composite(Race) {
+ BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
+ BTC.Wait(5)
+ }
+ BTC.Hide("GO.HANDMENU.Option1Button")
+ BTC.Run("AudioSource.AUDIO.Kueche3GOutro")
+ }
+}
Tree("32_Grotto_Kueche_Hide") {
Composite(Sequence) {
@@ -234,3 +388,4 @@ Tree("32_Grotto_Kueche_Hide") {
}
}
+
diff --git a/Viagg-io/Assets/Materials/Grotto/SocketTransparentMat.mat b/Viagg-io/Assets/Materials/Grotto/SocketTransparentMat.mat
new file mode 100644
index 0000000..3c2212f
--- /dev/null
+++ b/Viagg-io/Assets/Materials/Grotto/SocketTransparentMat.mat
@@ -0,0 +1,146 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-5913085340061733947
+MonoBehaviour:
+ m_ObjectHideFlags: 11
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ version: 7
+--- !u!21 &2100000
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: SocketTransparentMat
+ m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
+ m_Parent: {fileID: 0}
+ m_ModifiedSerializedProperties: 0
+ m_ValidKeywords:
+ - _ALPHAPREMULTIPLY_ON
+ - _RECEIVE_SHADOWS_OFF
+ - _SURFACE_TYPE_TRANSPARENT
+ m_InvalidKeywords: []
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - DepthOnly
+ - SHADOWCASTER
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SpecGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - unity_Lightmaps:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - unity_LightmapsInd:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - unity_ShadowMasks:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Ints: []
+ m_Floats:
+ - _AlphaClip: 0
+ - _AlphaToMask: 0
+ - _Blend: 0
+ - _BlendModePreserveSpecular: 1
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _ClearCoatMask: 0
+ - _ClearCoatSmoothness: 0
+ - _Cull: 2
+ - _Cutoff: 0.594
+ - _DetailAlbedoMapScale: 1
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 10
+ - _DstBlendAlpha: 10
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 0
+ - _Glossiness: 0
+ - _GlossinessSource: 0
+ - _GlossyReflections: 0
+ - _Metallic: 0
+ - _Mode: 3
+ - _OcclusionStrength: 1
+ - _Parallax: 0.005
+ - _QueueOffset: 0
+ - _ReceiveShadows: 0
+ - _SampleGI: 0
+ - _Shininess: 0
+ - _Smoothness: 0.5
+ - _SmoothnessSource: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecSource: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _SrcBlendAlpha: 1
+ - _Surface: 1
+ - _UVSec: 0
+ - _WorkflowMode: 1
+ - _ZWrite: 0
+ m_Colors:
+ - _BaseColor: {r: 0.5188679, g: 0.4919455, b: 0.4919455, a: 0}
+ - _Color: {r: 0.51886785, g: 0.49194545, b: 0.49194545, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ m_BuildTextureStacks: []
diff --git a/Viagg-io/Assets/Materials/Grotto/SocketTransparentMat.mat.meta b/Viagg-io/Assets/Materials/Grotto/SocketTransparentMat.mat.meta
new file mode 100644
index 0000000..d46b242
--- /dev/null
+++ b/Viagg-io/Assets/Materials/Grotto/SocketTransparentMat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f6dc75ad58e34453eb50f8df8c8b5486
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Models/Grotto/Grotto.fbx b/Viagg-io/Assets/Models/Grotto/Grotto.fbx
index 9be2abf..647654d 100644
Binary files a/Viagg-io/Assets/Models/Grotto/Grotto.fbx and b/Viagg-io/Assets/Models/Grotto/Grotto.fbx differ
diff --git a/Viagg-io/Assets/Models/Grotto/Grotto.fbx.meta b/Viagg-io/Assets/Models/Grotto/Grotto.fbx.meta
index 8d72037..686ef7a 100644
--- a/Viagg-io/Assets/Models/Grotto/Grotto.fbx.meta
+++ b/Viagg-io/Assets/Models/Grotto/Grotto.fbx.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 0d39ca0e3a0634cc5bc7ff014d49440c
+guid: e140d538231bf44729512ec6061a0d0d
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024.meta b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe.meta
similarity index 77%
rename from Viagg-io/Assets/Models/Test/Depthkit/Test22072024.meta
rename to Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe.meta
index 83741f1..7a57824 100644
--- a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024.meta
+++ b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 433bbbc5ea1c6494a94b3e58cf9ec9d5
+guid: c49bec61413ab4eb3bef15520de642b8
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.png b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.png
new file mode 100644
index 0000000..a425b97
Binary files /dev/null and b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.png differ
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.png.meta b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.png.meta
similarity index 98%
rename from Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.png.meta
rename to Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.png.meta
index 7eaf8ef..46140b4 100644
--- a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.png.meta
+++ b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.png.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 5a2feeb9d6da542879361ad2cc5e5d91
+guid: cd6f87def808f49b3a441810b508f66a
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.txt b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.txt
new file mode 100644
index 0000000..b637a52
--- /dev/null
+++ b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.txt
@@ -0,0 +1,275 @@
+{
+ "_versionMajor": 0,
+ "_versionMinor": 5,
+ "boundsCenter": {
+ "x": -0.40000003576278687,
+ "y": -1.0,
+ "z": -0.2999999523162842
+ },
+ "boundsSize": {
+ "x": 1.600000023841858,
+ "y": 2.0,
+ "z": 1.5999999046325684
+ },
+ "defaultReconstructionSettings": {
+ "depthBiasAdjustment": 0.0,
+ "edgeMaskBlurAmount": 0.009999999776482582,
+ "edgeMaskSobelMultiplier": 10.0,
+ "surfaceNormalColorBlendPower": 2.000999927520752,
+ "viewDependentColorBlendPower": 0.0010000000474974513
+ },
+ "format": "perpixel",
+ "numAngles": 6,
+ "numColumns": 3,
+ "numRows": 2,
+ "perspectives": [
+ {
+ "clipEpsilon": 0.002312717027962208,
+ "crop": {
+ "w": 0.9564012289047241,
+ "x": 0.13061988353729248,
+ "y": 0.04359881207346916,
+ "z": 0.8693801164627075
+ },
+ "depthFocalLength": {
+ "x": 1500.3175048828125,
+ "y": 1499.0972900390625
+ },
+ "depthImageSize": {
+ "x": 2560.0,
+ "y": 1440.0
+ },
+ "depthPrincipalPoint": {
+ "x": 1275.4683837890625,
+ "y": 718.2286987304688
+ },
+ "extrinsics": {
+ "e00": -0.32180747389793396,
+ "e01": 0.0007329394575208426,
+ "e02": 0.9468048214912415,
+ "e03": 1.619429588317871,
+ "e10": -0.9467655420303345,
+ "e11": 0.008894646540284157,
+ "e12": -0.32180100679397583,
+ "e13": -1.4947996139526367,
+ "e20": -0.008657354861497879,
+ "e21": -0.99996018409729,
+ "e22": -0.002168441889807582,
+ "e23": 0.07123926281929016,
+ "e30": 0.0,
+ "e31": 0.0,
+ "e32": 0.0,
+ "e33": 1.0
+ },
+ "farClip": 3.151407480239868,
+ "nearClip": 0.9894483089447021
+ },
+ {
+ "clipEpsilon": 0.0018278819043189287,
+ "crop": {
+ "w": 1.0,
+ "x": 0.03410596773028374,
+ "y": 0.0,
+ "z": 0.7058027982711792
+ },
+ "depthFocalLength": {
+ "x": 1505.5750732421875,
+ "y": 1504.5609130859375
+ },
+ "depthImageSize": {
+ "x": 2560.0,
+ "y": 1440.0
+ },
+ "depthPrincipalPoint": {
+ "x": 1280.892578125,
+ "y": 728.7554321289063
+ },
+ "extrinsics": {
+ "e00": 0.6473193764686584,
+ "e01": 0.19083306193351746,
+ "e02": -0.7379433512687683,
+ "e03": -1.8117287158966064,
+ "e10": 0.04852348566055298,
+ "e11": 0.9558703899383545,
+ "e12": 0.2897537648677826,
+ "e13": -0.4360555410385132,
+ "e20": 0.7606728076934814,
+ "e21": -0.22337080538272858,
+ "e22": 0.6094935536384583,
+ "e23": 1.3320561647415161,
+ "e30": 0.0,
+ "e31": 0.0,
+ "e32": 0.0,
+ "e33": 1.0
+ },
+ "farClip": 3.5676116943359375,
+ "nearClip": 0.8322051763534546
+ },
+ {
+ "clipEpsilon": 0.0019183270633220673,
+ "crop": {
+ "w": 1.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0
+ },
+ "depthFocalLength": {
+ "x": 1498.4473876953125,
+ "y": 1497.11083984375
+ },
+ "depthImageSize": {
+ "x": 2560.0,
+ "y": 1440.0
+ },
+ "depthPrincipalPoint": {
+ "x": 1265.181884765625,
+ "y": 722.2222290039063
+ },
+ "extrinsics": {
+ "e00": 0.07454666495323181,
+ "e01": 0.9283208250999451,
+ "e02": -0.364229679107666,
+ "e03": -1.0427669286727905,
+ "e10": -0.9500028491020203,
+ "e11": -0.04494527727365494,
+ "e12": -0.30898958444595337,
+ "e13": -1.3992159366607666,
+ "e20": -0.30321186780929565,
+ "e21": 0.36905336380004883,
+ "e22": 0.8785568475723267,
+ "e23": 1.3279074430465698,
+ "e30": 0.0,
+ "e31": 0.0,
+ "e32": 0.0,
+ "e33": 1.0
+ },
+ "farClip": 3.0908966064453125,
+ "nearClip": 0.48445895314216614
+ },
+ {
+ "clipEpsilon": 0.00203624926507473,
+ "crop": {
+ "w": 1.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0
+ },
+ "depthFocalLength": {
+ "x": 1500.8951416015625,
+ "y": 1500.4202880859375
+ },
+ "depthImageSize": {
+ "x": 2560.0,
+ "y": 1440.0
+ },
+ "depthPrincipalPoint": {
+ "x": 1285.6243896484375,
+ "y": 726.32373046875
+ },
+ "extrinsics": {
+ "e00": -0.17494119703769684,
+ "e01": -0.4072752594947815,
+ "e02": -0.8963941335678101,
+ "e03": -2.031996965408325,
+ "e10": 0.9817010164260864,
+ "e11": -0.002594058169052005,
+ "e12": -0.19041116535663605,
+ "e13": -1.4524781703948975,
+ "e20": 0.07522445917129517,
+ "e21": -0.9133017659187317,
+ "e22": 0.4002763330936432,
+ "e23": 0.14448893070220947,
+ "e30": 0.0,
+ "e31": 0.0,
+ "e32": 0.0,
+ "e33": 1.0
+ },
+ "farClip": 2.95473575592041,
+ "nearClip": 0.49924084544181824
+ },
+ {
+ "clipEpsilon": 0.0019126877887174487,
+ "crop": {
+ "w": 1.0,
+ "x": 0.07671022415161133,
+ "y": 0.0,
+ "z": 0.5977309942245483
+ },
+ "depthFocalLength": {
+ "x": 1496.1097412109375,
+ "y": 1495.4033203125
+ },
+ "depthImageSize": {
+ "x": 2560.0,
+ "y": 1440.0
+ },
+ "depthPrincipalPoint": {
+ "x": 1274.7603759765625,
+ "y": 723.102294921875
+ },
+ "extrinsics": {
+ "e00": 0.7368024587631226,
+ "e01": -0.10684210807085037,
+ "e02": 0.6676127910614014,
+ "e03": 1.5086183547973633,
+ "e10": -0.03835581988096237,
+ "e11": 0.9792395234107971,
+ "e12": 0.19904454052448273,
+ "e13": -0.4446754455566406,
+ "e20": -0.6750192046165466,
+ "e21": -0.17226335406303406,
+ "e22": 0.7174081206321716,
+ "e23": 1.148557186126709,
+ "e30": 0.0,
+ "e31": 0.0,
+ "e32": 0.0,
+ "e33": 1.0
+ },
+ "farClip": 3.731019973754883,
+ "nearClip": 1.116897463798523
+ },
+ {
+ "clipEpsilon": 0.001989133656024933,
+ "crop": {
+ "w": 0.9230896234512329,
+ "x": 0.0,
+ "y": 0.07691039890050888,
+ "z": 1.0
+ },
+ "depthFocalLength": {
+ "x": 1495.0631103515625,
+ "y": 1494.4176025390625
+ },
+ "depthImageSize": {
+ "x": 2560.0,
+ "y": 1440.0
+ },
+ "depthPrincipalPoint": {
+ "x": 1267.37890625,
+ "y": 736.1304321289063
+ },
+ "extrinsics": {
+ "e00": 0.18193583190441132,
+ "e01": -0.9022316336631775,
+ "e02": 0.39099544286727905,
+ "e03": 0.6211448907852173,
+ "e10": 0.9682206511497498,
+ "e11": 0.09497898072004318,
+ "e12": -0.23136073350906372,
+ "e13": -1.3657952547073364,
+ "e20": 0.17160463333129883,
+ "e21": 0.42066267132759094,
+ "e22": 0.8908393383026123,
+ "e23": 1.283046007156372,
+ "e30": 0.0,
+ "e31": 0.0,
+ "e32": 0.0,
+ "e33": 1.0
+ },
+ "farClip": 3.1509616374969482,
+ "nearClip": 0.6373046636581421
+ }
+ ],
+ "textureHeight": 4096,
+ "textureWidth": 4092
+}
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.txt.meta b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.txt.meta
similarity index 75%
rename from Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.txt.meta
rename to Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.txt.meta
index ccd5fcb..18c1734 100644
--- a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.txt.meta
+++ b/Viagg-io/Assets/Models/Test/Depthkit/08082024_Grotto_Guiseppe/Grotto_Guiseppe_Abschied_take0108_08_13_06_33_Export_08_08_17_08_00.txt.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: ce2d6d7d394e147518bcf4b8f2e80b93
+guid: 4d549dc5174254a2fb09b62089c972ad
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.mp4 b/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.mp4
deleted file mode 100644
index c1ff3e4..0000000
Binary files a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.mp4 and /dev/null differ
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.mp4.meta b/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.mp4.meta
deleted file mode 100644
index 740fa9f..0000000
--- a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.mp4.meta
+++ /dev/null
@@ -1,18 +0,0 @@
-fileFormatVersion: 2
-guid: 268a239ef80834dcf8c3b27cdf03abf9
-VideoClipImporter:
- externalObjects: {}
- serializedVersion: 2
- frameRange: 0
- startFrame: -1
- endFrame: -1
- colorSpace: 0
- deinterlace: 0
- encodeAlpha: 0
- flipVertical: 0
- flipHorizontal: 0
- importAudio: 1
- targetSettings: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.png b/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.png
deleted file mode 100644
index 476e851..0000000
Binary files a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.png and /dev/null differ
diff --git a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.txt b/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.txt
deleted file mode 100644
index 0166dd5..0000000
--- a/Viagg-io/Assets/Models/Test/Depthkit/Test22072024/ahoi07_19_19_21_17_Export_07_19_19_32_25.txt
+++ /dev/null
@@ -1,275 +0,0 @@
-{
- "_versionMajor": 0,
- "_versionMinor": 5,
- "boundsCenter": {
- "x": 0.0,
- "y": -1.0,
- "z": 0.0
- },
- "boundsSize": {
- "x": 1.0,
- "y": 2.0,
- "z": 1.0
- },
- "defaultReconstructionSettings": {
- "depthBiasAdjustment": 0.0,
- "edgeMaskBlurAmount": 0.009999999776482582,
- "edgeMaskSobelMultiplier": 10.0,
- "surfaceNormalColorBlendPower": 2.0,
- "viewDependentColorBlendPower": 0.0010000000474974513
- },
- "format": "perpixel",
- "numAngles": 6,
- "numColumns": 3,
- "numRows": 2,
- "perspectives": [
- {
- "clipEpsilon": 0.0036257191095501184,
- "crop": {
- "w": 0.9583691358566284,
- "x": 0.0,
- "y": 0.04163086414337158,
- "z": 0.8483789563179016
- },
- "depthFocalLength": {
- "x": 1500.3175048828125,
- "y": 1499.0972900390625
- },
- "depthImageSize": {
- "x": 2560.0,
- "y": 1440.0
- },
- "depthPrincipalPoint": {
- "x": 1275.4683837890625,
- "y": 718.2286987304688
- },
- "extrinsics": {
- "e00": -0.02792988158762455,
- "e01": 0.28931593894958496,
- "e02": -0.9568260908126831,
- "e03": -1.7454001903533936,
- "e10": -0.9881865382194519,
- "e11": 0.13630491495132446,
- "e12": 0.0700598657131195,
- "e13": -1.2200618982315063,
- "e20": 0.1506895273923874,
- "e21": 0.9474794268608093,
- "e22": 0.2820911109447479,
- "e23": 0.472872257232666,
- "e30": 0.0,
- "e31": 0.0,
- "e32": 0.0,
- "e33": 1.0
- },
- "farClip": 2.4775383472442627,
- "nearClip": 1.0985015630722046
- },
- {
- "clipEpsilon": 0.0020958036184310913,
- "crop": {
- "w": 0.9860617518424988,
- "x": 0.0,
- "y": 0.0,
- "z": 0.8655837774276733
- },
- "depthFocalLength": {
- "x": 1505.5750732421875,
- "y": 1504.5609130859375
- },
- "depthImageSize": {
- "x": 2560.0,
- "y": 1440.0
- },
- "depthPrincipalPoint": {
- "x": 1280.892578125,
- "y": 728.7554321289063
- },
- "extrinsics": {
- "e00": 0.9806053638458252,
- "e01": -0.03312395140528679,
- "e02": -0.19317342340946198,
- "e03": 0.012072339653968811,
- "e10": -0.1616521179676056,
- "e11": 0.4206206500530243,
- "e12": -0.8927187919616699,
- "e13": -2.5450408458709717,
- "e20": 0.11082310229539871,
- "e21": 0.9066317081451416,
- "e22": 0.40710827708244324,
- "e23": 0.5815377235412598,
- "e30": 0.0,
- "e31": 0.0,
- "e32": 0.0,
- "e33": 1.0
- },
- "farClip": 2.80656361579895,
- "nearClip": 0.42084410786628723
- },
- {
- "clipEpsilon": 0.002334830118343234,
- "crop": {
- "w": 0.8994048833847046,
- "x": 0.1711658239364624,
- "y": 0.0,
- "z": 0.5544185638427734
- },
- "depthFocalLength": {
- "x": 1498.4473876953125,
- "y": 1497.11083984375
- },
- "depthImageSize": {
- "x": 2560.0,
- "y": 1440.0
- },
- "depthPrincipalPoint": {
- "x": 1265.181884765625,
- "y": 722.2222290039063
- },
- "extrinsics": {
- "e00": 0.9874048829078674,
- "e01": -0.14426489174365997,
- "e02": -0.06495561450719833,
- "e03": -0.09699346125125885,
- "e10": 0.06451490521430969,
- "e11": 0.7420088052749634,
- "e12": -0.6672785878181458,
- "e13": -2.207484006881714,
- "e20": 0.14446251094341278,
- "e21": 0.654683530330658,
- "e22": 0.7419703602790833,
- "e23": 1.717136263847351,
- "e30": 0.0,
- "e31": 0.0,
- "e32": 0.0,
- "e33": 1.0
- },
- "farClip": 3.156834602355957,
- "nearClip": 1.015351414680481
- },
- {
- "clipEpsilon": 0.004574344959110022,
- "crop": {
- "w": 0.6242855787277222,
- "x": 0.14762921631336212,
- "y": 0.3757144510746002,
- "z": 0.8465307354927063
- },
- "depthFocalLength": {
- "x": 1500.8951416015625,
- "y": 1500.4202880859375
- },
- "depthImageSize": {
- "x": 2560.0,
- "y": 1440.0
- },
- "depthPrincipalPoint": {
- "x": 1285.6243896484375,
- "y": 726.32373046875
- },
- "extrinsics": {
- "e00": -0.022001605480909348,
- "e01": -0.048741407692432404,
- "e02": 0.9985690712928772,
- "e03": 1.930398941040039,
- "e10": 0.9994720816612244,
- "e11": 0.022810915485024452,
- "e12": 0.023134930059313774,
- "e13": -1.1329501867294312,
- "e20": -0.023905903100967407,
- "e21": 0.9985508918762207,
- "e22": 0.04821380227804184,
- "e23": -0.26948004961013794,
- "e30": 0.0,
- "e31": 0.0,
- "e32": 0.0,
- "e33": 1.0
- },
- "farClip": 2.458094358444214,
- "nearClip": 1.365041732788086
- },
- {
- "clipEpsilon": 0.002460331190377474,
- "crop": {
- "w": 1.0,
- "x": 0.0,
- "y": 0.0,
- "z": 1.0
- },
- "depthFocalLength": {
- "x": 1496.1097412109375,
- "y": 1495.4033203125
- },
- "depthImageSize": {
- "x": 2560.0,
- "y": 1440.0
- },
- "depthPrincipalPoint": {
- "x": 1274.7603759765625,
- "y": 723.102294921875
- },
- "extrinsics": {
- "e00": -0.9889599084854126,
- "e01": 0.06957120448350906,
- "e02": 0.13083656132221222,
- "e03": -0.22282758355140686,
- "e10": 0.0578983798623085,
- "e11": -0.6313350200653076,
- "e12": 0.7733458876609802,
- "e13": -0.5165885090827942,
- "e20": 0.13640430569648743,
- "e21": 0.7723832726478577,
- "e22": 0.6203369498252869,
- "e23": 1.2551623582839966,
- "e30": 0.0,
- "e31": 0.0,
- "e32": 0.0,
- "e33": 1.0
- },
- "farClip": 2.2722465991973877,
- "nearClip": 0.23999999463558197
- },
- {
- "clipEpsilon": 0.0031662536785006523,
- "crop": {
- "w": 1.0,
- "x": 0.0,
- "y": 0.0,
- "z": 1.0
- },
- "depthFocalLength": {
- "x": 1495.0631103515625,
- "y": 1494.4176025390625
- },
- "depthImageSize": {
- "x": 2560.0,
- "y": 1440.0
- },
- "depthPrincipalPoint": {
- "x": 1267.37890625,
- "y": 736.1304321289063
- },
- "extrinsics": {
- "e00": 0.08565513789653778,
- "e01": 0.9662866592407227,
- "e02": 0.24280300736427307,
- "e03": 0.10201678425073624,
- "e10": -0.9804809093475342,
- "e11": 0.03846389055252075,
- "e12": 0.1928151249885559,
- "e13": -1.1943856477737427,
- "e20": 0.1769755333662033,
- "e21": -0.2545793056488037,
- "e22": 0.9507202506065369,
- "e23": 1.273671269416809,
- "e30": 0.0,
- "e31": 0.0,
- "e32": 0.0,
- "e33": 1.0
- },
- "farClip": 1.9877712726593018,
- "nearClip": 0.4086180031299591
- }
- ],
- "textureHeight": 4096,
- "textureWidth": 4092
-}
diff --git a/Viagg-io/Assets/Packages/AVProVideo.meta b/Viagg-io/Assets/Packages/AVProVideo.meta
new file mode 100644
index 0000000..2194a1c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4f8030f6428d642a9a6090f7a564225a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos.meta
new file mode 100755
index 0000000..df987eb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: ac9801f71509e0a4c949a03ae8940ecf
+folderAsset: yes
+timeCreated: 1438729080
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common.meta
new file mode 100755
index 0000000..1ab3b65
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 50a3b8d1bf24f2943bd18205a6ad0cce
+folderAsset: yes
+timeCreated: 1609504095
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-360.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-360.mat
new file mode 100755
index 0000000..e644da8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-360.mat
@@ -0,0 +1,88 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: Demo-360
+ m_Shader: {fileID: 4800000, guid: 46b84ca7ab6291e4fb6c57ac48d01e8f, type: 3}
+ m_ShaderKeywords: FORCEEYE_NONE LAYOUT_NONE STEREO_NONE
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ChromaTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - ForceEye: 0
+ - Layout: 0
+ - Stereo: 0
+ - _ApplyGamma: 0
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _HighQuality: 0
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _StereoDebug: 0
+ - _UVSec: 0
+ - _UseYpCbCr: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _CroppingScalars: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-360.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-360.mat.meta
new file mode 100755
index 0000000..1b68d39
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-360.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: db39bb6249db0924bb87d6e0bb294ed3
+timeCreated: 1609503593
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Cube.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Cube.mat
new file mode 100755
index 0000000..d8b3a1a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Cube.mat
@@ -0,0 +1,87 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: Demo-Cube
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: APPLY_GAMMA MONOSCOPIC STEREO_NONE _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ChromaTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - Stereo: 0
+ - _ApplyGamma: 0
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _Exposure: 1
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 0
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Rotation: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 0
+ - _SrcBlend: 1
+ - _StereoDebug: 0
+ - _UVSec: 0
+ - _UseYpCbCr: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Cube.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Cube.mat.meta
new file mode 100755
index 0000000..58e1565
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Cube.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3c2c8026b487d4d4a84e01da83637ceb
+timeCreated: 1609505219
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: -1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Skybox.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Skybox.mat
new file mode 100755
index 0000000..376a255
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Skybox.mat
@@ -0,0 +1,87 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: Demo-Skybox
+ m_Shader: {fileID: 4800000, guid: d7bb9d4ea887e4041877356986247bba, type: 3}
+ m_ShaderKeywords: APPLY_GAMMA MONOSCOPIC STEREO_NONE
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ChromaTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - Stereo: 0
+ - _ApplyGamma: 0
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _Exposure: 1
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Rotation: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _StereoDebug: 0
+ - _UVSec: 0
+ - _UseYpCbCr: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Skybox.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Skybox.mat.meta
new file mode 100755
index 0000000..65e6ca1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/Demo-Skybox.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 276368b4e7f7f044e8288312f105954e
+timeCreated: 1601367715
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/LookAround360.cs b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/LookAround360.cs
new file mode 100755
index 0000000..cc02f9d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/LookAround360.cs
@@ -0,0 +1,117 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Demos
+{
+ ///
+ /// Rotate the transform (usually with Camera attached) to look around during playback of 360/180 videos.
+ /// Unity will rotate the camera automatically if VR is enabled, in which case this script does nothing.
+ /// Otherwise if there is a gyroscope it will be used, otherwise the mouse/touch can be used.
+ ///
+ public class LookAround360 : MonoBehaviour
+ {
+ [SerializeField] bool _lockPitch = false;
+ [SerializeField] float _maxSpinSpeed = 40f;
+ [SerializeField, Range(1f, 10f)] float _spinDamping = 5f;
+
+ private float _spinX;
+ private float _spinY;
+
+ private static bool IsVrPresent()
+ {
+ bool result = false;
+ #if UNITY_2019_3_OR_NEWER
+ var xrDisplaySubsystems = new List();
+ #if UNITY_2020_2_OR_NEWER
+ SubsystemManager.GetSubsystems(xrDisplaySubsystems);
+ #else
+ SubsystemManager.GetInstances(xrDisplaySubsystems);
+ #endif
+ foreach (var xrDisplay in xrDisplaySubsystems)
+ {
+ if (xrDisplay.running)
+ {
+ result = true;
+ break;
+ }
+ }
+ #else
+ #if UNITY_2018_1_OR_NEWER
+ result = (UnityEngine.XR.XRDevice.isPresent);
+ #else
+ result = (UnityEngine.VR.VRDevice.isPresent);
+ #endif
+ #endif
+ return result;
+ }
+
+ void Start()
+ {
+ if (IsVrPresent())
+ {
+ this.enabled = false;
+ return;
+ }
+
+ if (SystemInfo.supportsGyroscope)
+ {
+ Input.gyro.enabled = true;
+ }
+ }
+
+ void Update()
+ {
+ if (SystemInfo.supportsGyroscope && Input.gyro.enabled)
+ {
+ RotateFromGyro();
+ }
+ else
+ {
+ RotateFromMouseOrTouch();
+ }
+ }
+
+ void OnDestroy()
+ {
+ if (SystemInfo.supportsGyroscope)
+ {
+ Input.gyro.enabled = false;
+ }
+ }
+
+ void RotateFromGyro()
+ {
+ // Invert the z and w of the gyro attitude
+ this.transform.localRotation = new Quaternion(Input.gyro.attitude.x, Input.gyro.attitude.y, -Input.gyro.attitude.z, -Input.gyro.attitude.w);
+ }
+
+ void RotateFromMouseOrTouch()
+ {
+ if (Input.GetMouseButton(0))
+ {
+ float h = _maxSpinSpeed * -Input.GetAxis("Mouse X") * Time.deltaTime;
+ float v = 0f;
+ if (!_lockPitch)
+ {
+ v = _maxSpinSpeed * Input.GetAxis("Mouse Y") * Time.deltaTime;
+ }
+ h = Mathf.Clamp(h, -0.5f, 0.5f);
+ v = Mathf.Clamp(v, -0.5f, 0.5f);
+ _spinX += h;
+ _spinY += v;
+ }
+ if (!Mathf.Approximately(_spinX, 0f) || !Mathf.Approximately(_spinY, 0f))
+ {
+ this.transform.Rotate(Vector3.up, _spinX);
+ this.transform.Rotate(Vector3.right, _spinY);
+
+ _spinX = Mathf.MoveTowards(_spinX, 0f, _spinDamping * Time.deltaTime);
+ _spinY = Mathf.MoveTowards(_spinY, 0f, _spinDamping * Time.deltaTime);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/LookAround360.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/LookAround360.cs.meta
new file mode 100755
index 0000000..900d0a8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/LookAround360.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0e87d2abb8af1da4aa3e1949ee6d680d
+timeCreated: 1609504095
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI.meta
new file mode 100755
index 0000000..f922673
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 402779202fe06894099308e5b767c9c4
+folderAsset: yes
+timeCreated: 1546680669
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/BackingGradient.png b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/BackingGradient.png
new file mode 100755
index 0000000..6456a05
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/BackingGradient.png differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/BackingGradient.png.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/BackingGradient.png.meta
new file mode 100755
index 0000000..74de2e0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/BackingGradient.png.meta
@@ -0,0 +1,128 @@
+fileFormatVersion: 2
+guid: e8fa92438398bb240b71be8b23d90df5
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: -1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 1
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 1
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 1
+ - serializedVersion: 3
+ buildTarget: iPhone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 1
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 1
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/HorizontalSegmentsPrimitive.cs b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/HorizontalSegmentsPrimitive.cs
new file mode 100755
index 0000000..b420c19
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/HorizontalSegmentsPrimitive.cs
@@ -0,0 +1,89 @@
+// UnityEngine.UI was moved to a package in 2019.2.0
+// Unfortunately no way to test for this across all Unity versions yet
+// You can set up the asmdef to reference the new package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+#define AVPRO_PACKAGE_UNITYUI
+#if (UNITY_2019_2_OR_NEWER && AVPRO_PACKAGE_UNITYUI) || (!UNITY_2019_2_OR_NEWER)
+
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace RenderHeads.Media.AVProVideo.Demos.UI
+{
+ /// Fill a rectangle region with horizontal segments along it
+ [ExecuteInEditMode]
+ public class HorizontalSegmentsPrimitive : Graphic
+ {
+ private float[] _segments = { 0f, 0f };
+ public float[] Segments { get { return _segments; } set { SetSegments(value); } }
+
+ private void SetSegments(float[] segments)
+ {
+ if (segments != null && segments.Length > 1)
+ {
+ _segments = segments;
+ }
+ else
+ {
+ _segments = new float[] { 0f, 0f };
+ }
+
+ // TODO: detect whether a change actually occured before setting to dirty
+ SetVerticesDirty();
+ }
+
+ protected override void OnPopulateMesh(VertexHelper vh)
+ {
+ Vector2 corner1 = Vector2.zero;
+ Vector2 corner2 = Vector2.zero;
+
+ corner1.x = 0f;
+ corner1.y = 0f;
+ corner2.x = 1f;
+ corner2.y = 1f;
+
+ corner1.x -= rectTransform.pivot.x;
+ corner1.y -= rectTransform.pivot.y;
+ corner2.x -= rectTransform.pivot.x;
+ corner2.y -= rectTransform.pivot.y;
+
+ corner1.x *= rectTransform.rect.width;
+ corner1.y *= rectTransform.rect.height;
+ corner2.x *= rectTransform.rect.width;
+ corner2.y *= rectTransform.rect.height;
+
+ vh.Clear();
+
+ int numQuads = _segments.Length / 2;
+
+ UIVertex vert = UIVertex.simpleVert;
+ int vi = 0;
+ for (int i = 0; i < numQuads; i++)
+ {
+ float x1 = _segments[i * 2 + 0] * (corner2.x - corner1.x) + corner1.x;
+ float x2 = _segments[i * 2 + 1] * (corner2.x - corner1.x) + corner1.x;
+
+ vert.position = new Vector2(x1, corner1.y);
+ vert.color = color;
+ vh.AddVert(vert);
+
+ vert.position = new Vector2(x1, corner2.y);
+ vert.color = color;
+ vh.AddVert(vert);
+
+ vert.position = new Vector2(x2, corner2.y);
+ vert.color = color;
+ vh.AddVert(vert);
+
+ vert.position = new Vector2(x2, corner1.y);
+ vert.color = color;
+ vh.AddVert(vert);
+
+ vh.AddTriangle(0 + vi, 1 + vi, 2 + vi);
+ vh.AddTriangle(2 + vi, 3 + vi, 0 + vi);
+ vi += 4;
+ }
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/HorizontalSegmentsPrimitive.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/HorizontalSegmentsPrimitive.cs.meta
new file mode 100755
index 0000000..e69a415
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/HorizontalSegmentsPrimitive.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a922ae46315cc884c879056759d73251
+timeCreated: 1546854091
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-AudioSpectrum.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-AudioSpectrum.mat
new file mode 100755
index 0000000..6d83eca
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-AudioSpectrum.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-AudioSpectrum
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_SPECTRUM
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 10
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 1
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-AudioSpectrum.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-AudioSpectrum.mat.meta
new file mode 100755
index 0000000..481a89b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-AudioSpectrum.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: af11c0475fc59fd46ae3d7101e9cb7ad
+timeCreated: 1600732643
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: -1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Buffering.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Buffering.mat
new file mode 100755
index 0000000..90ce071
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Buffering.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-Buffering
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_BUFFERING
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 4
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 0.276
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 0.5
+ - _OutlineSize: 0.0063
+ - _OutlineSoftness: 0
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Buffering.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Buffering.mat.meta
new file mode 100755
index 0000000..a4b1467
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Buffering.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9c36a7d03d5746f4bab781d213a86f49
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-CC.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-CC.mat
new file mode 100755
index 0000000..3190ab4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-CC.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-CC
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_CC
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 8
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 1
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-CC.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-CC.mat.meta
new file mode 100755
index 0000000..aa402b0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-CC.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 8e67518da82e8334685a53cd09579095
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Circle.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Circle.mat
new file mode 100755
index 0000000..814e938
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Circle.mat
@@ -0,0 +1,88 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-Circle
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: UI_CIRCLE
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 0
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 0
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 0
+ - _OutlineSize: 0
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Circle.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Circle.mat.meta
new file mode 100755
index 0000000..00ff479
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Circle.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 42d01ca03bef81a4db5efcc72b712aca
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Feedback.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Feedback.mat
new file mode 100755
index 0000000..a8e32e8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Feedback.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-Feedback
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_PAUSE
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 2
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 0
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 0.5
+ - _OutlineSize: 0.0063
+ - _OutlineSoftness: 0
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Feedback.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Feedback.mat.meta
new file mode 100755
index 0000000..c457c62
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Feedback.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 1d9b78c72d0d96c4ea3ffb49880bf0c6
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavBack.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavBack.mat
new file mode 100755
index 0000000..414f577
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavBack.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-NavBack
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_BACK
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 7
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 1
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavBack.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavBack.mat.meta
new file mode 100755
index 0000000..b11b592
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavBack.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3defb26db59b1fa489c3d83b2dda2210
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavForward.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavForward.mat
new file mode 100755
index 0000000..7dfd421
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavForward.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-NavForward
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_FORWARD
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 6
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 1
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavForward.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavForward.mat.meta
new file mode 100755
index 0000000..dccb86b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-NavForward.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fc3335a6cd5229642a818d162865fe8a
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Options.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Options.mat
new file mode 100755
index 0000000..194ce73
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Options.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-Options
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_OPTIONS
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 9
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 0
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Options.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Options.mat.meta
new file mode 100755
index 0000000..0811424
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Options.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: dced9abe5e3da3e47bbaa9d7febe796e
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-PlayPause.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-PlayPause.mat
new file mode 100755
index 0000000..1016d16
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-PlayPause.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-PlayPause
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_PLAYPAUSE
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 3
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 0
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-PlayPause.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-PlayPause.mat.meta
new file mode 100755
index 0000000..860dc94
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-PlayPause.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 82d37723c9304fa4e9f2cd4daf2351ad
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Volume.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Volume.mat
new file mode 100755
index 0000000..2c68b09
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Volume.mat
@@ -0,0 +1,90 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI-Volume
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords: DRAW_OUTLINE UI_VOLUME
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - UI: 5
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DrawOutline: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _Morph: 0
+ - _Mute: 0
+ - _OcclusionStrength: 1
+ - _OutlineOpacity: 1
+ - _OutlineSize: 0.02
+ - _OutlineSoftness: 0.069
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _Volume: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Volume.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Volume.mat.meta
new file mode 100755
index 0000000..3cd517b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI-Volume.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b246d2a0da7bbb3459e271e203c4abe1
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.cs b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.cs
new file mode 100755
index 0000000..573fc1e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.cs
@@ -0,0 +1,1161 @@
+// UnityEngine.UI was moved to a package in 2019.2.0
+// Unfortunately no way to test for this across all Unity versions yet
+// You can set up the asmdef to reference the new package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+#define AVPRO_PACKAGE_UNITYUI
+#if (UNITY_2019_2_OR_NEWER && AVPRO_PACKAGE_UNITYUI) || (!UNITY_2019_2_OR_NEWER)
+
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+using RenderHeads.Media.AVProVideo;
+using RenderHeads.Media.AVProVideo.Demos.UI;
+
+//-----------------------------------------------------------------------------
+// Copyright 2018-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Demos
+{
+ public class MediaPlayerUI : MonoBehaviour
+ {
+ [SerializeField] MediaPlayer _mediaPlayer = null;
+
+ [Header("Options")]
+
+ [SerializeField] float _keyVolumeDelta = 0.05f;
+ [SerializeField] float _jumpDeltaTime = 5f;
+ [SerializeField] bool _showOptions = true;
+ [SerializeField] bool _autoHide = true;
+ [SerializeField] float _userInactiveDuration = 1.5f;
+ [SerializeField] bool _useAudioFading = true;
+
+ [Header("Keyboard Controls")]
+ [SerializeField] bool _enableKeyboardControls = true;
+ [SerializeField] KeyCode KeyVolumeUp = KeyCode.UpArrow;
+ [SerializeField] KeyCode KeyVolumeDown = KeyCode.DownArrow;
+ [SerializeField] KeyCode KeyTogglePlayPause = KeyCode.Space;
+ [SerializeField] KeyCode KeyToggleMute = KeyCode.M;
+ [SerializeField] KeyCode KeyJumpForward = KeyCode.RightArrow;
+ [SerializeField] KeyCode KeyJumpBack = KeyCode.LeftArrow;
+
+ [Header("Optional Components")]
+ [SerializeField] OverlayManager _overlayManager = null;
+ [SerializeField] MediaPlayer _thumbnailMediaPlayer = null;
+ [SerializeField] RectTransform _timelineTip = null;
+
+ [Header("UI Components")]
+ [SerializeField] RectTransform _canvasTransform = null;
+ //[SerializeField] Image image = null;
+ [SerializeField] Slider _sliderTime = null;
+ [SerializeField] EventTrigger _videoTouch = null;
+ [SerializeField] CanvasGroup _controlsGroup = null;
+
+ [Header("UI Components (Optional)")]
+ [SerializeField] GameObject _liveItem = null;
+ [SerializeField] Text _textMediaName = null;
+ [SerializeField] Text _textTimeDuration = null;
+ [SerializeField] Slider _sliderVolume = null;
+ [SerializeField] Button _buttonPlayPause = null;
+ [SerializeField] Button _buttonVolume = null;
+ [SerializeField] Button _buttonSubtitles = null;
+ [SerializeField] Button _buttonOptions = null;
+ [SerializeField] Button _buttonTimeBack = null;
+ [SerializeField] Button _buttonTimeForward = null;
+ [SerializeField] RawImage _imageAudioSpectrum = null;
+ [SerializeField] GameObject _optionsMenuRoot = null;
+ [SerializeField] HorizontalSegmentsPrimitive _segmentsSeek = null;
+ [SerializeField] HorizontalSegmentsPrimitive _segmentsBuffered = null;
+ [SerializeField] HorizontalSegmentsPrimitive _segmentsProgress = null;
+
+ private bool _wasPlayingBeforeTimelineDrag;
+ private float _controlsFade = 1f;
+ private Material _playPauseMaterial;
+ private Material _volumeMaterial;
+ private Material _subtitlesMaterial;
+ private Material _optionsMaterial;
+ private Material _audioSpectrumMaterial;
+ private float[] _spectrumSamples = new float[128];
+ private float[] _spectrumSamplesSmooth = new float[128];
+ private float _maxValue = 1f;
+ private float _audioVolume = 1f;
+
+ private float _audioFade = 0f;
+ private bool _isAudioFadingUpToPlay = true;
+ private const float AudioFadeDuration = 0.25f;
+ private float _audioFadeTime = 0f;
+
+ private readonly LazyShaderProperty _propMorph = new LazyShaderProperty("_Morph");
+ private readonly LazyShaderProperty _propMute = new LazyShaderProperty("_Mute");
+ private readonly LazyShaderProperty _propVolume = new LazyShaderProperty("_Volume");
+ private readonly LazyShaderProperty _propSpectrum = new LazyShaderProperty("_Spectrum");
+ private readonly LazyShaderProperty _propSpectrumRange = new LazyShaderProperty("_SpectrumRange");
+
+ void Awake()
+ {
+#if UNITY_IOS || UNITY_ANDROID
+ Debug.Log("Setting Application.targetFrameRate to: " + Screen.currentResolution.refreshRate);
+ Application.targetFrameRate = Screen.currentResolution.refreshRate;
+#endif
+ }
+
+ void Start()
+ {
+ if (_mediaPlayer)
+ {
+ _audioVolume = _mediaPlayer.AudioVolume;
+ #if UNITY_ANDROID
+ // Disable screen sleep timeout if the video is set to auto-start
+ if (_mediaPlayer.AutoStart)
+ {
+ Screen.sleepTimeout = SleepTimeout.NeverSleep;
+ }
+ #endif
+ }
+ SetupPlayPauseButton();
+ SetupTimeBackForwardButtons();
+ SetupVolumeButton();
+ SetupSubtitlesButton();
+ SetupOptionsButton();
+ SetupAudioSpectrum();
+ CreateTimelineDragEvents();
+ CreateVideoTouchEvents();
+ CreateVolumeSliderEvents();
+ UpdateVolumeSlider();
+ BuildOptionsMenu();
+ }
+
+ private struct UserInteraction
+ {
+ public static float InactiveTime;
+ private static Vector3 _previousMousePos;
+ private static int _lastInputFrame;
+
+ public static bool IsUserInputThisFrame()
+ {
+ if (Time.frameCount == _lastInputFrame)
+ {
+ return true;
+ }
+ #if (!ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER)
+ bool touchInput = (Input.touchSupported && Input.touchCount > 0);
+ bool mouseInput = (Input.mousePresent && (Input.mousePosition != _previousMousePos || Input.mouseScrollDelta != Vector2.zero || Input.GetMouseButton(0)));
+
+ if (touchInput || mouseInput)
+ {
+ _previousMousePos = Input.mousePosition;
+ _lastInputFrame = Time.frameCount;
+ return true;
+ }
+
+ return false;
+ #else
+ return true;
+ #endif
+ }
+ }
+
+ private Material DuplicateMaterialOnImage(Graphic image)
+ {
+ // Assign a copy of the material so we aren't modifying the material asset file
+ image.material = new Material(image.material);
+ return image.material;
+ }
+
+ private void SetupPlayPauseButton()
+ {
+ if (_buttonPlayPause)
+ {
+ _buttonPlayPause.onClick.AddListener(OnPlayPauseButtonPressed);
+ _playPauseMaterial = DuplicateMaterialOnImage(_buttonPlayPause.GetComponent());
+ }
+ }
+
+ private void SetupTimeBackForwardButtons()
+ {
+ if (_buttonTimeBack)
+ {
+ _buttonTimeBack.onClick.AddListener(OnPlayTimeBackButtonPressed);
+ }
+ if (_buttonTimeForward)
+ {
+ _buttonTimeForward.onClick.AddListener(OnPlayTimeForwardButtonPressed);
+ }
+ }
+
+ private void SetupVolumeButton()
+ {
+ if (_buttonVolume)
+ {
+ _buttonVolume.onClick.AddListener(OnVolumeButtonPressed);
+ _volumeMaterial = DuplicateMaterialOnImage(_buttonVolume.GetComponent());
+ }
+ }
+
+ private void SetupSubtitlesButton()
+ {
+ if (_buttonSubtitles)
+ {
+ _buttonSubtitles.onClick.AddListener(OnSubtitlesButtonPressed);
+ _subtitlesMaterial = DuplicateMaterialOnImage(_buttonSubtitles.GetComponent());
+ }
+ }
+
+ private void SetupOptionsButton()
+ {
+ if (_buttonOptions)
+ {
+ _buttonOptions.onClick.AddListener(OnOptionsButtonPressed);
+ _optionsMaterial = DuplicateMaterialOnImage(_buttonOptions.GetComponent());
+ }
+ }
+
+ private void SetupAudioSpectrum()
+ {
+ if (_imageAudioSpectrum)
+ {
+ _audioSpectrumMaterial = DuplicateMaterialOnImage(_imageAudioSpectrum);
+ }
+ }
+
+ private void OnPlayPauseButtonPressed()
+ {
+ TogglePlayPause();
+ }
+
+ private void OnPlayTimeBackButtonPressed()
+ {
+ SeekRelative(-_jumpDeltaTime);
+ }
+
+ private void OnPlayTimeForwardButtonPressed()
+ {
+ SeekRelative(_jumpDeltaTime);
+ }
+
+ private void OnVolumeButtonPressed()
+ {
+ ToggleMute();
+ }
+
+ private void OnSubtitlesButtonPressed()
+ {
+ ToggleSubtitles();
+ }
+
+ private void OnOptionsButtonPressed()
+ {
+ ToggleOptionsMenu();
+ }
+
+ private bool _isHoveringOverTimeline;
+
+ private void OnTimelineBeginHover(PointerEventData eventData)
+ {
+ if (eventData.pointerCurrentRaycast.gameObject != null)
+ {
+ _isHoveringOverTimeline = true;
+ _sliderTime.transform.localScale = new Vector3(1f, 2.5f, 1f);
+ }
+ }
+
+ private void OnTimelineEndHover(PointerEventData eventData)
+ {
+ _isHoveringOverTimeline = false;
+ _sliderTime.transform.localScale = new Vector3(1f, 1f, 1f);
+ }
+
+ private void CreateVideoTouchEvents()
+ {
+ EventTrigger.Entry entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.PointerUp;
+ entry.callback.AddListener((data) => { OnVideoPointerUp(); });
+ _videoTouch.triggers.Add(entry);
+ }
+
+ private void OnVideoPointerUp()
+ {
+ bool controlsMostlyVisible = (_controlsGroup.alpha >= 0.5f && _controlsGroup.gameObject.activeSelf);
+ if (controlsMostlyVisible)
+ {
+ TogglePlayPause();
+ }
+ }
+
+ void UpdateAudioFading()
+ {
+ // Increment fade timer
+ if (_audioFadeTime < AudioFadeDuration)
+ {
+ _audioFadeTime = Mathf.Clamp(_audioFadeTime + Time.deltaTime, 0f, AudioFadeDuration);
+ }
+
+ // Trigger pause when audio faded down
+ if (_audioFadeTime >= AudioFadeDuration)
+ {
+ if (!_isAudioFadingUpToPlay)
+ {
+ Pause(skipFeedback:true);
+ }
+ }
+
+ // Apply audio fade value
+ if (_mediaPlayer.Control != null && _mediaPlayer.Control.IsPlaying())
+ {
+ _audioFade = Mathf.Clamp01(_audioFadeTime / AudioFadeDuration);
+ if (!_isAudioFadingUpToPlay)
+ {
+ _audioFade = (1f - _audioFade);
+ }
+ ApplyAudioVolume();
+ }
+ }
+
+ public void TogglePlayPause()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ if (_useAudioFading && _mediaPlayer.Info.HasAudio())
+ {
+ if (_mediaPlayer.Control.IsPlaying())
+ {
+ if (_overlayManager)
+ {
+ _overlayManager.TriggerFeedback(OverlayManager.Feedback.Pause);
+ }
+ _isAudioFadingUpToPlay = false;
+ }
+ else
+ {
+ _isAudioFadingUpToPlay = true;
+ Play();
+ }
+ _audioFadeTime = 0f;
+ }
+ else
+ {
+ if (_mediaPlayer.Control.IsPlaying())
+ {
+ Pause();
+ }
+ else
+ {
+ Play();
+ }
+ }
+ }
+ }
+
+ private void Play()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ if (_overlayManager)
+ {
+ _overlayManager.TriggerFeedback(OverlayManager.Feedback.Play);
+ }
+ _mediaPlayer.Play();
+ #if UNITY_ANDROID
+ Screen.sleepTimeout = SleepTimeout.NeverSleep;
+ #endif
+ }
+ }
+
+ private void Pause(bool skipFeedback = false)
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ if (!skipFeedback)
+ {
+ if (_overlayManager)
+ {
+ _overlayManager.TriggerFeedback(OverlayManager.Feedback.Pause);
+ }
+ }
+ _mediaPlayer.Pause();
+ #if UNITY_ANDROID
+ Screen.sleepTimeout = SleepTimeout.SystemSetting;
+ #endif
+ }
+ }
+
+ public void SeekRelative(float deltaTime)
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ TimeRange timelineRange = GetTimelineRange();
+ double time = _mediaPlayer.Control.GetCurrentTime() + deltaTime;
+ time = System.Math.Max(time, timelineRange.startTime);
+ time = System.Math.Min(time, timelineRange.startTime + timelineRange.duration);
+ _mediaPlayer.Control.Seek(time);
+
+ if (_overlayManager)
+ {
+ _overlayManager.TriggerFeedback(deltaTime > 0f ? OverlayManager.Feedback.SeekForward : OverlayManager.Feedback.SeekBack);
+ }
+ }
+ }
+
+ public void ChangeAudioVolume(float delta)
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ // Change volume
+ _audioVolume = Mathf.Clamp01(_audioVolume + delta);
+
+ // Update the UI
+ UpdateVolumeSlider();
+
+ // Trigger the overlays
+ if (_overlayManager)
+ {
+ _overlayManager.TriggerFeedback(delta > 0f ? OverlayManager.Feedback.VolumeUp : OverlayManager.Feedback.VolumeDown);
+ }
+ }
+ }
+
+ public void ToggleMute()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ if (_mediaPlayer.AudioMuted)
+ {
+ MuteAudio(false);
+ }
+ else
+ {
+ MuteAudio(true);
+ }
+ }
+ }
+
+ private void MuteAudio(bool mute)
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ // Change mute
+ _mediaPlayer.AudioMuted = mute;
+
+ // Update the UI
+ // The UI element is constantly updated by the Update() method
+
+ // Trigger the overlays
+ if (_overlayManager)
+ {
+ _overlayManager.TriggerFeedback(mute ? OverlayManager.Feedback.VolumeMute : OverlayManager.Feedback.VolumeUp);
+ }
+ }
+ }
+
+ public void ToggleSubtitles()
+ {
+ if (_mediaPlayer && _mediaPlayer.TextTracks != null)
+ {
+ if (_mediaPlayer.TextTracks.GetTextTracks().Count > 0)
+ {
+ if (_mediaPlayer.TextTracks.GetActiveTextTrack() != null)
+ {
+ _mediaPlayer.TextTracks.SetActiveTextTrack(null);
+ }
+ else
+ {
+ // TODO: instead of activating the first one, base it on the language/track
+ // selection stored in the MediaPlayerUI
+ _mediaPlayer.TextTracks.SetActiveTextTrack(_mediaPlayer.TextTracks.GetTextTracks()[0]);
+ }
+ }
+ }
+ }
+
+ private void ToggleOptionsMenu()
+ {
+ _showOptions = !_showOptions;
+ BuildOptionsMenu();
+ }
+
+ private void BuildOptionsMenu()
+ {
+ if (_optionsMenuRoot)
+ {
+ _optionsMenuRoot.SetActive(_showOptions);
+ }
+ // Temporary code for now disables to touch controls while the debug menu
+ // is shown, to stop it consuming mouse input for IMGUI
+ _videoTouch.enabled = !_showOptions;
+ }
+
+ private void CreateTimelineDragEvents()
+ {
+ EventTrigger trigger = _sliderTime.gameObject.GetComponent();
+ if (trigger != null)
+ {
+ EventTrigger.Entry entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.PointerDown;
+ entry.callback.AddListener((data) => { OnTimeSliderBeginDrag(); });
+ trigger.triggers.Add(entry);
+
+ entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.Drag;
+ entry.callback.AddListener((data) => { OnTimeSliderDrag(); });
+ trigger.triggers.Add(entry);
+
+ entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.PointerUp;
+ entry.callback.AddListener((data) => { OnTimeSliderEndDrag(); });
+ trigger.triggers.Add(entry);
+
+ entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.PointerEnter;
+ entry.callback.AddListener((data) => { OnTimelineBeginHover((PointerEventData)data); });
+ trigger.triggers.Add(entry);
+
+ entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.PointerExit;
+ entry.callback.AddListener((data) => { OnTimelineEndHover((PointerEventData)data); });
+ trigger.triggers.Add(entry);
+ }
+ }
+
+ private void CreateVolumeSliderEvents()
+ {
+ if (_sliderVolume != null)
+ {
+ EventTrigger trigger = _sliderVolume.gameObject.GetComponent();
+ if (trigger != null)
+ {
+ EventTrigger.Entry entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.PointerDown;
+ entry.callback.AddListener((data) => { OnVolumeSliderDrag(); });
+ trigger.triggers.Add(entry);
+
+ entry = new EventTrigger.Entry();
+ entry.eventID = EventTriggerType.Drag;
+ entry.callback.AddListener((data) => { OnVolumeSliderDrag(); });
+ trigger.triggers.Add(entry);
+ }
+ }
+ }
+
+ private void OnVolumeSliderDrag()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ _audioVolume = _sliderVolume.value;
+ ApplyAudioVolume();
+ }
+ }
+
+ private void ApplyAudioVolume()
+ {
+ if (_mediaPlayer)
+ {
+ _mediaPlayer.AudioVolume = (_audioVolume * _audioFade);
+ }
+ }
+
+ private void UpdateVolumeSlider()
+ {
+ if (_sliderVolume)
+ {
+ if (_mediaPlayer)
+ {
+ // TODO: remove this
+ /*if (mp.Control != null)
+ {
+ _sliderVolume.value = mp.Control.GetVolume();
+ }
+ else*/
+ {
+ _sliderVolume.value = _audioVolume;
+ }
+ }
+ }
+ }
+
+ private void UpdateAudioSpectrum()
+ {
+ bool showAudioSpectrum = false;
+#if !UNITY_IOS || UNITY_EDITOR
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ AudioSource audioSource = _mediaPlayer.AudioSource;
+ if (audioSource && _audioSpectrumMaterial)
+ {
+ showAudioSpectrum = true;
+
+ float maxFreq = (Helper.GetUnityAudioSampleRate() / 2);
+
+ // Frequencies over 18Khz generally aren't very interesting to visualise, so clamp the range
+ const float clampFreq = 18000f;
+ int sampleRange = Mathf.FloorToInt(Mathf.Clamp01(clampFreq / maxFreq) * _spectrumSamples.Length);
+
+ // Add new samples and smooth the samples over time
+ audioSource.GetSpectrumData(_spectrumSamples, 0, FFTWindow.BlackmanHarris);
+
+ // Find the maxValue sample for normalising with
+ float maxValue = -1.0f;
+ for (int i = 0; i < sampleRange; i++)
+ {
+ if (_spectrumSamples[i] > maxValue)
+ {
+ maxValue = _spectrumSamples[i];
+ }
+ }
+
+ // Chase maxValue to zero
+ _maxValue = Mathf.Lerp(_maxValue, 0.0f, Mathf.Clamp01(2.0f * Time.deltaTime));
+
+ // Update maxValue
+ _maxValue = Mathf.Max(_maxValue, maxValue);
+ if (_maxValue <= 0.01f)
+ {
+ _maxValue = 1f;
+ }
+
+ // Copy and smooth the spectrum values
+ for (int i = 0; i < sampleRange; i++)
+ {
+ float newSample = _spectrumSamples[i] / _maxValue;
+ _spectrumSamplesSmooth[i] = Mathf.Lerp(_spectrumSamplesSmooth[i], newSample, Mathf.Clamp01(15.0f * Time.deltaTime));
+ }
+
+ // Update shader
+ _audioSpectrumMaterial.SetFloatArray(_propSpectrum.Id, _spectrumSamplesSmooth);
+ _audioSpectrumMaterial.SetFloat(_propSpectrumRange.Id, (float)sampleRange);
+ }
+ }
+#endif
+ if (_imageAudioSpectrum)
+ {
+ _imageAudioSpectrum.gameObject.SetActive(showAudioSpectrum);
+ }
+ }
+
+ private void OnTimeSliderBeginDrag()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ _wasPlayingBeforeTimelineDrag = _mediaPlayer.Control.IsPlaying();
+ if (_wasPlayingBeforeTimelineDrag)
+ {
+ _mediaPlayer.Pause();
+ }
+ OnTimeSliderDrag();
+ }
+ }
+
+ private void OnTimeSliderDrag()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ TimeRange timelineRange = GetTimelineRange();
+ double time = timelineRange.startTime + (_sliderTime.value * timelineRange.duration);
+ _mediaPlayer.Control.Seek(time);
+ _isHoveringOverTimeline = true;
+ }
+ }
+
+ private void OnTimeSliderEndDrag()
+ {
+ if (_mediaPlayer && _mediaPlayer.Control != null)
+ {
+ if (_wasPlayingBeforeTimelineDrag)
+ {
+ _mediaPlayer.Play();
+ _wasPlayingBeforeTimelineDrag = false;
+ }
+ }
+ }
+
+ private TimeRange GetTimelineRange()
+ {
+ if (_mediaPlayer.Info != null)
+ {
+ return Helper.GetTimelineRange(_mediaPlayer.Info.GetDuration(), _mediaPlayer.Control.GetSeekableTimes());
+ }
+ return new TimeRange();
+ }
+
+ private bool CanHideControls()
+ {
+ bool result = true;
+ if (!_autoHide)
+ {
+ result = false;
+ }
+ #if (!ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER)
+ else if (Input.mousePresent)
+ {
+ // Check whether the mouse cursor is over the controls, in which case we can't hide the UI
+ RectTransform rect = _controlsGroup.GetComponent();
+ Vector2 canvasPos;
+ RectTransformUtility.ScreenPointToLocalPointInRectangle(rect, Input.mousePosition, null, out canvasPos);
+
+ Rect rr = RectTransformUtility.PixelAdjustRect(rect, null);
+ result = !rr.Contains(canvasPos);
+ }
+ #endif
+ return result;
+ }
+
+ private void UpdateControlsVisibility()
+ {
+ if (UserInteraction.IsUserInputThisFrame() || !CanHideControls())
+ {
+ UserInteraction.InactiveTime = 0f;
+ FadeUpControls();
+ }
+ else
+ {
+
+ UserInteraction.InactiveTime += Time.unscaledDeltaTime;
+ if (UserInteraction.InactiveTime >= _userInactiveDuration)
+ {
+ FadeDownControls();
+ }
+ else
+ {
+ FadeUpControls();
+ }
+ }
+ }
+
+ private void FadeUpControls()
+ {
+ if (!_controlsGroup.gameObject.activeSelf)
+ {
+ _controlsGroup.gameObject.SetActive(true);
+ }
+ _controlsFade = Mathf.Min(1f, _controlsFade + Time.deltaTime * 8f);
+ _controlsGroup.alpha = Mathf.Pow(_controlsFade, 5f);
+ }
+
+ private void FadeDownControls()
+ {
+ if (_controlsGroup.gameObject.activeSelf)
+ {
+ _controlsFade = Mathf.Max(0f, _controlsFade - Time.deltaTime * 3f);
+ _controlsGroup.alpha = Mathf.Pow(_controlsFade, 5f);
+ if (_controlsGroup.alpha <= 0f)
+ {
+ _controlsGroup.gameObject.SetActive(false);
+ }
+ }
+ }
+
+ void Update()
+ {
+ if (!_mediaPlayer) return;
+
+ UpdateControlsVisibility();
+ UpdateAudioFading();
+ UpdateAudioSpectrum();
+
+ if (_mediaPlayer.Info != null)
+ {
+ TimeRange timelineRange = GetTimelineRange();
+
+ // Update timeline hover popup
+ #if (!ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER)
+ if (_timelineTip != null)
+ {
+ if (_isHoveringOverTimeline)
+ {
+ Vector2 canvasPos;
+ RectTransformUtility.ScreenPointToLocalPointInRectangle(_canvasTransform, Input.mousePosition, null, out canvasPos);
+
+ _segmentsSeek.gameObject.SetActive(true);
+ _timelineTip.gameObject.SetActive(true);
+ Vector3 mousePos = _canvasTransform.TransformPoint(canvasPos);
+
+ _timelineTip.position = new Vector2(mousePos.x, _timelineTip.position.y);
+
+ if (UserInteraction.IsUserInputThisFrame())
+ {
+ // Work out position on the timeline
+ Bounds bounds = RectTransformUtility.CalculateRelativeRectTransformBounds(this._sliderTime.GetComponent());
+ float x = Mathf.Clamp01((canvasPos.x - bounds.min.x) / bounds.size.x);
+
+ double time = (double)x * timelineRange.Duration;
+
+ // Seek to the new position
+ if (_thumbnailMediaPlayer != null && _thumbnailMediaPlayer.Control != null)
+ {
+ _thumbnailMediaPlayer.Control.SeekFast(time);
+ }
+
+ // Update time text
+ Text hoverText = _timelineTip.GetComponentInChildren();
+ if (hoverText != null)
+ {
+ time -= timelineRange.startTime;
+ time = System.Math.Max(time, 0.0);
+ time = System.Math.Min(time, timelineRange.Duration);
+ hoverText.text = Helper.GetTimeString(time, false);
+ }
+
+ {
+ // Update seek segment when hovering over timeline
+ if (_segmentsSeek != null)
+ {
+ float[] ranges = new float[2];
+ if (timelineRange.Duration > 0.0)
+ {
+ double t = ((_mediaPlayer.Control.GetCurrentTime() - timelineRange.startTime) / timelineRange.duration);
+ ranges[1] = x;
+ ranges[0] = (float)t;
+ }
+ _segmentsSeek.Segments = ranges;
+ }
+ }
+ }
+ }
+ else
+ {
+ _timelineTip.gameObject.SetActive(false);
+ _segmentsSeek.gameObject.SetActive(false);
+ }
+ }
+ #endif
+
+ // Updated stalled display
+ if (_overlayManager)
+ {
+ _overlayManager.Reset();
+ if (_mediaPlayer.Info.IsPlaybackStalled())
+ {
+ _overlayManager.TriggerStalled();
+ }
+ }
+
+ // Update keyboard input
+ if (_enableKeyboardControls)
+ {
+ #if (!ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER)
+ // Keyboard toggle play/pause
+ if (Input.GetKeyDown(KeyTogglePlayPause))
+ {
+ TogglePlayPause();
+ }
+
+ // Keyboard seek 5 seconds
+ if (Input.GetKeyDown(KeyJumpBack))
+ {
+ SeekRelative(-_jumpDeltaTime);
+ }
+ else if (Input.GetKeyDown(KeyJumpForward))
+ {
+ SeekRelative(_jumpDeltaTime);
+ }
+
+ // Keyboard control volume
+ if (Input.GetKeyDown(KeyVolumeUp))
+ {
+ ChangeAudioVolume(_keyVolumeDelta);
+ }
+ else if (Input.GetKeyDown(KeyVolumeDown))
+ {
+ ChangeAudioVolume(-_keyVolumeDelta);
+ }
+
+ // Keyboard toggle mute
+ if (Input.GetKeyDown(KeyToggleMute))
+ {
+ ToggleMute();
+ }
+ #endif
+ }
+
+ // Animation play/pause button
+ if (_playPauseMaterial != null)
+ {
+ float t = _playPauseMaterial.GetFloat(_propMorph.Id);
+ float d = 1f;
+ if (_mediaPlayer.Control.IsPlaying())
+ {
+ d = -1f;
+ }
+ t += d * Time.deltaTime * 6f;
+ t = Mathf.Clamp01(t);
+ _playPauseMaterial.SetFloat(_propMorph.Id, t);
+ }
+
+ // Animation volume/mute button
+ if (_volumeMaterial != null)
+ {
+ float t = _volumeMaterial.GetFloat(_propMute.Id);
+ float d = 1f;
+ if (!_mediaPlayer.AudioMuted)
+ {
+ d = -1f;
+ }
+ t += d * Time.deltaTime * 6f;
+ t = Mathf.Clamp01(t);
+ _volumeMaterial.SetFloat(_propMute.Id, t);
+ _volumeMaterial.SetFloat(_propVolume.Id, _audioVolume);
+ }
+
+ // Animation subtitles button
+ if (_subtitlesMaterial)
+ {
+ float t = _subtitlesMaterial.GetFloat(_propMorph.Id);
+ float d = 1f;
+ if (_mediaPlayer.TextTracks.GetActiveTextTrack() == null)
+ {
+ d = -1f;
+ }
+ t += d * Time.deltaTime * 6f;
+ t = Mathf.Clamp01(t);
+ _subtitlesMaterial.SetFloat(_propMorph.Id, t);
+ }
+
+ // Animation options button
+ if (_optionsMaterial)
+ {
+ float t = _optionsMaterial.GetFloat(_propMorph.Id);
+ float d = 1f;
+ if (!_showOptions)
+ {
+ d = -1f;
+ }
+ t += d * Time.deltaTime * 6f;
+ t = Mathf.Clamp01(t);
+ _optionsMaterial.SetFloat(_propMorph.Id, t);
+ }
+
+ // Update time/duration text display
+ if (_textTimeDuration)
+ {
+ string t1 = Helper.GetTimeString((_mediaPlayer.Control.GetCurrentTime() - timelineRange.startTime), false);
+ string d1 = Helper.GetTimeString(timelineRange.duration, false);
+ _textTimeDuration.text = string.Format("{0} / {1}", t1, d1);
+ }
+
+ // Update volume slider
+ if (!_useAudioFading)
+ {
+ UpdateVolumeSlider();
+ }
+
+ // Update time slider position
+ if (_sliderTime && !_isHoveringOverTimeline)
+ {
+ double t = 0.0;
+ if (timelineRange.duration > 0.0)
+ {
+ t = ((_mediaPlayer.Control.GetCurrentTime() - timelineRange.startTime) / timelineRange.duration);
+ }
+ _sliderTime.value = Mathf.Clamp01((float)t);
+ }
+
+ // Update LIVE text visible
+ if (_liveItem)
+ {
+ _liveItem.SetActive(double.IsInfinity(_mediaPlayer.Info.GetDuration()));
+ }
+
+ // Update subtitle button visible
+ if (_buttonSubtitles)
+ {
+ _buttonSubtitles.gameObject.SetActive(_mediaPlayer.TextTracks.GetTextTracks().Count > 0);
+ }
+
+ // Update media name
+ if (_textMediaName)
+ {
+ #if MEDIA_NAME
+ string mediaName = string.Empty;
+ if (!string.IsNullOrEmpty(_mediaPlayer.VideoPath))
+ {
+ mediaName = System.IO.Path.GetFileName(_mediaPlayer.VideoPath);
+ if (mediaName.Length > 26)
+ {
+ mediaName = mediaName.Substring(0, 26);
+ }
+ }
+ #endif
+
+ string resolutionName = string.Empty;
+ if (_mediaPlayer.Info.GetVideoWidth() > 0)
+ {
+ resolutionName = Helper.GetFriendlyResolutionName(_mediaPlayer.Info.GetVideoWidth(), _mediaPlayer.Info.GetVideoHeight(), _mediaPlayer.Info.GetVideoFrameRate());
+ }
+
+ #if MEDIA_NAME
+ _textMediaName.text = string.Format("{0} {1}", mediaName, resolutionName);
+ #else
+ _textMediaName.text = resolutionName;
+ #endif
+ }
+
+ // Update buffered segments
+ if (_segmentsBuffered)
+ {
+ TimeRanges times = _mediaPlayer.Control.GetBufferedTimes();
+ float[] ranges = null;
+ if (times.Count > 0 && timelineRange.duration > 0.0)
+ {
+ ranges = new float[times.Count * 2];
+ for (int i = 0; i < times.Count; i++)
+ {
+ ranges[i * 2 + 0] = Mathf.Max(0f, (float)((times[i].StartTime - timelineRange.startTime) / timelineRange.duration));
+ ranges[i * 2 + 1] = Mathf.Min(1f,(float)((times[i].EndTime - timelineRange.startTime) / timelineRange.duration));
+ }
+ }
+ _segmentsBuffered.Segments = ranges;
+ }
+
+ // Update progress segment
+ if (_segmentsProgress)
+ {
+ TimeRanges times = _mediaPlayer.Control.GetBufferedTimes();
+ float[] ranges = null;
+ if (times.Count > 0 && timelineRange.Duration > 0.0)
+ {
+ ranges = new float[2];
+ double x1 = (times.MinTime - timelineRange.startTime) / timelineRange.duration;
+ double x2 = ((_mediaPlayer.Control.GetCurrentTime() - timelineRange.startTime) / timelineRange.duration);
+ ranges[0] = Mathf.Max(0f, (float)x1);
+ ranges[1] = Mathf.Min(1f, (float)x2);
+ }
+ _segmentsProgress.Segments = ranges;
+ }
+ }
+ }
+
+ void OnGUI()
+ {
+ // NOTE: These this IMGUI is just temporary until we implement the UI using uGUI
+ if (!_showOptions) return;
+ if (!_mediaPlayer || _mediaPlayer.Control == null) return;
+
+ GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(2f, 2f, 1f));
+
+ GUI.backgroundColor = Color.red;
+ GUILayout.BeginVertical(GUI.skin.box);
+ GUI.backgroundColor = Color.white;
+
+ GUILayout.Label("Duration " + _mediaPlayer.Info.GetDuration() + "s");
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("States: ");
+ GUILayout.Toggle(_mediaPlayer.Control.HasMetaData(), "HasMetaData", GUI.skin.button);
+ GUILayout.Toggle(_mediaPlayer.Control.IsPaused(), "Paused", GUI.skin.button);
+ GUILayout.Toggle(_mediaPlayer.Control.IsPlaying(), "Playing", GUI.skin.button);
+ GUILayout.Toggle(_mediaPlayer.Control.IsBuffering(), "Buffering", GUI.skin.button);
+ GUILayout.Toggle(_mediaPlayer.Control.IsSeeking(), "Seeking", GUI.skin.button);
+ GUILayout.Toggle(_mediaPlayer.Control.IsFinished(), "Finished", GUI.skin.button);
+ GUILayout.EndHorizontal();
+
+ {
+ TimeRanges times = _mediaPlayer.Control.GetBufferedTimes();
+ if (times != null)
+ {
+ GUILayout.Label("Buffered Range " + times.MinTime + " - " + times.MaxTime);
+ }
+ }
+ {
+ TimeRanges times = _mediaPlayer.Control.GetSeekableTimes();
+ if (times != null)
+ {
+ GUILayout.Label("Seek Range " + times.MinTime + " - " + times.MaxTime);
+ }
+ }
+
+
+ {
+ GUILayout.Label("Video Tracks: " + _mediaPlayer.VideoTracks.GetVideoTracks().Count);
+
+ GUILayout.BeginVertical();
+
+ VideoTrack selectedTrack = null;
+ foreach (VideoTrack track in _mediaPlayer.VideoTracks.GetVideoTracks())
+ {
+ bool isSelected = (track == _mediaPlayer.VideoTracks.GetActiveVideoTrack());
+ if (isSelected) GUI.color= Color.green;
+ if (GUILayout.Button(track.DisplayName, GUILayout.ExpandWidth(false)))
+ {
+ selectedTrack = track;
+ }
+ if (isSelected) GUI.color= Color.white;
+ }
+ GUILayout.EndHorizontal();
+ if (selectedTrack != null)
+ {
+ _mediaPlayer.VideoTracks.SetActiveVideoTrack(selectedTrack);
+ }
+ }
+ {
+ GUILayout.Label("Audio Tracks: " + _mediaPlayer.AudioTracks.GetAudioTracks().Count);
+
+ GUILayout.BeginVertical();
+
+ AudioTrack selectedTrack = null;
+ foreach (AudioTrack track in _mediaPlayer.AudioTracks.GetAudioTracks())
+ {
+ bool isSelected = (track == _mediaPlayer.AudioTracks.GetActiveAudioTrack());
+ if (isSelected) GUI.color= Color.green;
+ if (GUILayout.Button(track.DisplayName, GUILayout.ExpandWidth(false)))
+ {
+ selectedTrack = track;
+ }
+ if (isSelected) GUI.color= Color.white;
+ }
+ GUILayout.EndHorizontal();
+ if (selectedTrack != null)
+ {
+ _mediaPlayer.AudioTracks.SetActiveAudioTrack(selectedTrack);
+ }
+ }
+ {
+ GUILayout.Label("Text Tracks: " + _mediaPlayer.TextTracks.GetTextTracks().Count);
+
+ GUILayout.BeginVertical();
+
+ TextTrack selectedTrack = null;
+ foreach (TextTrack track in _mediaPlayer.TextTracks.GetTextTracks())
+ {
+ bool isSelected = (track == _mediaPlayer.TextTracks.GetActiveTextTrack());
+ if (isSelected) GUI.color= Color.green;
+ if (GUILayout.Button(track.DisplayName, GUILayout.ExpandWidth(false)))
+ {
+ selectedTrack = track;
+ }
+ if (isSelected) GUI.color= Color.white;
+ }
+ GUILayout.EndHorizontal();
+ if (selectedTrack != null)
+ {
+ _mediaPlayer.TextTracks.SetActiveTextTrack(selectedTrack);
+ }
+ }
+ {
+ GUILayout.Label("FPS: " + _mediaPlayer.Info.GetVideoDisplayRate().ToString("F2"));
+ }
+#if (UNITY_STANDALONE_WIN)
+ if (_mediaPlayer.PlatformOptionsWindows.bufferedFrameSelection != BufferedFrameSelectionMode.None)
+ {
+ IBufferedDisplay bufferedDisplay = _mediaPlayer.BufferedDisplay;
+ if (bufferedDisplay != null)
+ {
+ BufferedFramesState state = bufferedDisplay.GetBufferedFramesState();
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("Buffered Frames: " + state.bufferedFrameCount);
+ GUILayout.HorizontalSlider(state.bufferedFrameCount, 0f, 12f);
+ GUILayout.EndHorizontal();
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("Free Frames: " + state.freeFrameCount);
+ GUILayout.HorizontalSlider(state.freeFrameCount, 0f, 12f);
+ GUILayout.EndHorizontal();
+ GUILayout.Label("Min Timstamp: " + state.minTimeStamp);
+ GUILayout.Label("Max Timstamp: " + state.maxTimeStamp);
+ GUILayout.Label("Display Timstamp: " + _mediaPlayer.TextureProducer.GetTextureTimeStamp());
+ }
+ }
+#endif
+ GUILayout.EndVertical();
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.cs.meta
new file mode 100755
index 0000000..d5a6bc0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 35bb2f3708dd0394cb564ca3557a37fc
+timeCreated: 1546712398
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.mat b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.mat
new file mode 100755
index 0000000..aaf28e3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.mat
@@ -0,0 +1,82 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MediaPlayerUI
+ m_Shader: {fileID: 4800000, guid: 8b83f1522b53ad44a9a271e7db8aa527, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.mat.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.mat.meta
new file mode 100755
index 0000000..a511e3a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4dc8d5e4c33efff42a23dc52502a4a4d
+timeCreated: 1546682531
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.shader b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.shader
new file mode 100755
index 0000000..d8a439d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.shader
@@ -0,0 +1,486 @@
+// Credit to Inigo Quilez (https://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm) for many of the 2D functions used
+Shader "Unlit/MediaPlayerUI"
+{
+ Properties
+ {
+ [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
+ _Color("Tint", Color) = (1,1,1,1)
+
+ _StencilComp("Stencil Comparison", Float) = 8
+ _Stencil("Stencil ID", Float) = 0
+ _StencilOp("Stencil Operation", Float) = 0
+ _StencilWriteMask("Stencil Write Mask", Float) = 255
+ _StencilReadMask("Stencil Read Mask", Float) = 255
+
+ _ColorMask("Color Mask", Float) = 15
+ [KeywordEnum(Circle, Play, Pause, PlayPause, Buffering, Volume, Forward, Back, CC, Options, Spectrum)] UI("UI Element", Float) = 0
+ _Morph("Morph", Range(0, 1)) = 0
+ _Mute("Mute", Range(0, 1)) = 0
+ _Volume("Volume", Range(0, 1)) = 1
+
+ [Toggle(DRAW_OUTLINE)] _DrawOutline("Draw Outline", Float) = 0
+ _OutlineSize("Outline Size", Range(0, 0.1)) = 0.05
+ _OutlineOpacity("Outline Opacity", Range(0, 1)) = 0.25
+ _OutlineSoftness("Outline Softness", Range(0, 1)) = 0
+ }
+ SubShader
+ {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ "PreviewType"="Plane"
+ "CanUseSpriteAtlas"="True"
+ }
+
+ Stencil
+ {
+ Ref[_Stencil]
+ Comp[_StencilComp]
+ Pass[_StencilOp]
+ ReadMask[_StencilReadMask]
+ WriteMask[_StencilWriteMask]
+ }
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ ZTest[unity_GUIZTestMode]
+ Fog{ Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask[_ColorMask]
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile UI_CIRCLE UI_PLAY UI_PAUSE UI_PLAYPAUSE UI_BUFFERING UI_VOLUME UI_FORWARD UI_BACK UI_CC UI_OPTIONS UI_SPECTRUM
+ #pragma shader_feature DRAW_OUTLINE
+ #include "UnityCG.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ float4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ half2 uv : TEXCOORD0;
+ float4 worldPosition : TEXCOORD1;
+ };
+
+ uniform fixed4 _Color;
+ uniform float _Morph;
+ uniform float _Volume;
+ uniform float _Mute;
+ uniform float _OutlineSize;
+ uniform float _OutlineOpacity;
+ uniform float _OutlineSoftness;
+#if UI_SPECTRUM
+ #if SHADER_API_GLES
+ uniform float _Spectrum[4];
+ #else
+ uniform float _Spectrum[128];
+ #endif
+ uniform float _SpectrumRange;
+ uniform float _SpectrumMax;
+#endif
+ sampler2D _MainTex;
+ float4 _MainTex_ST;
+
+ v2f vert(appdata_t IN)
+ {
+ v2f OUT;
+ OUT.worldPosition = IN.vertex;
+ OUT.vertex = UnityObjectToClipPos(IN.vertex);
+#ifdef UNITY_HALF_TEXEL_OFFSET
+ OUT.vertex.xy += (_ScreenParams.zw - 1.0)*float2(-1, 1);
+#endif
+ OUT.uv.xy = IN.texcoord.xy;
+ OUT.color = IN.color * _Color;
+
+ return OUT;
+ }
+
+ float ndot(float2 a, float2 b) { return a.x*b.x - a.y*b.y; }
+
+ float opU(float d1, float d2) { return min(d1, d2); }
+
+ float opS(float d1, float d2) { return max(-d1, d2); }
+
+ float opI(float d1, float d2) { return max(d1, d2); }
+
+ float sdCircle(in float2 p, float r)
+ {
+ return length(p) - r;
+ }
+
+ float sdRhombus(in float2 p, in float2 b)
+ {
+ float2 q = abs(p);
+ float h = clamp((-2.0*ndot(q, b) + ndot(b, b)) / dot(b, b), -1.0, 1.0);
+ float d = length(q - 0.5*b*float2(1.0 - h, 1.0 + h));
+ return d * sign(q.x*b.y + q.y*b.x - b.x*b.y);
+ }
+
+ float sdEquilateralTriangle(in float2 p)
+ {
+ const float k = sqrt(3.0);
+
+ p.x = abs(p.x) - 1.0;
+ p.y = p.y + 1.0 / k;
+ if (p.x + k*p.y > 0.0) p = float2(p.x - k*p.y, -k*p.x - p.y) / 2.0;
+ p.x -= clamp(p.x, -2.0, 0.0);
+ return -length(p)*sign(p.y);
+ }
+
+ float sdTriangle(in float2 p, in float2 p0, in float2 p1, in float2 p2)
+ {
+ float2 e0 = p1 - p0, e1 = p2 - p1, e2 = p0 - p2;
+ float2 v0 = p - p0, v1 = p - p1, v2 = p - p2;
+
+ float2 pq0 = v0 - e0*clamp(dot(v0, e0) / dot(e0, e0), 0.0, 1.0);
+ float2 pq1 = v1 - e1*clamp(dot(v1, e1) / dot(e1, e1), 0.0, 1.0);
+ float2 pq2 = v2 - e2*clamp(dot(v2, e2) / dot(e2, e2), 0.0, 1.0);
+
+ float s = sign(e0.x*e2.y - e0.y*e2.x);
+ float2 d = min(min(float2(dot(pq0, pq0), s*(v0.x*e0.y - v0.y*e0.x)),
+ float2(dot(pq1, pq1), s*(v1.x*e1.y - v1.y*e1.x))),
+ float2(dot(pq2, pq2), s*(v2.x*e2.y - v2.y*e2.x)));
+
+ return -sqrt(d.x)*sign(d.y);
+ }
+
+
+ float sdTriangleIsosceles(in float2 p, in float2 q)
+ {
+ p.x = abs(p.x);
+
+ float2 a = p - q*clamp(dot(p, q) / dot(q, q), 0.0, 1.0);
+ float2 b = p - q*float2(clamp(p.x / q.x, 0.0, 1.0), 1.0);
+ float s = -sign(q.y);
+ float2 d = min(float2(dot(a, a), s*(p.x*q.y - p.y*q.x)),
+ float2(dot(b, b), s*(p.y - q.y)));
+
+ return -sqrt(d.x)*sign(d.y);
+ }
+
+ float sdBox(in float2 p, in float2 b)
+ {
+ float2 d = abs(p) - b;
+ return length(max(d, float2(0.0, 0.0))) + min(max(d.x, d.y), 0.0);
+ }
+
+ float sdRoundedBox(in float2 p, in float2 b, in float4 r)
+ {
+ r.xy = (p.x>0.0)?r.xy : r.zw;
+ r.x = (p.y>0.0)?r.x : r.y;
+ float2 q = abs(p)-b+r.x;
+ return min(max(q.x,q.y),0.0) + length(max(q,0.0)) - r.x;
+ }
+
+ float sdArc(in float2 p, in float2 sca, in float2 scb, in float ra, float rb)
+ {
+ p = mul(float2x2(sca.x,sca.y,-sca.y,sca.x), p);
+ p.x = abs(p.x);
+ float k = (scb.y*p.x>scb.x*p.y) ? dot(p.xy,scb) : length(p.xy);
+ return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;
+ }
+
+ float2 rotate2d(float2 v, float a)
+ {
+ float s = sin(a);
+ float c = cos(a);
+ float2x2 m = float2x2(c, -s, s, c);
+ return mul(m,v);
+ }
+
+#if UI_FORWARD || UI_BACK
+ float forward(float2 uv)
+ {
+ float r1 = 100000.0;
+ r1 = sdTriangleIsosceles(float2(uv.y, -uv.x) + float2(0.0, 0.333), float2(0.666, 0.666));
+ r1 = opS(r1, sdTriangleIsosceles(float2(uv.y, -uv.x) + float2(0.0, 0.333 * 1.5), float2(0.666, 0.666)));
+
+ uv.x += 0.2;
+
+ float r2 = 100000.0;
+ r2 = sdTriangleIsosceles(float2(uv.y, -uv.x) + float2(0.0, 0.333), float2(0.666, 0.666));
+ //r2 = opS(r2, sdTriangleIsosceles(float2(uv.y, -uv.x) + float2(0.0, 0.333 * 1.5), float2(0.666, 0.666)));
+
+ float r = opU(r1, r2);
+
+ return r;
+ }
+#endif
+
+#if UI_VOLUME
+ float volume(float2 uv)
+ {
+ float r = 100000.0;
+
+ uv.x += 0.25;
+
+ // Cone
+ r = opU(r, sdBox(uv + float2(0.1, 0.0), float2(0.25, 0.25)));
+ r = opU(r, sdTriangleIsosceles(float2(uv.y, uv.x) + float2(0.0, 0.3), float2(0.6, 0.6)));
+
+ // Ripple occluder
+ float s = sdBox(uv + float2(0, 0.0), float2(0.4, 0.7));
+
+ // Ripple thickness
+ float rt = 0.15;
+
+ // Ripple 1
+ float offset = -0.25;
+ if (_Volume > 0.0)
+ {
+ float t = saturate(_Volume / 0.5);
+ r = opU(r, opS(s, sdCircle(uv + float2(offset, 0.0), rt*lerp(1, 2, t))));
+ }
+
+ // Ripple 2
+ float a;
+ //a = sdCircle(uv + float2(offset, 0.0), 0.6 - rt * 3);
+ //a = opS(a, opS(s, sdCircle(uv + float2(offset, 0.0), 0.6 - rt * 2)));
+ //r = opU(a, r);
+
+ // Ripple 3
+ if (_Volume > 0.5)
+ {
+ float t = saturate((_Volume - 0.5) / 0.5);
+ a = sdCircle(uv + float2(offset, 0.0), (0.6 - rt));
+ a = opS(a, opS(s, sdCircle(uv + float2(offset, 0.0), lerp(0.6-rt, 0.6, t))));
+ r = opU(a, r);
+ }
+
+ // Crossout
+ if (_Mute > 0.0)
+ {
+ float maxLength = 0.8;
+ float length = _Mute * maxLength;
+ {
+ // Cutout
+ r = opS(-r, -sdBox(rotate2d(uv - float2(0.25, 0), -3.14/4) + float2(-0.1, length/1 - maxLength/1), float2(0.1, length*1)));
+
+ // Line
+ r = opU(r, sdBox(rotate2d(uv - float2(0.25, 0), -3.14/4) + float2(0.0, length/1 - maxLength/1), float2(0.1, length*1)));
+ }
+ }
+
+ return r;
+ }
+#endif
+
+
+#if UI_CC
+ float ccbutton(float2 uv)
+ {
+ float r = 100000.0;
+
+ float barHeight = 0.1;
+
+ float boxSize = 0.65;
+ float r3 = sdRoundedBox(uv, float2(boxSize, boxSize * 0.9), float4(0.25, 0.25, 0.25, 0.25));
+
+ float angle1 = 0.0;
+ float angle2 = 2.3;
+ float thickeness = 0.08;
+ float size = 0.25;
+ float rLeftC = sdArc(float2(0.35 + uv.x*1.5, uv.y), float2(sin(angle1), cos(angle1)), float2(sin(angle2), cos(angle2)), size, thickeness);
+ float rRightC = sdArc(float2(-0.40 + uv.x*1.5, uv.y), float2(sin(angle1), cos(angle1)), float2(sin(angle2), cos(angle2)), size, thickeness);
+
+ r = opU(rLeftC, rRightC);
+ r = opS(r, r3);
+
+ if (_Morph > 0.0)
+ {
+ float barWidth = lerp(0.0, boxSize, _Morph);
+ float r4 = sdBox(uv + float2(0.0, boxSize + barHeight * 2.0), float2(barWidth, barHeight));
+ r = opU(r, r4);
+ }
+
+ return r;
+ }
+#endif
+
+#if UI_OPTIONS
+ float optionsgear(float2 uv, float radius, float discRatio, float holeRatio, float spokeRatio)
+ {
+ float r = 100000.0;
+
+ float r1 = sdCircle(uv, radius * holeRatio);
+ float r2 = sdCircle(uv, radius * discRatio);
+
+ float rotationOffset = lerp(0.0, 3.141592654/6.0, _Morph);
+
+ float b1 = sdBox(rotate2d(uv, (3.141592654 / 2.0) + rotationOffset), float2(radius, radius * spokeRatio));
+ float b2 = sdBox(rotate2d(uv, (3.141592654 / 6.0) + rotationOffset), float2(radius, radius * spokeRatio));
+ float b3 = sdBox(rotate2d(uv,-(3.141592654 / 6.0) + rotationOffset), float2(radius, radius * spokeRatio));
+
+ r = r2; // Base circle
+ r = opU(r, b1); // Spoke 1
+ r = opU(r, b2); // Spoke 2
+ r = opU(r, b3); // Spoke 3
+ r = opS(r1, r); // Hole
+
+ return r;
+ }
+#endif
+
+#if UI_BUFFERING
+ float CircularDistance(float a, float b, float range)
+ {
+ float d1 = abs(a-b);
+ //float d2 = range - d1;
+ //return lerp((a-b), d2, d1 / (range/2));
+ if (d1 > range/2)
+ {
+ d1 = (range - d1);
+ }
+ else
+ {
+ d1 = a-b;
+ }
+ return d1;
+ }
+#endif
+
+ fixed4 getColorWithOutline(float d, float3 shapeColor, float3 outlineColor)
+ {
+ float dw = fwidth(d) * 0.5;
+ float shapeAlpha = smoothstep(dw, -dw, d);
+
+#if !DRAW_OUTLINE
+ return float4(shapeColor, shapeAlpha);
+#else
+
+ float od = (d - _OutlineSize);
+ float dw2 = fwidth(od) * 0.5;
+ float outlineAlpha = smoothstep(dw2 + _OutlineSoftness, -dw2 - _OutlineSoftness, od);
+
+ return lerp(float4(outlineColor, outlineAlpha * _OutlineOpacity), float4(shapeColor, shapeAlpha), shapeAlpha);
+#endif
+ }
+
+ fixed4 frag(v2f i) : SV_Target
+ {
+#if UI_SPECTRUM
+ // In GLES2.0 indexing from the _Spectrum[] array is not supported
+ #if SHADER_API_GLES
+ float v = 0.0;
+ float d = 0.0;
+ #else
+ float x = (pow(i.uv.x, 1.0) * _SpectrumRange)-1.0;
+ //_Spectrum[0] = 0.0;
+ // Bilinear sample the values
+ float scale = (1.0+i.uv.x * 8.0); // Scale higher freqs to give them more movement
+ float v1 = 0.0;
+ float v2 = 0.0;
+ int t1 = floor(x);
+ int t2 = ceil(x);
+ if (t1 >= 0)
+ {
+ v1 = (_Spectrum[t1] * scale);
+ }
+ if (t2 >= 0)
+ {
+ v2 = (_Spectrum[t2] * scale);
+ }
+ v1 = max(v1, 0.01);
+ v2 = max(v2, 0.01);
+ float2 uvn = float2(0.0, i.uv.y);
+ // Get vertical distance
+ float d1 = (abs(i.uv.y - 0.5) - (v1/1.0));
+ float d2 = (abs(i.uv.y - 0.5) - (v2/1.0));
+ // Interpolate
+ float xf = frac(x);
+ float v = saturate(lerp(v1, v2, xf));
+ float d = lerp(d1, d2, xf);
+ #endif
+ // Get colour from texture
+ float yy2 = abs(i.uv.y - 0.5) * 2.0;
+ float yy = v;
+ float level = i.uv.y;// + pow(yy2+v, 8);
+ float3 col = level;//tex2D(_MainTex, float2(level, 0.0f));
+ //col.g += abs(i.uv.x);
+ return getColorWithOutline(d, col, float3(0.0, 0.0, 0.0)) * i.color;
+#else
+#if UI_CIRCLE
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+ float d = sdCircle(uvn, 1.0);
+#elif UI_PLAY
+ float2 uvn = (i.uv.xy - float2(0.5, 0.5)) / 0.5;
+ float d = sdTriangle(uvn, float2(-0.6, 0.6), float2(0.6, 0), float2(-0.6, -0.6));
+
+#elif UI_PAUSE
+ float d1 = sdBox(i.uv - 0.5 + float2(0.2, 0.0), float2(0.1, 0.3));
+ float d2 = sdBox(i.uv - 0.5 - float2(0.2, 0.0), float2(0.1, 0.3));
+ float d = min(d1, d2);
+ //c = 1.0 - saturate(smoothstep(dw-0.022, -dw, d))*0.2;
+#elif UI_PLAYPAUSE
+ float2 uvn = (i.uv.xy - float2(0.5, 0.5)) / 0.5;
+ float d3 = sdTriangle(uvn, float2(-0.6, 0.6), float2(0.6, 0), float2(-0.6, -0.6));
+
+ float d1 = sdBox(i.uv - 0.5 + float2(0.2, 0.0), float2(0.1, 0.3));
+ float d2 = sdBox(i.uv - 0.5 - float2(0.2, 0.0), float2(0.1, 0.3));
+ float d = min(d1, d2);
+
+ float dw1 = fwidth(d) * 0.5;
+ float dw3 = fwidth(d3) * 0.5;
+ float dw = lerp(dw1, dw3, _Morph);
+ //a = smoothstep(dw, -dw, lerp(d, d3, _Morph));
+ d = lerp(d, d3, _Morph);
+ //c = 1.0 - saturate(smoothstep(-0.025, 0, lerp(d, d3, _Morph)))*0.2;
+#elif UI_BUFFERING
+ float rsize = 0.05;
+ float r = 0.5;
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+
+ // Inner radius
+ float d = sdCircle(uvn, r - rsize);
+
+ // Outer radius
+ d = opS(d, sdCircle(uvn, r + rsize));
+
+ // Animation angle
+ float za = -(_Time.x * 160) + cos(_Time.y*2.0);
+ float zz = sin(_Time.y);
+
+ // Create point at the animated angle, at the same radius as this UV
+ float2 dp = float2(sin(za), cos(za)) * length(uvn);
+
+ // Calculate angle between the UV and the new point and subtract offset
+ float dy = abs(atan((dp.x - uvn.x)/(dp.y - uvn.y))) - abs(zz);
+ d = opI(d, dy);
+
+#elif UI_VOLUME
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+ float d = volume(uvn);
+#elif UI_FORWARD
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+ float d = forward(uvn);
+#elif UI_BACK
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+ float d = forward(float2(-uvn.x, uvn.y));
+#elif UI_CC
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+ float d = ccbutton(uvn);
+#elif UI_OPTIONS
+ float2 uvn = (i.uv.xy - 0.5) / 0.5;
+ float d = optionsgear(uvn, 0.75, 0.75, 0.35, 0.25);
+#endif
+
+ return getColorWithOutline(d, float3(1.0, 1.0, 1.0), float3(0.0, 0.0, 0.0)) * i.color;
+#endif
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.shader.meta
new file mode 100755
index 0000000..d39f3c0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/MediaPlayerUI.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 8b83f1522b53ad44a9a271e7db8aa527
+timeCreated: 1546682502
+licenseType: Pro
+ShaderImporter:
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/OverlayManager.cs b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/OverlayManager.cs
new file mode 100755
index 0000000..e9ecaa9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/OverlayManager.cs
@@ -0,0 +1,154 @@
+// UnityEngine.UI was moved to a package in 2019.2.0
+// Unfortunately no way to test for this across all Unity versions yet
+// You can set up the asmdef to reference the new package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+#define AVPRO_PACKAGE_UNITYUI
+#if (UNITY_2019_2_OR_NEWER && AVPRO_PACKAGE_UNITYUI) || (!UNITY_2019_2_OR_NEWER)
+
+using UnityEngine;
+using UnityEngine.UI;
+
+//-----------------------------------------------------------------------------
+// Copyright 2018-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Demos.UI
+{
+ public class OverlayManager : MonoBehaviour
+ {
+ public enum Feedback
+ {
+ Play,
+ Pause,
+ SeekForward,
+ SeekBack,
+ VolumeUp,
+ VolumeDown,
+ VolumeMute,
+ }
+
+ [SerializeField] Image _stalledImage = null;
+ [SerializeField] Image _feedbackImage = null;
+ [SerializeField] CanvasGroup _feedbackCanvas = null;
+ [SerializeField] float _startScale = 0.25f;
+ [SerializeField] float _endScale = 1.0f;
+ [SerializeField] float _animationSpeed = 1.5f;
+
+ private Material _feedbackMaterial;
+ private float _feedbackTimer;
+
+ private readonly LazyShaderProperty _propMute = new LazyShaderProperty("_Mute");
+ private readonly LazyShaderProperty _propVolume = new LazyShaderProperty("_Volume");
+
+ void Start()
+ {
+ _feedbackMaterial = new Material(_feedbackImage.material);
+ _feedbackImage.material = _feedbackMaterial;
+ _feedbackCanvas.alpha = 0f;
+ _feedbackTimer = 1f;
+ }
+
+ void OnDestroy()
+ {
+ if (_feedbackMaterial)
+ {
+ Material.Destroy(_feedbackMaterial);
+ _feedbackMaterial = null;
+ }
+ }
+
+ public void Reset()
+ {
+ _stalledImage.enabled = false;
+ }
+
+ public void TriggerStalled()
+ {
+ _stalledImage.enabled = true;
+ }
+
+ private const string KeywordPlay = "UI_PLAY";
+ private const string KeywordPause = "UI_PAUSE";
+ private const string KeywordSeekBack = "UI_BACK";
+ private const string KeywordSeekForward = "UI_FORWARD";
+ private const string KeywordVolume = "UI_VOLUME";
+ private const string KeywordVolumeUp = "UI_VOLUMEUP";
+ private const string KeywordVolumeDown = "UI_VOLUMEDOWN";
+ private const string KeywordVolumeMute = "UI_VOLUMEMUTE";
+
+ public void TriggerFeedback(Feedback feedback)
+ {
+ _feedbackMaterial.DisableKeyword(KeywordPlay);
+ _feedbackMaterial.DisableKeyword(KeywordPause);
+ _feedbackMaterial.DisableKeyword(KeywordSeekBack);
+ _feedbackMaterial.DisableKeyword(KeywordSeekForward);
+ _feedbackMaterial.DisableKeyword(KeywordVolume);
+ _feedbackMaterial.DisableKeyword(KeywordVolumeUp);
+ _feedbackMaterial.DisableKeyword(KeywordVolumeDown);
+ _feedbackMaterial.DisableKeyword(KeywordVolumeMute);
+
+ string keyword = null;
+ switch (feedback)
+ {
+ case Feedback.Play:
+ keyword = KeywordPlay;
+ break;
+ case Feedback.Pause:
+ keyword = KeywordPause;
+ break;
+ case Feedback.SeekBack:
+ keyword = KeywordSeekBack;
+ break;
+ case Feedback.SeekForward:
+ keyword = KeywordSeekForward;
+ break;
+ case Feedback.VolumeUp:
+ keyword = KeywordVolume;
+ _feedbackMaterial.SetFloat(_propMute.Id, 0f);
+ _feedbackMaterial.SetFloat(_propVolume.Id, 1f);
+ break;
+ case Feedback.VolumeDown:
+ keyword = KeywordVolume;
+ _feedbackMaterial.SetFloat(_propMute.Id, 0f);
+ _feedbackMaterial.SetFloat(_propVolume.Id, 0.5f);
+ break;
+ case Feedback.VolumeMute:
+ keyword = KeywordVolume;
+ _feedbackMaterial.SetFloat(_propVolume.Id, 1f);
+ _feedbackMaterial.SetFloat(_propMute.Id, 1f);
+ break;
+ }
+
+ if (!string.IsNullOrEmpty(keyword))
+ {
+ _feedbackMaterial.EnableKeyword(keyword);
+ }
+
+ _feedbackCanvas.alpha = 1f;
+ _feedbackCanvas.transform.localScale = new Vector3(_startScale, _startScale, _startScale);
+ _feedbackTimer = 0f;
+ Update();
+ }
+
+ private void Update()
+ {
+ // Update scaling and fading
+ float t2 = Mathf.Clamp01(_feedbackTimer);
+ float t = Mathf.Clamp01((_feedbackTimer - 0.5f) * 2f);
+ _feedbackCanvas.alpha = Mathf.Lerp(1f, 0f, PowerEaseOut(t, 1f));
+ if (_feedbackCanvas.alpha > 0f)
+ {
+ float scale = Mathf.Lerp(_startScale, _endScale, PowerEaseOut(t2, 2f));
+ _feedbackCanvas.transform.localScale = new Vector3(scale, scale, scale);
+ }
+
+ _feedbackTimer += Time.deltaTime * _animationSpeed;
+ }
+
+ private static float PowerEaseOut(float t, float power)
+ {
+ return 1f - Mathf.Abs(Mathf.Pow(t - 1f, power));
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/OverlayManager.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/OverlayManager.cs.meta
new file mode 100755
index 0000000..883ba60
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/MediaPlayerUI/OverlayManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 382afb28aa5a7f1428ffeab5b7d15625
+timeCreated: 1546863408
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/OctahedronSphere8192.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/OctahedronSphere8192.asset
new file mode 100755
index 0000000..d7e3d87
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/OctahedronSphere8192.asset
@@ -0,0 +1,130 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!43 &4300000
+Mesh:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: OctahedronSphere8192
+ serializedVersion: 8
+ m_SubMeshes:
+ - serializedVersion: 2
+ firstByte: 0
+ indexCount: 24576
+ topology: 0
+ firstVertex: 0
+ vertexCount: 4167
+ localAABB:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 1, y: 1, z: 1}
+ m_Shapes:
+ vertices: []
+ shapes: []
+ channels: []
+ fullWeights: []
+ m_BindPose: []
+ m_BoneNameHashes:
+ m_RootBoneNameHash: 0
+ m_MeshCompression: 0
+ m_IsReadable: 1
+ m_KeepVertices: 0
+ m_KeepIndices: 0
+ m_IndexBuffer: 000001000200010003000200010004000300020003000500020005000600020006000700080002000700070006000900070009000a0007000a000b000c0007000b000b000a000d000b000d000e000b000e000f0010000b000f000f000e001100040012000300040013001200050014000600050015001400060014001600060016000900090016001700090017001800090018000a000a00180019000a0019000d000d0019001a000e001b00110011001b001c0013001d00120013001e001d0012001d001f0015002000140015002100200015002200210023001f00220012001f002300030012002300030023000500050023001500230022001500190024001a001900250024001a00240026001b0027001c001c00270028001e0029001d001d0029002a001d002a001f001f002a002b001f002b00220022002b002c0025002d00240025002e002d002f002e00250018002f00250017002f001800170030002f0017003100300016003100170016003200310014003200160014002000320020003300320020003400330021003400200022002c00210021002c003500210035003400320033003600320036003100310036003700310037003000300037003800300038003900300039002f002f0039002e0035003a00340035003b003a0035003c003b002c003c0035002c003d003c002b003d002c002b003e003d002a003e002b002a003f003e0029003f002a00290040003f004100400029001e0041002900410042004000420043004000420044004300400043004500400045003f003f00450046003f0046003e003e00460047003e0047003d003d00470048003d0048003c003c00480049003c0049003b003b0049004a003b004a004b003b004b003a003a004b004c003a004c004d0034003a004d0034004d00330033004d004e0033004e00360036004e004f0036004f00370037004f005000370050003800380050005100380051005200380052003900390052005300390053002e002e00530054002e0054002d002d00540055002d005500560024002d0056002400560026002600560057002600570058002600580059001a00260059001a0059005a000d001a005a000d005a000e000e005a001b005a0059005b005a005b001b001b005b002700590058005c0059005c005b005b005c005d005b005d00270027005d005e0027005e00280028005e005f00570060005800570061006000580060006200580062005c005c00620063005c0063005d005d00630064005d0064005e005e00640065005e0065005f005f00650066006100670060006100680067006100690068006a006900610057006a00610056006a005700560055006a0055006b006a006a006b00690055006c006b0054006c00550054006d006c0053006d00540053006e006d0052006e00530052006f006e0051006f005200510070006f005100710070005000710051005000720071004f00720050004f00730072004e0073004f004e00740073004d0074004e004d004c0074004c00750074004c00760075004b0076004c004b00770076004a0077004b004a00780077004a0079007800490079004a0049007a00790048007a00490048007b007a0047007b00480047007c007b0046007c00470046007d007c0045007d00460045007e007d0043007e00450043007f007e0044007f004300440080007f00800081007f008000820081007f00810083007f0083007e007e00830084007e0084007d007d00840085007d0085007c007c00850086007c0086007b007b00860087007b0087007a007a00870088007a0088007900790088008900790089007800780089008a0078008a008b0078008b00770077008b008c0077008c00760076008c008d0076008d00750075008d008e0075008e008f00740075008f0074008f00730073008f009000730090007200720090009100720091007100710091009200710092007000700092009300700093009400700094006f006f00940095006f0095006e006e00950096006e0096006d006d00960097006d0097006c006c00970098006c0098006b006b00980099006b0099006900690099009a0069009a00680068009a009b0068009b009c0068009c00670067009c009d0067009d009e00600067009e0060009e00620062009e009f0062009f00630063009f00a0006300a00064006400a000a1006400a10065006500a100a2006500a20066006600a200a3009e009d00a4009e00a4009f009f00a400a5009f00a500a000a000a500a600a000a600a100a100a600a700a100a700a200a200a700a800a200a800a300a300a800a900a400aa00a500a400ab00aa009d00ab00a4009d00ac00ab009c00ac009d009c00ad00ac009b00ad009c009b00ae00ad009b00af00ae009a00af009b009a00b000af009900b0009a009900b100b0009800b10099009800b200b1009700b20098009700b300b2009600b30097009600b400b3009500b40096009500b500b4009400b50095009400b600b5009300b60094009300b700b6009300b800b7009200b80093009200b900b8009100b90092009100ba00b9009000ba0091009000bb00ba008f00bb0090008f008e00bb008e00bc00bb008e00bd00bc008d00bd008e008d00be00bd008c00be008d008c00bf00be008b00bf008c008b00c000bf008a00c0008b008a00c100c0008a00c200c1008900c2008a008900c300c2008800c30089008800c400c3008700c40088008700c500c4008600c50087008600c600c5008500c60086008500c700c6008400c70085008400c800c7008300c80084008300c900c8008100c90083008100ca00c9008200ca0081008200cb00ca00cb00cc00ca00cb00cd00cc00ca00cc00ce00ca00ce00c900c900ce00cf00c900cf00c800c800cf00d000c800d000c700c700d000d100c700d100c600c600d100d200c600d200c500c500d200d300c500d300c400c400d300d400c400d400c300c300d400d500c300d500c200c200d500d600c200d600c100c100d600d700c100d700d800c100d800c000c000d800d900c000d900bf00bf00d900da00bf00da00be00be00da00db00be00db00bd00bd00db00dc00bd00dc00bc00bc00dc00dd00bc00dd00de00bb00bc00de00bb00de00ba00ba00de00df00ba00df00b900b900df00e000b900e000b800b800e000e100b800e100b700b700e100e200b700e200e300b700e300b600b600e300e400b600e400b500b500e400e500b500e500b400b400e500e600b400e600b300b300e600e700b300e700b200b200e700e800b200e800b100b100e800e900b100e900b000b000e900ea00b000ea00af00af00ea00eb00af00eb00ae00ae00eb00ec00ae00ec00ed00ae00ed00ad00ad00ed00ee00ad00ee00ac00ac00ee00ef00ac00ef00ab00ab00ef00f000ab00f000aa00aa00f000f100aa00f100f200a500aa00f200a500f200a600a600f200f300a600f300a700a700f300f400a700f400a800a800f400f500a800f500a900a900f500f600f200f100f700f200f700f300f300f700f800f300f800f400f400f800f900f400f900f500f500f900fa00f500fa00f600f600fa00fb00f100fc00f700f700fc00fd00f700fd00f800f800fd00fe00f800fe00f900f900fe00ff00f900ff00fa00fa00ff000001fa000001fb00fb0000010101fc000201fd00fc000301020104010301fc00f1000401fc00f0000401f100f00005010401ef000501f000ef0006010501ee000601ef00ee0007010601ed000701ee00ed0008010701ec000801ed00ec0009010801ec000a010901eb000a01ec00eb000b010a01ea000b01eb00ea000c010b01e9000c01ea00e9000d010c01e8000d01e900e8000e010d01e7000e01e800e7000f010e01e6000f01e700e60010010f01e5001001e600e50011011001e4001101e500e40012011101e3001201e400e30013011201e2001301e300e20014011301e20015011401e1001501e200e10016011501e0001601e100e00017011601df001701e000df0018011701de001801df00de00dd001801dd0019011801dd001a011901dc001a01dd00dc001b011a01db001b01dc00db001c011b01da001c01db00da001d011c01d9001d01da00d9001e011d01d8001e01d900d8001f011e01d7001f01d800d70020011f01d70021012001d6002101d700d60022012101d5002201d600d50023012201d4002301d500d40024012301d3002401d400d30025012401d2002501d300d20026012501d1002601d200d10027012601d0002701d100d00028012701cf002801d000cf0029012801ce002901cf00ce002a012901cc002a01ce00cc002b012a01cd002b01cc00cd002c012b012c012d012b012c012e012d012b012d012f012b012f012a012a012f0130012a0130012901290130013101290131012801280131013201280132012701270132013301270133012601260133013401260134012501250134013501250135012401240135013601240136012301230136013701230137012201220137013801220138012101210138013901210139012001200139013a0120013a013b0120013b011f011f013b013c011f013c011e011e013c013d011e013d011d011d013d013e011d013e011c011c013e013f011c013f011b011b013f0140011b0140011a011a01400141011a0141011901190141014201190142014301180119014301180143011701170143014401170144011601160144014501160145011501150145014601150146011401140146014701140147014801140148011301130148014901130149011201120149014a0112014a01110111014a014b0111014b01100110014b014c0110014c010f010f014c014d010f014d010e010e014d014e010e014e010d010d014e014f010d014f010c010c014f0150010c0150010b010b01500151010b0151010a010a01510152010a0152010901090152015301090153015401090154010801080154015501080155010701070155015601070156010601060156015701060157010501050157015801050158010401040158010301510159015201520159015a0152015a01530153015a015b0153015b015c0153015c01540154015c015d0154015d01550155015d015e0155015e01560156015e015f0156015f01570157015f016001570160015801580160016101580161010301030161016201030162010201020162016301020163016401fd0002016401fd006401fe00fe0064016501fe006501ff00ff0065016601ff0066010001000166016701000167010101010167016801640163016901640169016501650169016a0165016a01660166016a016b0166016b01670167016b016c0167016c01680168016c016d0163016e01690169016e016f0169016f016a016a016f0170016a0170016b016b01700171016b0171016c016c01710172016c0172016d016d01720173016e0174016f016e0175017401760175016e01630176016e016201760163016201770176016101770162016101780177016001780161016001790178015f01790160015f017a0179015e017a015f015e017b017a015d017b015e015d017c017b015c017c015d015c017d017c015b017d015c015b017e017d015b017f017e015a017f015b015a0180017f01590180015a015901810180018201810159015101820159015001820151015001830182014f01830150014f01840183014e0184014f014e01850184014d0185014e014d01860185014c0186014d014c01870186014b0187014c014b01880187014a0188014b014a0189018801490189014a0149018a01890148018a01490148018b018a0147018b01480147018c018b0147018d018c0146018d01470146018e018d0145018e01460145018f018e0144018f014501440190018f014301900144014301420190014201910190014201920191014101920142014101930192014001930141014001940193013f01940140013f01950194013e0195013f013e01960195013d0196013e013d01970196013c0197013d013c01980197013b0198013c013b01990198013a0199013b013a019a0199013a019b019a0139019b013a0139019c019b0138019c01390138019d019c0137019d01380137019e019d0136019e01370136019f019e0135019f0136013501a0019f013401a00135013401a101a0013301a10134013301a201a1013201a20133013201a301a2013101a30132013101a401a3013001a40131013001a501a4012f01a50130012f01a601a5012d01a6012f012d01a701a6012e01a7012d012e01a801a701a801a901a701a801aa01a901a701a901ab01a701ab01a601a601ab01ac01a601ac01a501a501ac01ad01a501ad01a401a401ad01ae01a401ae01a301a301ae01af01a301af01a201a201af01b001a201b001a101a101b001b101a101b101a001a001b101b201a001b2019f019f01b201b3019f01b3019e019e01b301b4019e01b4019d019d01b401b5019d01b5019c019c01b501b6019c01b6019b019b01b601b7019b01b7019a019a01b701b8019a01b801b9019a01b90199019901b901ba019901ba0198019801ba01bb019801bb0197019701bb01bc019701bc0196019601bc01bd019601bd0195019501bd01be019501be0194019401be01bf019401bf0193019301bf01c0019301c00192019201c001c1019201c10191019101c101c2019101c201c30190019101c3019001c3018f018f01c301c4018f01c4018e018e01c401c5018e01c5018d018d01c501c6018d01c6018c018c01c601c7018c01c701c8018c01c8018b018b01c801c9018b01c9018a018a01c901ca018a01ca0189018901ca01cb018901cb0188018801cb01cc018801cc0187018701cc01cd018701cd0186018601cd01ce018601ce0185018501ce01cf018501cf0184018401cf01d0018401d00183018301d001d1018301d10182018201d1018101cb01d201cc01cb01d301d201cc01d201d401cc01d401cd01cd01d401d501cd01d501ce01ce01d501d601ce01d601cf01cf01d601d701cf01d701d001d001d701d801d001d801d101d101d801d901d101d90181018101d901da018101da0180018001da01db018001db017f017f01db01dc017f01dc017e017e01dc01dd017e01dd01de017e01de017d017d01de01df017d01df017c017c01df01e0017c01e0017b017b01e001e1017b01e1017a017a01e101e2017a01e20179017901e201e3017901e30178017801e301e4017801e40177017701e401e5017701e50176017601e5017501df01e601e001df01e701e601e001e601e801e001e801e101e101e801e901e101e901e201e201e901ea01e201ea01e301e301ea01eb01e301eb01e401e401eb01ec01e401ec01e501e501ec01ed01e501ed0175017501ed01ee017501ee0174017401ee01ef017401ef01f0016f017401f0016f01f00170017001f001f1017001f10171017101f101f2017101f20172017201f201f3017201f30173017301f301f401f001ef01f501f001f501f101f101f501f601f101f601f201f201f601f701f201f701f301f301f701f801f301f801f401f401f801f901ef01fa01f501f501fa01fb01f501fb01f601f601fb01fc01f601fc01f701f701fc01fd01f701fd01f801f801fd01fe01f801fe01f901f901fe01ff01fa010002fb01fa010102000202020102fa01ef010202fa01ee010202ef01ee0103020202ed010302ee01ed0104020302ec010402ed01ec0105020402eb010502ec01eb0106020502ea010602eb01ea0107020602e9010702ea01e90108020702e8010802e901e80109020802e6010902e801e6010a020902e7010a02e601e7010b020a020c020b02e701de010c02e701dd010c02de01dd010d020c02dd010e020d02dc010e02dd01dc010f020e02db010f02dc01db0110020f02da011002db01da0111021002d9011102da01d90112021102d8011202d901d80113021202d7011302d801d70114021302d6011402d701d60115021402d5011502d601d50116021502d4011602d501d40117021602d2011702d401d20118021702d3011802d201d301190218021a021902d301ca011a02d301c9011a02ca01c9011b021a02c8011b02c901c8011c021b02c7011c02c801c7011d021c02c7011e021d02c6011e02c701c6011f021e02c5011f02c601c50120021f02c4012002c501c40121022002c3012102c401c301c2012102c20122022102c20123022202c1012302c201c10124022302c0012402c101c00125022402bf012502c001bf0126022502be012602bf01be0127022602bd012702be01bd0128022702bc012802bd01bc0129022802bb012902bc01bb012a022902ba012a02bb01ba012b022a02b9012b02ba01b9012c022b02b8012c02b901b8012d022c02b8012e022d02b7012e02b801b7012f022e02b6012f02b701b60130022f02b5013002b601b50131023002b4013102b501b40132023102b3013202b401b30133023202b2013302b301b20134023302b1013402b201b10135023402b0013502b101b00136023502af013602b001af0137023602ae013702af01ae0138023702ad013802ae01ad0139023802ac013902ad01ac013a023902ab013a02ac01ab013b023a02a9013b02ab01a9013c023b02aa013c02a901aa013d023c023d023e023c023d023f023e023c023e0240023c0240023b023b02400241023b0241023a023a02410242023a0242023902390242024302390243023802380243024402380244023702370244024502370245023602360245024602360246023502350246024702350247023402340247024802340248023302330248024902330249023202320249024a0232024a02310231024a024b0231024b02300230024b024c0230024c022f022f024c024d022f024d022e022e024d024e022e024e022d022d024e024f022d024f0250022d0250022c022c02500251022c0251022b022b02510252022b0252022a022a02520253022a0253022902290253025402290254022802280254025502280255022702270255025602270256022602260256025702260257022502250257025802250258022402240258025902240259022302230259025a0223025a02220222025a025b0222025b025c02210222025c0221025c02200220025c025d0220025d021f021f025d025e021f025e021e021e025e025f021e025f021d021d025f0260021d02600261021d0261021c021c02610262021c0262021b021b02620263021b0263021a021a02630219025d0264025e025d02650264025c0265025d025c025b0265025f02660260025f02670266025e02640267025e0267025f02610268026202620268026902620269026302630269026a0263026a02190219026a026b0219026b02180218026b026c0218026c02170217026c026d0217026d02160216026d026e0216026e02150215026e026f0215026f02140214026f027002140270021302130270027102130271021202120271027202120272021102110272027302110273021002100273027402100274020f020f02740275020f0275020e020e02750276020e0276020d020d02760277020d02770278020d0278020c020c0278020b02710279027202720279027a0272027a02730273027a027b0273027b02740274027b027c0274027c02750275027c027d0275027d02760276027d027e0276027e02770277027e027f0277027f028002770280027802780280028102780281020b020b02810282020b0282020a020a02820283020a0283020902090283028402090284020802080284028502080285020702070285028602070286020602060286028702060287020502050287028802050288020402040288028902040289020302030289028a0203028a02020202028a02010284028b02850284028c028b0285028b028d0285028d02860286028d028e0286028e02870287028e028f0287028f02880288028f029002880290028902890290029102890291028a028a02910292028a0292020102010292029302010293020002000293029402000294029502fb0100029502fb019502fc01fc0195029602fc019602fd01fd0196029702fd019702fe01fe0197029802fe019802ff01ff0198029902950294029a0295029a02960296029a029b0296029b02970297029b029c0297029c02980298029c029d0298029d02990299029d029e0294029f029a029a029f02a0029a02a0029b029b02a002a1029b02a1029c029c02a102a2029c02a2029d029d02a202a3029d02a3029e029e02a302a4029f02a502a0029f02a602a502a702a6029f029402a7029f029302a70294029302a802a7029202a80293029202a902a8029102a90292029102aa02a9029002aa0291029002ab02aa028f02ab0290028f02ac02ab028e02ac028f028e02ad02ac028d02ad028e028d02ae02ad028b02ae028d028b02af02ae028c02af028b028c02b002af02b102b0028c028302b1028c028202b10283028202b202b1028102b20282028102b302b2028002b30281028002b402b3027f02b40280027f02b502b4027f02b602b5027e02b6027f027e02b702b6027d02b7027e027d02b802b7027c02b8027d027c02b902b8027b02b9027c027b02ba02b9027a02ba027b027a02bb02ba027902bb027a027902bc02bb02bd02bc0279027102bd0279027002bd0271027002be02bd026f02be0270026f02bf02be026e02bf026f026e02c002bf026d02c0026e026d02c102c0026c02c1026d026c02c202c1026b02c2026c026b02c302c2026a02c3026b026a02c402c3026902c4026a026902c502c4026802c50269026802c602c502c702c60268026102c70268026002c70261026002c802c70260026602c8026602c902c8026602ca02c9026702ca0266026702cb02ca026402cb0267026402cc02cb026502cc0264026502cd02cc025b02cd0265025b02ce02cd025a02ce025b025a02cf02ce025902cf025a025902d002cf025802d00259025802d102d0025702d10258025702d202d1025602d20257025602d302d2025502d30256025502d402d3025402d40255025402d502d4025302d50254025302d602d5025202d60253025202d702d6025102d70252025102d802d7025002d80251025002d902d8024f02d90250024f02da02d9024f02db02da024e02db024f024e02dc02db024d02dc024e024d02dd02dc024c02dd024d024c02de02dd024b02de024c024b02df02de024a02df024b024a02e002df024902e0024a024902e102e0024802e10249024802e202e1024702e20248024702e302e2024602e30247024602e402e3024502e40246024502e502e4024402e50245024402e602e5024302e60244024302e702e6024202e70243024202e802e7024102e80242024102e902e8024002e90241024002ea02e9023e02ea0240023e02eb02ea023f02eb023e023f02ec02eb02ec02ed02eb02ec02ee02ed02eb02ed02ef02eb02ef02ea02ea02ef02f002ea02f002e902e902f002f102e902f102e802e802f102f202e802f202e702e702f202f302e702f302e602e602f302f402e602f402e502e502f402f502e502f502e402e402f502f602e402f602e302e302f602f702e302f702e202e202f702f802e202f802e102e102f802f902e102f902e002e002f902fa02e002fa02df02df02fa02fb02df02fb02de02de02fb02fc02de02fc02dd02dd02fc02fd02dd02fd02dc02dc02fd02fe02dc02fe02db02db02fe02ff02db02ff02da02da02ff020003da0200030103da020103d902d90201030203d9020203d802d80202030303d8020303d702d70203030403d7020403d602d60204030503d6020503d502d50205030603d5020603d402d40206030703d4020703d302d30207030803d3020803d202d20208030903d2020903d102d10209030a03d1020a03d002d0020a030b03d0020b03cf02cf020b030c03cf020c03ce02ce020c030d03ce020d03cd02cd020d030e03cd020e03cc02cc020e030f03cc020f03cb02cb020f031003cb021003ca02ca0210031103ca021103c902c90211031203c90212031303c802c9021303c80213031403c8021403c702c7021403c60213031203150313031503160313031603140314031603170314031703c602c60217031803c6021803c502c50218031903c5021903c402c40219031a03c4021a03c302c3021a031b03c3021b03c202c2021b031c03c2021c03c102c1021c031d03c1021d03c002c0021d031e03c0021e03bf02bf021e031f03bf021f03be02be021f032003be022003bd02bd022003bc021a0321031b031a03220321031b03210323031b0323031c031c03230324031c0324031d031d03240325031d0325031e031e03250326031e0326031f031f03260327031f032703200320032703280320032803bc02bc0228032903bc022903bb02bb0229032a03bb022a03ba02ba022a032b03ba022b03b902b9022b032c03b9022c03b802b8022c032d03b8022d03b702b7022d032e03b7022e03b602b6022e032f03b6022f03b502b5022f033003b50230033103b5023103b402b40231033203b4023203b302b30232033303b3023303b202b20233033403b2023403b102b1023403b0022d0335032e032e03350336032e0336032f032f03360337032f0337033003300337033803300338033903300339033103310339033a0331033a03320332033a033b0332033b03330333033b033c0333033c03340334033c033d0334033d03b002b0023d033e03b0023e03af02af023e033f03af023f03ae02ae023f034003ae024003ad02ad0240034103ad024103ac02ac0241034203ac024203ab02ab0242034303ab024303aa02aa0243034403aa024403a902a90244034503a9024503a802a80245034603a8024603a702a7024603a602400347034103400348034703410347034903410349034203420349034a0342034a03430343034a034b0343034b03440344034b034c0344034c03450345034c034d0345034d03460346034d034e0346034e03a602a6024e034f03a6024f03a502a5024f035003a50250035103a002a5025103a0025103a102a10251035203a1025203a202a20252035303a2025303a302a30253035403a3025403a402a40254035503510350035603510356035203520356035703520357035303530357035803530358035403540358035903540359035503550359035a0350035b03560356035b035c0356035c03570357035c035d0357035d03580358035d035e0358035e03590359035e035f0359035f035a035a035f0360035b0361035c035b0362036103630362035b03500363035b034f03630350034f03640363034e0364034f034e03650364034d0365034e034d03660365034c0366034d034c03670366034b0367034c034b03680367034a0368034b034a0369036803490369034a0349036a03690347036a03490347036b036a0348036b03470348036c036b036d036c0348033f036d0348033e036d033f033e036e036d033d036e033e033d036f036e033c036f033d033c0370036f033b0370033c033b03710370033a0371033b033a0372037103390372033a033903730372033803730339033803740373033803750374033703750338033703760375033603760337033603770376033503770336033503780377037903780335032d03790335032c0379032d032c037a0379032b037a032c032b037b037a032a037b032b032a037c037b0329037c032a0329037d037c0328037d03290328037e037d0327037e03280327037f037e0326037f032703260380037f0325038003260325038103800324038103250324038203810323038203240323038303820321038303230321038403830322038403210322038503840386038503220319038603220318038603190318038703860317038703180317038803870316038803170316038903880315038903160315038a03890315038b038a0312038b03150312038c038b0311038c03120311038d038c0310038d03110310038e038d030f038e0310030f038f038e030e038f030f030e0390038f030d0390030e030d03910390030c0391030d030c03920391030b0392030c030b03930392030a0393030b030a0394039303090394030a0309039503940308039503090308039603950307039603080307039703960306039703070306039803970305039803060305039903980304039903050304039a03990303039a03040303039b039a0302039b03030302039c039b0301039c03020301039d039c0300039d03010300039e039d0300039f039e03ff029f030003ff02a0039f03fe02a003ff02fe02a103a003fd02a103fe02fd02a203a103fc02a203fd02fc02a303a203fb02a303fc02fb02a403a303fa02a403fb02fa02a503a403f902a503fa02f902a603a503f802a603f902f802a703a603f702a703f802f702a803a703f602a803f702f602a903a803f502a903f602f502aa03a903f402aa03f502f402ab03aa03f302ab03f402f302ac03ab03f202ac03f302f202ad03ac03f102ad03f202f102ae03ad03f002ae03f102f002af03ae03ef02af03f002ef02b003af03ed02b003ef02ed02b103b003ee02b103ed02ee02b203b103b203b303b103b203b403b303b103b303b503b103b503b003b003b503b603b003b603af03af03b603b703af03b703ae03ae03b703b803ae03b803ad03ad03b803b903ad03b903ac03ac03b903ba03ac03ba03ab03ab03ba03bb03ab03bb03aa03aa03bb03bc03aa03bc03a903a903bc03bd03a903bd03a803a803bd03be03a803be03a703a703be03bf03a703bf03a603a603bf03c003a603c003a503a503c003c103a503c103a403a403c103c203a403c203a303a303c203c303a303c303a203a203c303c403a203c403a103a103c403c503a103c503a003a003c503c603a003c6039f039f03c603c7039f03c7039e039e03c703c8039e03c803c9039e03c9039d039d03c903ca039d03ca039c039c03ca03cb039c03cb039b039b03cb03cc039b03cc039a039a03cc03cd039a03cd0399039903cd03ce039903ce0398039803ce03cf039803cf0397039703cf03d0039703d00396039603d003d1039603d10395039503d103d2039503d20394039403d203d3039403d30393039303d303d4039303d40392039203d403d5039203d50391039103d503d6039103d60390039003d603d7039003d7038f038f03d703d8038f03d8038e038e03d803d9038e03d9038d038d03d903da038d03da038c038c03da03db038c03db038b038b03db03dc038b03dc038a038a03dc03dd038a03dd03de038a03de0389038903de03df038903df0388038803df03e0038803e00387038703e003e1038703e10386038603e1038503da03e203db03db03e203e303db03e303dc03dc03e303e403dc03e403dd03dd03e403e503dd03e503e603dd03e603de03de03e603e703de03e703df03df03e703e803df03e803e003e003e803e903e003e903e103e103e903ea03e103ea0385038503ea03eb038503eb0384038403eb03ec038403ec0383038303ec03ed038303ed0382038203ed03ee038203ee0381038103ee03ef038103ef0380038003ef03f0038003f0037f037f03f003f1037f03f1037e037e03f103f2037e03f2037d037d03f203f3037d03f3037c037c03f303f4037c03f4037b037b03f403f5037b03f5037a037a03f503f6037a03f60379037903f6037803f003f703f103f003f803f703f103f703f903f103f903f203f203f903fa03f203fa03f303f303fa03fb03f303fb03f403f403fb03fc03f403fc03f503f503fc03fd03f503fd03f603f603fd03fe03f603fe0378037803fe03ff037803ff0377037703ff030004770300047603760300040104760301047503750301040204750302047403740302040304740303040404740304047303730304040504730305047203720305040604720306047103710306040704710307047003700307040804700308046f036f03080409046f0309046e036e0309040a046e030a046d036d030a046c0303040b04040404040b040c0404040c04050405040c040d0405040d04060406040d040e0406040e04070407040e040f0407040f04080408040f041004080410040904090410041104090411040a040a04110412040a0412046c036c03120413040b0414040c040c04140415040c0415040d040d04150416040d0416040e040e04160417040e0417040f040f04170418040f0418041004100418041904100419041104110419041a0411041a04120412041a041b0412041b04130413041b041c0414041d04150415041d041e0415041e04160416041e041f0416041f04170417041f042004170420041804180420042104180421041904190421042204190422041a041a04220423041a0423041b041b04230424041b0424041c041c04240425041d0426041e041e04260427041e0427041f041f04270428041f0428042004200428042904200429042104210429042a0421042a04220422042a042b0422042b04230423042b042c0423042c04240424042c042d0424042d04250425042d042e0426042f04270427042f043004270430042804280430043104280431042904290431043204290432042a042a04320433042a0433042b042b04330434042b0434042c042c04340435042c0435042d042d04350436042d0436042e042e04360437042f0438043004300438043904300439043104310439043a0431043a04320432043a043b0432043b04330433043b043c0433043c04340434043c043d0434043d04350435043d043e0435043e04360436043e043f0436043f04370437043f044004380441043904390441044204390442043a043a04420443043a0443043b043b04430444043b0444043c043c04440445043c0445043d043d04450446043d0446043e043e04460447043e0447043f043f04470448043f044804400440044804490441044a04420442044a044b0442044b04430443044b044c0443044c04440444044c044d0444044d04450445044d044e0445044e04460446044e044f0446044f04470447044f0450044704500448044804500451044804510449044904510452044a0453044b044b04530454044b0454044c044c04540455044c0455044d044d04550456044d0456044e044e04560457044e0457044f044f04570458044f0458045004500458045904500459045104510459045a0451045a04520452045a045b0453045c0454045c045d04540454045d0455045d045e04550455045e0456045e045f04560456045f0457045f0460045704570460045804600461045804580461045904610462045904590462045a04620463045a045a0463045b04630464045b045b046404650466045b04650452045b0466046704520466044904520467046804490467044004490468046904400468043704400469046a04370469042e0437046a046b042e046a0425042e046b046c0425046b041c0425046c046d041c046c0413041c046d046b0313046d046c0313046b036b036d046a036a036d046e046d046c046e046a036e04690369036e046f0469036f04680368036f0470046803700467036703700471046703710466036603710472046603720465036503720473046503730464036403730474046403740463036303740462036e0475046f046e046c0475046f04750476046f0476047004700476047704700477047104710477047804710478047204720478047904720479047304730479047a0473047a04740474047a047b0474047b04620362037b047c0462037c04610361037c047d0461037d047e045c0361037e045c037e045d035d037e047f045d037f045e035e037f0480045e0380045f035f03800481045f03810460036003810482047e047d0483047e0483047f047f04830484047f04840480048004840485048004850481048104850486048104860482048204860487047d0488048304830488048904830489048404840489048a0484048a04850485048a048b0485048b04860486048b048c0486048c04870487048c048d0488048e04890488048f048e0490048f0488047d04900488047c0490047d047c04910490047b0491047c047b04920491047a0492047b047a0493049204790493047a0479049404930478049404790478049504940477049504780477049604950476049604770476049704960475049704760475046b0497046c046b0475046b046a04970497046a049804970498049604960498049904960499049504950499049a0495049a04940494049a049b0494049b04930493049b049c0493049c04920492049c049d0492049d04910491049d049e0491049e04900490049e048f046a0469049804980469049f0498049f04990499049f04a0049904a0049a049a04a004a1049a04a1049b049b04a104a2049b04a2049c049c04a204a3049c04a3049d049d04a304a4049d04a4049e049e04a404a5049e04a5048f048f04a504a6048f04a6048e048e04a604a7048e04a704a80489048e04a8048904a8048a048a04a804a9048a04a9048b048b04a904aa048b04aa048c048c04aa04ab048c04ab048d048d04ab04ac04a804a704ad04a804ad04a904a904ad04ae04a904ae04aa04aa04ae04af04aa04af04ab04ab04af04b004ab04b004ac04ac04b004b104a704b204ad04ad04b204b304ad04b304ae04ae04b304b404ae04b404af04af04b404b504af04b504b004b004b504b604b004b604b104b104b604b704b204b804b304b204b904b804ba04b904b204a704ba04b204a604ba04a704a604bb04ba04a504bb04a604a504bc04bb04a404bc04a504a404bd04bc04a304bd04a404a304be04bd04a204be04a304a204bf04be04a104bf04a204a104c004bf04a004c004a104a004c104c0049f04c104a0049f046804c104690468049f0468046704c104c1046704c204c104c204c004c004c204c304c004c304bf04bf04c304c404bf04c404be04be04c404c504be04c504bd04bd04c504c604bd04c604bc04bc04c604c704bc04c704bb04bb04c704c804bb04c804ba04ba04c804b90467046604c204c2046604c904c204c904c304c304c904ca04c304ca04c404c404ca04cb04c404cb04c504c504cb04cc04c504cc04c604c604cc04cd04c604cd04c704c704cd04ce04c704ce04c804c804ce04cf04c804cf04b904b904cf04d004b904d004b804b804d004d104b804d104d204b304b804d204b304d204b404b404d204d304b404d304b504b504d304d404b504d404b604b604d404d504b604d504b704b704d504d604d204d104d704d204d704d304d304d704d804d304d804d404d404d804d904d404d904d504d504d904da04d504da04d604d604da04db04d104dc04d704d704dc04dd04d704dd04d804d804dd04de04d804de04d904d904de04df04d904df04da04da04df04e004da04e004db04db04e004e104dc04e204dd04e304e204dc04e404e304dc04d104e404dc04d004e404d104d004e504e404cf04e504d004cf04e604e504ce04e604cf04ce04e704e604cd04e704ce04cd04e804e704cc04e804cd04cc04e904e804cb04e904cc04cb04ea04e904ca04ea04cb04ca04eb04ea04c904eb04ca04c9046504eb0466046504c9046504ec04eb046404ec046504ec04ed04eb04eb04ed04ea04ed04ee04ea04ea04ee04e904ee04ef04e904e904ef04e804ef04f004e804e804f004e704f004f104e704e704f104e604f104f204e604e604f204e504f204f304e504e504f304e404f304e304e4046404f404ec04f504f40464046304f5046404f604f50463046204f6046304f704f60462046104f7046204f804f70461046004f8046104f904f80460045f04f9046004fa04f9045f045e04fa045f04fb04fa045e045d04fb045e04fc04fb045d045c04fc045d04fd04fc045c04fe04fd045c04fe045c045304ff04fe0453044a04ff0453040005ff044a04410400054a040105000541043804010541040205010538042f0402053804030502052f04260403052f040405030526041d0404052604050504051d04140405051d040605050514040b0406051404070506050b04030407050b0403040805070502040805030402040905080501040905020401040a05090500040a05010400040b050a05ff030b050004ff030c050b05fe030c05ff03fe030d050c05fd030d05fe03fd030e050d05fc030e05fd03fc030f050e05fb030f05fc03fb0310050f05fa031005fb03fa0311051005f9031105fa03f90312051105f7031205f903f70313051205f8031305f703f8031405130515051405f803ef031505f803ee031505ef03ee0316051505ed031605ee03ed0317051605ec031705ed03ec0318051705eb031805ec03eb0319051805ea031905eb03ea031a051905e9031a05ea03e9031b051a05e8031b05e903e8031c051b05e7031c05e803e7031d051c05e6031d05e703e6031e051d05e5031e05e603e5031f051e05e50320051f05e4032005e503e40321052005e3032105e403e30322052105e2032205e303e2032305220524052305e203da032405e203d9032405da03d90325052405d8032505d903d80326052505d7032605d803d70327052605d6032705d703d60328052705d5032805d603d50329052805d4032905d503d4032a052905d3032a05d403d3032b052a05d2032b05d303d2032c052b05d1032c05d203d1032d052c05d0032d05d103d0032e052d05cf032e05d003cf032f052e05ce032f05cf03ce0330052f05cd033005ce03cd0331053005cc033105cd03cc0332053105cb033205cc03cb0333053205ca033305cb03ca0334053305c9033405ca03c90335053405c8033505c903c80336053505c80337053605c7033705c803c70338053705c6033805c703c60339053805c5033905c603c5033a053905c4033a05c503c4033b053a05c3033b05c403c3033c053b05c2033c05c303c2033d053c05c1033d05c203c1033e053d05c0033e05c103c0033f053e05bf033f05c003bf0340053f05be034005bf03be0341054005bd034105be03bd0342054105bc034205bd03bc0343054205bb034305bc03bb0344054305ba034405bb03ba0345054405b9034505ba03b90346054505b8034605b903b80347054605b7034705b803b70348054705b6034805b703b60349054805b5034905b603b5034a054905b3034a05b503b3034b054a05b4034b05b303b4034c054b054c054d054b054c054e054d054b054d054f054b054f054a054a054f0550054a0550054905490550055105490551054805480551055205480552054705470552055305470553054605460553055405460554054505450554055505450555054405440555055605440556054305430556055705430557054205420557055805420558054105410558055905410559054005400559055a0540055a053f053f055a055b053f055b053e053e055b055c053e055c053d053d055c055d053d055d053c053c055d055e053c055e053b053b055e055f053b055f053a053a055f0560053a0560053905390560056105390561053805380561056205380562053705370562056305370563053605360563056405360564056505360565053505350565056605350566053405340566056705340567053305330567056805330568053205320568056905320569053105310569056a0531056a05300530056a056b0530056b052f052f056b056c052f056c052e052e056c056d052e056d052d052d056d056e052d056e052c052c056e056f052c056f052b052b056f0570052b0570052a052a05700571052a0571052905290571057205290572052805280572057305280573052705270573057405270574052605260574057505260575052505250575057605250576052405240576052305700577057105700578057705710577057905710579057205720579057a0572057a05730573057a057b0573057b05740574057b057c0574057c05750575057c057d0575057d05760576057d057e0576057e05230523057e057f0523057f05220522057f058005220580052105210580058105210581052005200581058205200582051f051f05820583051f05830584051f0584051e051e05840585051e0585051d051d05850586051d0586051c051c05860587051c0587051b051b05870588051b0588051a051a05880589051a0589051905190589058a0519058a05180518058a058b0518058b05170517058b058c0517058c05160516058c058d0516058d05150515058d05140587058e05880587058f058e0588058e059005880590058905890590059105890591058a058a05910592058a0592058b058b05920593058b0593058c058c05930594058c0594058d058d05940595058d0595051405140595059605140596051305130596059705130597051205120597059805120598051105110598059905110599051005100599059a0510059a050f050f059a059b050f059b050e050e059b059c050e059c050d050d059c059d050d059d050c050c059d059e050c059e050b050b059e059f050b059f050a050a059f05a0050a05a00509050905a005a1050905a10508050805a105a2050805a20507050705a205a3050705a30506059c05a4059d059d05a405a5059d05a5059e059e05a505a6059e05a6059f059f05a605a7059f05a705a005a005a705a805a005a805a105a105a805a905a105a905a205a205a905aa05a205aa05a305a305aa05ab05a305ab05ac05a305ac0506050605ac050505a405ad05a505a405ae05ad05af05ae05a4059c05af05a4059b05af059c059b05b005af059a05b0059b059a05b105b0059905b1059a059905b205b1059805b20599059805b305b2059705b30598059705b405b3059605b40597059605b505b4059505b50596059505b605b5059405b60595059405b705b6059305b70594059305b805b7059205b80593059205b905b8059105b90592059105ba05b9059005ba0591059005bb05ba058e05bb0590058e05bc05bb058f05bc058e058f05bd05bc05be05bd058f058605be058f058505be0586058505bf05be058405bf0585058405c005bf058305c00584058305c105c0058305c205c1058205c20583058205c305c2058105c30582058105c405c3058005c40581058005c505c4057f05c50580057f05c605c5057e05c6057f057e05c705c6057d05c7057e057d05c805c7057c05c8057d057c05c905c8057b05c9057c057b05ca05c9057a05ca057b057a05cb05ca057905cb057a057905cc05cb057705cc0579057705cd05cc057805cd0577057805ce05cd05cf05ce0578056f05cf0578056e05cf056f056e05d005cf056d05d0056e056d05d105d0056c05d1056d056c05d205d1056b05d2056c056b05d305d2056a05d3056b056a05d405d3056905d4056a056905d505d4056805d50569056805d605d5056705d60568056705d705d6056605d70567056605d805d7056505d80566056505d905d8056405d90565056405da05d9056405db05da056305db0564056305dc05db056205dc0563056205dd05dc056105dd0562056105de05dd056005de0561056005df05de055f05df0560055f05e005df055e05e0055f055e05e105e0055d05e1055e055d05e205e1055c05e2055d055c05e305e2055b05e3055c055b05e405e3055a05e4055b055a05e505e4055905e5055a055905e605e5055805e60559055805e705e6055705e70558055705e805e7055605e80557055605e905e8055505e90556055505ea05e9055405ea0555055405eb05ea055305eb0554055305ec05eb055205ec0553055205ed05ec055105ed0552055105ee05ed055005ee0551055005ef05ee054f05ef0550054f05f005ef054d05f0054f054d05f105f0054e05f1054d054e05f205f105f205f305f105f205f405f305f105f305f505f105f505f005f005f505f605f005f605ef05ef05f605f705ef05f705ee05ee05f705f805ee05f805ed05ed05f805f905ed05f905ec05ec05f905fa05ec05fa05eb05eb05fa05fb05eb05fb05ea05ea05fb05fc05ea05fc05e905e905fc05fd05e905fd05e805e805fd05fe05e805fe05e705e705fe05ff05e705ff05e605e605ff050006e6050006e505e50500060106e5050106e405e40501060206e4050206e305e30502060306e3050306e205e20503060406e2050406e105e10504060506e1050506e005e00505060606e0050606df05df0506060706df050706de05de0507060806de050806dd05dd0508060906dd050906dc05dc0509060a06dc050a06db05db050a060b06db050b06da05da050b060c06da050c060d06da050d06d905d9050d060e06d9050e06d805d8050e060f06d8050f06d705d7050f061006d7051006d605d60510061106d6051106d505d50511061206d5051206d405d40512061306d4051306d305d30513061406d3051406d205d20514061506d2051506d105d10515061606d1051606d005d00516061706d0051706cf05cf051706ce05110618061206110619061806120618061a0612061a06130613061a061b0613061b06140614061b061c0614061c06150615061c061d0615061d06160616061d061e0616061e06170617061e061f0617061f06ce05ce051f062006ce052006cd05cd0520062106cd052106cc05cc0521062206cc052206cb05cb0522062306cb052306ca05ca0523062406ca052406c905c90524062506c9052506c805c80525062606c8052606c705c70526062706c7052706c605c60527062806c6052806c505c50528062906c5052906c405c40529062a06c4052a06c305c3052a062b06c3052b06c205c2052b062c06c2052c06c105c1052c062d06c1052d062e06c1052e06c005c0052e062f06c0052f06bf05bf052f063006bf053006be05be053006bd05290631062a062a06310632062a0632062b062b06320633062b0633062c062c06330634062c0634062d062d06340635062d06350636062d0636062e062e06360637062e0637062f062f06370638062f063806300630063806390630063906bd05bd0539063a06bd053a06bc05bc053a063b06bc053b06bb05bb053b063c06bb053c06ba05ba053c063d06ba053d06b905b9053d063e06b9053e06b805b8053e063f06b8053f06b705b7053f064006b7054006b605b60540064106b6054106b505b50541064206b5054206b405b40542064306b4054306b305b30543064406b3054406b205b20544064506b2054506b105b10545064606b1054606b005b00546064706b0054706af05af054706ae05410648064206410649064806420648064a0642064a06430643064a064b0643064b06440644064b064c0644064c06450645064c064d0645064d06460646064d064e0646064e06470647064e064f0647064f06ae05ae054f065006ae055006ad05ad0550065106ad0551065206a505ad055206a5055206a605a60552065306a6055306a705a70553065406a7055406a805a80554065506a8055506a905a90555065606a9055606aa05aa0556065706aa055706ab05ab0557065806ab0558065906ab055906ac05ac0559065a06ac055a06050505055a06040553065b06540654065b065c0654065c06550655065c065d0655065d06560656065d065e0656065e06570657065e065f0657065f06580658065f066006580660066106580661065906590661066206590662065a065a06620663065a06630604050405630603055b0664065c065b0665066406660665065b06530666065b065206660653065206510666065106670666066606670665065106680667065006680651065006690668064f06690650064f066a0669064e066a064f064e066b066a064d066b064e064d066c066b064c066c064d064c066d066c064b066d064c064b066e066d064a066e064b064a066f066e0648066f064a06480670066f064906700648064906710670067206710649064006720649063f06720640063f06730672063e0673063f063e06740673063d0674063e063d06750674063c0675063d063c06760675063b0676063c063b06770676063a0677063b063a0678067706390678063a0639067906780638067906390638067a06790637067a06380637067b067a0636067b06370636067c067b0635067c06360635067d067c0635067e067d0634067e06350634067f067e0633067f063406330680067f0632068006330632068106800631068106320631068206810683068206310629068306310628068306290628068406830627068406280627068506840626068506270626068606850625068606260625068706860624068706250624068806870623068806240623068906880622068906230622068a06890621068a06220621068b068a0620068b06210620068c068b061f068c0620061f068d068c061e068d061f061e068e068d061d068e061e061d068f068e061c068f061d061c0690068f061b0690061c061b06910690061a0691061b061a0692069106180692061a061806930692061906930618061906940693069506940619061006950619060f06950610060f06960695060e0696060f060e06970696060d0697060e060d06980697060c0698060d060c06990698060c069a0699060b069a060c060b069b069a060a069b060b060a069c069b0609069c060a0609069d069c0608069d06090608069e069d0607069e06080607069f069e0606069f0607060606a0069f060506a00606060506a106a0060406a10605060406a206a1060306a20604060306a306a2060206a30603060206a406a3060106a40602060106a506a4060006a50601060006a606a506ff05a6060006ff05a706a606fe05a706ff05fe05a806a706fd05a806fe05fd05a906a806fc05a906fd05fc05aa06a906fb05aa06fc05fb05ab06aa06fa05ab06fb05fa05ac06ab06f905ac06fa05f905ad06ac06f805ad06f905f805ae06ad06f705ae06f805f705af06ae06f605af06f705f605b006af06f505b006f605f505b106b006f305b106f505f305b206b106f405b206f305f405b306b206b306b406b206b306b506b406b206b406b606b206b606b106b106b606b706b106b706b006b006b706b806b006b806af06af06b806b906af06b906ae06ae06b906ba06ae06ba06ad06ad06ba06bb06ad06bb06ac06ac06bb06bc06ac06bc06ab06ab06bc06bd06ab06bd06aa06aa06bd06be06aa06be06a906a906be06bf06a906bf06a806a806bf06c006a806c006a706a706c006c106a706c106a606a606c106c206a606c206a506a506c206c306a506c306a406a406c306c406a406c406a306a306c406c506a306c506a206a206c506c606a206c606a106a106c606c706a106c706a006a006c706c806a006c8069f069f06c806c9069f06c9069e069e06c906ca069e06ca069d069d06ca06cb069d06cb069c069c06cb06cc069c06cc069b069b06cc06cd069b06cd069a069a06cd06ce069a06ce0699069906ce06cf069906cf06d0069906d00698069806d006d1069806d10697069706d106d2069706d20696069606d206d3069606d30695069506d3069406cc06d406cd06cd06d406d506cd06d506ce06ce06d506d606ce06d606cf06cf06d606d706cf06d706d806cf06d806d006d006d806d906d006d906d106d106d906da06d106da06d206d206da06db06d206db06d306d306db06dc06d306dc0694069406dc06dd069406dd0693069306dd06de069306de0692069206de06df069206df0691069106df06e0069106e00690069006e006e1069006e1068f068f06e106e2068f06e2068e068e06e206e3068e06e3068d068d06e306e4068d06e4068c068c06e406e5068c06e5068b068b06e506e6068b06e6068a068a06e606e7068a06e70689068906e706e8068906e80688068806e806e9068806e90687068706e906ea068706ea0686068606ea06eb068606eb0685068506eb06ec068506ec0684068406ec06ed068406ed0683068306ed068206e706ee06e806e706ef06ee06e806ee06f006e806f006e906e906f006f106e906f106ea06ea06f106f206ea06f206eb06eb06f206f306eb06f306ec06ec06f306f406ec06f406ed06ed06f406f506ed06f50682068206f506f6068206f60681068106f606f7068106f70680068006f706f8068006f8067f067f06f806f9067f06f9067e067e06f906fa067e06fa067d067d06fa06fb067d06fb06fc067d06fc067c067c06fc06fd067c06fd067b067b06fd06fe067b06fe067a067a06fe06ff067a06ff0679067906ff060007790600077806780600070107780601077706770601070207770602077606760602070307760603077506750603070407750604077406740604070507740605077306730605070607730606077206720606077106000707070107000708070707010707070907010709070207020709070a0702070a07030703070a070b0703070b07040704070b070c0704070c07050705070c070d0705070d07060706070d070e0706070e07710671060e070f0771060f07700670060f071007700610076f066f06100711076f0611076e066e06110712076e0612076d066d06120713076d0613076c066c06130714076c0614076b066b06140715076b0615076a066a06150716076a0616076906690616071707690617076806680617071807680618076706670618071907670619076506650619071a0765061a07640664061a071b0764061b071c075c0664061c075c061c075d065d061c071d075d061d075e065e061d071e075e061e075f065f061e071f075f061f07600660061f0720076006200721076006210761066106210722076106220762066206220723076206230763066306230724076306240703050305240702051d0725071e071e07250726071e0726071f071f07260727071f0727072007200727072807200728072907200729072107210729072a0721072a07220722072a072b0722072b07230723072b072c0723072c07240724072c072d0724072d07020502052d07010525072e07260725072f072e0730072f0725071d07300725071c0730071d071c071b0730071b0731073007300731072f071b07320731071a0732071b071a0733073207190733071a0719073407330718073407190718073507340717073507180717073607350716073607170716073707360715073707160715073807370714073807150714073907380713073907140713073a07390712073a07130712073b073a0711073b07120711073c073b0710073c07110710073d073c070f073d0710070f073e073d070e073e070f070e073f073e070d073f070e070d0740073f070c0740070d070c07410740070b0741070c070b07420741070a0742070b070a0743074207090743070a07090744074307070744070907070745074407080745070707080746074507470746070807ff0647070807fe064707ff06fe0648074707fd064807fe06fd0649074807fc064907fd06fc064a074907fb064a07fc06fb064b074a07fb064c074b07fa064c07fb06fa064d074c07f9064d07fa06f9064e074d07f8064e07f906f8064f074e07f7064f07f806f70650074f07f6065007f706f60651075007f5065107f606f50652075107f4065207f506f40653075207f3065307f406f30654075307f2065407f306f20655075407f1065507f206f10656075507f0065607f106f00657075607ee065707f006ee0658075707ef065807ee06ef06590758075a075907ef06e6065a07ef06e5065a07e606e5065b075a07e4065b07e506e4065c075b07e3065c07e406e3065d075c07e2065d07e306e2065e075d07e1065e07e206e1065f075e07e0065f07e106e00660075f07df066007e006df0661076007de066107df06de0662076107dd066207de06dd0663076207dc066307dd06dc0664076307db066407dc06db0665076407da066507db06da0666076507d9066607da06d90667076607d8066707d906d80668076707d7066807d806d70669076807d7066a076907d6066a07d706d6066b076a07d5066b07d606d5066c076b07d4066c07d506d4066d076c076e076d07d406cc066e07d406cb066e07cc06cb066f076e07ca066f07cb06ca0670076f07c9067007ca06c90671077007c8067107c906c80672077107c7067207c806c70673077207c6067307c706c60674077307c5067407c606c50675077407c4067507c506c40676077507c3067607c406c30677077607c2067707c306c20678077707c1067807c206c10679077807c0067907c106c0067a077907bf067a07c006bf067b077a07be067b07bf06be067c077b07bd067c07be06bd067d077c07bc067d07bd06bc067e077d07bb067e07bc06bb067f077e07ba067f07bb06ba0680077f07b9068007ba06b90681078007b8068107b906b80682078107b7068207b806b70683078207b6068307b706b60684078307b4068407b606b40685078407b5068507b406b50686078507860787078507860788078707850787078907850789078407840789078a0784078a07830783078a078b0783078b07820782078b078c0782078c07810781078c078d0781078d07800780078d078e0780078e077f077f078e078f077f078f077e077e078f0790077e0790077d077d07900791077d0791077c077c07910792077c0792077b077b07920793077b0793077a077a07930794077a0794077907790794079507790795077807780795079607780796077707770796079707770797077607760797079807760798077507750798079907750799077407740799079a0774079a07730773079a079b0773079b07720772079b079c0772079c07710771079c079d0771079d07700770079d079e0770079e076f076f079e079f076f079f076e076e079f076d079907a0079a079907a107a0079a07a007a2079a07a2079b079b07a207a3079b07a3079c079c07a307a4079c07a4079d079d07a407a5079d07a5079e079e07a507a6079e07a6079f079f07a607a7079f07a7076d076d07a707a8076d07a8076c076c07a807a9076c07a9076b076b07a907aa076b07aa076a076a07aa07ab076a07ab0769076907ab07ac076907ac07ad076907ad0768076807ad07ae076807ae0767076707ae07af076707af0766076607af07b0076607b00765076507b007b1076507b10764076407b107b2076407b20763076307b207b3076307b30762076207b307b4076207b40761076107b407b5076107b50760076007b507b6076007b6075f075f07b607b7075f07b7075e075e07b707b8075e07b8075d075d07b807b9075d07b9075c075c07b907ba075c07ba075b075b07ba07bb075b07bb075a075a07bb075907b507bc07b607b507bd07bc07b607bc07be07b607be07b707b707be07bf07b707bf07b807b807bf07c007b807c007b907b907c007c107b907c107ba07ba07c107c207ba07c207bb07bb07c207c307bb07c30759075907c307c4075907c40758075807c407c5075807c50757075707c507c6075707c60756075607c607c7075607c70755075507c707c8075507c80754075407c807c9075407c90753075307c907ca075307ca0752075207ca07cb075207cb0751075107cb07cc075107cc0750075007cc07cd075007cd074f074f07cd07ce074f07ce074e074e07ce07cf074e07cf074d074d07cf07d0074d07d0074c074c07d007d1074c07d1074b074b07d107d2074b07d207d3074b07d3074a074a07d307d4074a07d40749074907d407d5074907d50748074807d507d6074807d60747074707d6074607cf07d707d007d007d707d807d007d807d107d107d807d907d107d907d207d207d907da07d207da07db07d207db07d307d307db07dc07d307dc07d407d407dc07dd07d407dd07d507d507dd07de07d507de07d607d607de07df07d607df0746074607df07e0074607e00745074507e007e1074507e10744074407e107e2074407e20743074307e207e3074307e30742074207e307e4074207e40741074107e407e5074107e50740074007e507e6074007e6073f073f07e607e7073f07e7073e073e07e707e8073e07e8073d073d07e807e9073d07e9073c073c07e907ea073c07ea073b073b07ea07eb073b07eb073a073a07eb07ec073a07ec0739073907ec07ed073907ed0738073807ed07ee073807ee0737073707ee07ef073707ef0736073607ef07f0073607f00735073507f007f1073507f10734073407f107f2073407f20733073307f207f3073307f30732073207f307f4073207f40731073107f407f5073107f5072f072f07f507f6072f07f6072e072e07f607f7072e07f707f80726072e07f8072607f80727072707f807f9072707f90728072807f907fa072807fa07fb072807fb0729072907fb07fc072907fc072a072a07fc07fd072a07fd072b072b07fd07fe072b07fe072c072c07fe07ff072c07ff072d072d07ff0700082d0700080105010500080005f9070108fa07fa0701080208fa0702080308fa070308fb07fb0703080408fb070408fc07fc0704080508fc070508fd07fd0705080608fd070608fe07fe0706080708fe070708ff07ff0707080808ff070808000800080808090800080908000500050908ff0403080a0804080a080b08040804080b0805080b080c08050805080c0806080c080d08060806080d0807080d080e08070807080e0808080e080f08080808080f0809080f081008090809081008ff041008fe04ff040a0811080b08120811080a08130812080a0813080a080308020813080308010813080208140813080108140812081308150814080108f90715080108f8071508f907f807f7071508f7071608150816081408150817081608f707f6071708f70718081708f607f5071808f60719081808f507f4071908f5071a081908f407f3071a08f4071b081a08f307f2071b08f3071c081b08f207f1071c08f2071d081c08f107f0071d08f1071e081d08f007ef071e08f0071f081e08ef07ee071f08ef0720081f08ee07ed072008ee0721082008ed07ec072108ed0722082108ec07eb072208ec0723082208eb07ea072308eb0724082308ea07e9072408ea0725082408e907e8072508e90726082508e807e7072608e80727082608e707e6072708e70728082708e607e5072808e60729082808e507e4072908e5072a082908e407e3072a08e4072b082a08e307e2072b08e3072c082b08e207e1072c08e2072d082c08e107e0072d08e1072e082d08e007df072e08e0072f082e08df07de072f08df0730082f08de07dd073008de0731083008dd07dc073108dd0732083108dc07db073208dc0733083208db07da073308db07d9073308da0734083308d907d8073408d90735083408d807d7073508d80736083508d70737083608d707cf073708d707ce073708cf07ce0738083708cd073808ce07cd0739083808cc073908cd07cc073a083908cb073a08cc07cb073b083a08ca073b08cb07ca073c083b08c9073c08ca07c9073d083c08c8073d08c907c8073e083d08c7073e08c807c7073f083e08c6073f08c707c60740083f08c5074008c607c50741084008c4074108c507c40742084108c3074208c407c30743084208c2074308c307c20744084308c1074408c207c10745084408c0074508c107c00746084508bf074608c007bf0747084608be074708bf07be0748084708bc074808be07bc0749084808bd074908bc07bd074a0849084b084a08bd07b4074b08bd07b3074b08b407b3074c084b08b2074c08b307b2074d084c08b1074d08b207b1074e084d08b0074e08b107b0074f084e08af074f08b007af0750084f08ae075008af07ae0751085008ad075108ae07ad0752085108ac075208ad07ac0753085208ac0754085308ab075408ac07ab0755085408aa075508ab07aa0756085508a9075608aa07a90757085608a8075708a907a80758085708a7075808a807a70759085808a6075908a707a6075a085908a5075a08a607a5075b085a08a4075b08a507a4075c085b08a3075c08a407a3075d085c08a2075d08a307a2075e085d08a0075e08a207a0075f085e08a1075f08a007a10760085f0861086008a10798076108a1079707610898079707620861089607620897079607630862089507630896079507640863089407640895079407650864089307650894079307660865089207660893079207670866089107670892079107680867089007680891079007690868088f07690890078f076a0869088e076a088f078e076b086a088d076b088e078d076c086b088c076c088d078c076d086c088b076d088c078b076e086d088a076e088b078a076f086e0889076f088a07890770086f08870770088907870771087008880771088707880772087108720873087108720874087308710873087508710875087008700875087608700876086f086f08760877086f0877086e086e08770878086e0878086d086d08780879086d0879086c086c0879087a086c087a086b086b087a087b086b087b086a086a087b087c086a087c08690869087c087d0869087d08680868087d087e0868087e08670867087e087f0867087f08660866087f0880086608800865086508800881086508810864086408810882086408820863086308820883086308830862086208830884086208840861086108840860087e0885087f087e08860885087f08850887087f0887088008800887088808800888088108810888088908810889088208820889088a0882088a08830883088a088b0883088b08840884088b088c0884088c08600860088c088d0860088d085f085f088d088e085f088e085e085e088e088f085e088f085d085d088f0890085d0890085c085c08900891085c0891085b085b08910892085b0892085a085a08920893085a0893085908590893089408590894085808580894089508580895085708570895089608570896085608560896089708560897085508550897089808550898085408540898089908540899085308530899089a0853089a089b0853089b08520852089b089c0852089c08510851089c089d0851089d08500850089d089e0850089e084f084f089e089f084f089f084e084e089f08a0084e08a0084d084d08a008a1084d08a1084c084c08a108a2084c08a2084b084b08a2084a089c08a3089d08a408a3089c089b08a4089c08a508a4089b089a08a5089b089908a5089a08a608a50899089808a6089908a708a60898089708a7089808a808a70897089608a8089708a908a80896089508a9089608aa08a90895089408aa089508ab08aa0894089308ab089408ac08ab0893089208ac089308ad08ac0892089108ad089208ae08ad0891089008ae089108af08ae0890088f08af089008b008af088f088e08b0088f08b108b0088e088d08b1088e08b208b1088d088c08b2088d08b308b2088c088b08b3088c08b408b3088b088a08b4088b08b508b4088a088908b5088a08b608b50889088808b6088908b708b60888088708b7088808b808b70887088508b8088708b908b80885088608b9088508ba08b9088608bb08ba0886087d08bb0886087c08bb087d087c08bc08bb087b08bc087c087b08bd08bc087a08bd087b087a08be08bd087908be087a087908bf08be087808bf0879087808c008bf087708c00878087708c108c0087608c10877087608c208c1087508c20876087508c308c2087308c30875087308c408c3087408c40873087408c508c408c508c608c408c608c708c408c408c708c308c708c808c308c308c808c208c808c908c208c208c908c108c908ca08c108c108ca08c008ca08cb08c008c008cb08bf08cb08cc08bf08bf08cc08be08cc08cd08be08be08cd08bd08cd08ce08bd08bd08ce08bc08ce08cf08bc08bc08cf08bb08cf08ba08bb08c708d008c808d008d108c808c808d108c908d108d208c908c908d208ca08d208d308ca08ca08d308cb08d308d408cb08cb08d408cc08d408d508cc08cc08d508cd08d508d608cd08cd08d608ce08d608d708ce08ce08d708cf08d708d808cf08cf08d808ba08d808d908ba08ba08d908b908d908da08b908b908da08b808da08db08b808b808db08b708db08dc08b708b708dc08b608dc08dd08b608b608dd08b508dd08de08b508b508de08b408de08df08b408b408df08b308df08e008b308b308e008b208e008e108b208b208e108b108e108e208b108b108e208b008e208e308b008b008e308af08e308e408af08af08e408ae08e408e508ae08ae08e508ad08e508e608ad08ad08e608ac08e608e708ac08ac08e708ab08e708e808ab08ab08e808aa08e808e908aa08aa08e908a908e908ea08a908a908ea08a808ea08eb08a808a808eb08a708eb08ec08a708a708ec08a608ec08ed08a608a608ed08a508a508ed08a408ed08ee08a408a408ee08a308ee08ef08a308a308ef08f008a308f0089d089d08f0089e08f008f1089e089e08f1089f08f108f2089f089f08f208a008f208f308a008a008f308a108f308f408a108a108f408a208f408f508a208a208f5084a08f508f6084a084a08f6084908f608f70849084908f7084808f708f80848084808f8084708f808f90847084708f9084608f908fa0846084608fa084508fa08fb0845084508fb084408fb08fc0844084408fc084308fc08fd0843084308fd084208fd08fe0842084208fe084108fe08ff0841084108ff084008ff0800094008400800093f08000901093f083f0801093e08010902093e083e0802093d08020903093d083d0803093c08030904093c083c0804093b08040905093b083b0805093a08050906093a083a08060939080609070939083908070938080709080938083808080937080809360837080209090903090a090909020901090a0902090b090a09010900090b0901090c090b090009ff080c0900090d090c09ff08fe080d09ff080e090d09fe08fd080e09fe080f090e09fd08fc080f09fd0810090f09fc08fb081009fc0811091009fb08fa081109fb0812091109fa08f9081209fa0813091209f908f8081309f90814091309f808f7081409f80815091409f708f6081509f70816091509f608f5081609f60817091609f508f4081709f50818091709f408f3081809f40819091809f308f2081909f3081a091909f208f1081a09f2081b091a09f108f0081b09f108ef081b09f008ef081c091b091d091c09ef08ee081d09ef081e091d09ee08ed081e09ee08ec081e09ed081f091e09ec08eb081f09ec0820091f09eb08ea082009eb0821092009ea08e9082109ea0822092109e908e8082209e90823092209e808e7082309e80824092309e708e6082409e70825092409e608e5082509e60826092509e508e4082609e50827092609e408e3082709e40828092709e308e2082809e30829092809e208e1082909e2082a092909e108e0082a09e1082b092a09e008df082b09e0082c092b09df08de082c09df082d092c09de08dd082d09de082e092d09dd08dc082e09dd082f092e09dc08db082f09dc0830092f09db08da083009db0831093009da08d9083109da0832093109d908d8083209d90833093209d808d7083309d80834093309d708d6083409d70835093409d608d5083509d60836093509d508d4083609d50837093609d408d3083709d40838093709d308d2083809d30839093809d208d1083909d2083a093909d108d0083a09d1083b093a09d0083c093b09d0083c09d008c708c6083c09c7083b093d093a093d093e093a093a093e0939093e093f09390939093f0938093f0940093809380940093709400941093709370941093609410942093609360942093509420943093509350943093409430944093409340944093309440945093309330945093209450946093209320946093109460947093109310947093009470948093009300948092f09480949092f092f0949092e0949094a092e092e094a092d094a094b092d092d094b092c094b094c092c092c094c092b094c094d092b092b094d092a094d094e092a092a094e0929094e094f09290929094f0928094f0950092809280950092709500951092709270951092609510952092609260952092509520953092509250953092409530954092409240954092309540955092309230955092209550956092209220956092109560957092109210957092009570958092009200958091f09580959091f091f0959091e091e0959091d0959095a091d091d095a091c095a095b091c091c095b095c091c095c091b091b095c091a095c095d091a091a095d0919095d095e09190919095e0918095e095f09180918095f0917095f0960091709170960091609600961091609160961091509610962091509150962091409620963091409140963091309630964091309130964091209640965091209120965091109650966091109110966091009660967091009100967090f09670968090f090f0968090e09680969090e090e0969090d0969096a090d090d096a090c096a096b090c090c096b090b096b096c090b090b096c090a096c096d090a090a096d0909096d096e09090909096e096f0909096f09030903096f0904096f097009040904097009050970097109050905097109060971097209060906097209070972097309070907097309080973097409080908097409360874097509360836087509350875097609350835087609340876097709340834087709330833087709320877097809320832087809310878097909310831087909300879097a09300830087a092f087a097b092f082f087b092e087b097c092e082e087c092d087c097d092d082d087d092c087d097e092c082c087e092b087e097f092b082b087f092a087f0980092a082a088009290880098109290829088109280881098209280828088209270882098309270827088309260883098409260826088409250884098509250825088509240885098609240824088609230886098709230823088709220887098809220822088809210888098909210821088909200889098a09200820088a091f088a098b091f081f088b091e088b098c091e081e088c091d088c098d091d081d088d091c088d098e091c081c088e091b088e098f091b081b088f091a088f0990091a081a08900919089009910919081908910918089109920918081808920917089209930917081708930916089309940916081608940914089409120814088e0995098f09960995098e098d0996098e09970996098d098c0997098d09980997098c098b0998098c09990998098b098a0999098b099a0999098a0989099a098a099b099a09890988099b0989099c099b09880987099c0988099d099c09870986099d0987099e099d09860985099e0986099f099e09850984099f098509a0099f0984098309a0098409a109a00983098209a1098309a209a10982098109a2098209a309a20981098009a3098109a409a30980097f09a4098009a509a4097f097e09a5097f09a609a5097e097d09a6097e09a709a6097d097c09a7097d09a809a7097c097b09a8097c09a909a8097b097a09a9097b09aa09a9097a097909aa097a09ab09aa0979097809ab097909ac09ab0978097709ac0978097609ac097709ad09ac0976097509ad097609ae09ad0975097409ae097509af09ae0974097309af097409b009af0973097209b0097309b109b00972097109b1097209b209b10971097009b2097109b309b20970096f09b30970096e09b3096f096e09b409b309b509b4096e096d09b5096e09b609b5096d096c09b6096d09b709b6096c096b09b7096c09b809b7096b096a09b8096b09b909b8096a096909b9096a09ba09b90969096809ba096909bb09ba0968096709bb096809bc09bb0967096609bc096709bd09bc0966096509bd096609be09bd0965096409be096509bf09be0964096309bf096409c009bf0963096209c0096309c109c00962096109c1096209c209c10961096009c2096109c309c20960095f09c3096009c409c3095f095e09c4095f09c509c4095e095d09c5095e09c609c5095d095c09c6095d095b09c6095c095b09c709c609c809c7095b095a09c8095b09c909c8095a095909c9095a095809c9095909ca09c90958095709ca095809cb09ca0957095609cb095709cc09cb0956095509cc095609cd09cc0955095409cd095509ce09cd0954095309ce095409cf09ce0953095209cf095309d009cf0952095109d0095209d109d00951095009d1095109d209d10950094f09d2095009d309d2094f094e09d3094f09d409d3094e094d09d4094e09d509d4094d094c09d5094d09d609d5094c094b09d6094c09d709d6094b094a09d7094b09d809d7094a094909d8094a09d909d80949094809d9094909da09d90948094709da094809db09da0947094609db094709dc09db0946094509dc094609dd09dc0945094409dd094509de09dd0944094309de094409df09de0943094209df094309e009df0942094109e0094209e109e00941094009e1094109e209e10940093f09e2094009e309e2093f093e09e3093f09e409e3093e093d09e4093e09e409e509e309e509e609e309e309e609e209e609e709e209e209e709e109e709e809e109e109e809e009e809e909e009e009e909df09e909ea09df09df09ea09de09ea09eb09de09de09eb09dd09eb09ec09dd09dd09ec09dc09ec09ed09dc09dc09ed09db09ed09ee09db09db09ee09da09ee09ef09da09da09ef09d909ef09f009d909d909f009d809f009f109d809d809f109d709f109f209d709d709f209d609f209f309d609d609f309d509f309f409d509d509f409d409f409f509d409d409f509d309f509f609d309d309f609d209f609f709d209d209f709d109f709f809d109d109f809d009f809f909d009d009f909cf09f909fa09cf09cf09fa09ce09fa09fb09ce09ce09fb09cd09fb09fc09cd09cd09fc09cc09fc09fd09cc09cc09fd09cb09fd09fe09cb09cb09fe09ca09fe09ff09ca09ca09ff09c909c909ff09c809ff09000ac809c809000ac709000a010ac709c709010a020ac709020ac609c609020ac509020a030ac509c509030ac409030a040ac409c409040ac309040a050ac309c309050ac209050a060ac209c209060ac109060a070ac109c109070ac009070a080ac009c009080abf09080a090abf09bf09090abe09090a0a0abe09be090a0abd090a0a0b0abd09bd090b0abc090b0a0c0abc09bc090c0abb090c0a0d0abb09bb090d0aba090d0a0e0aba09ba090e0ab9090e0a0f0ab909b9090f0ab8090f0a100ab809b809100ab709100a110ab709b709110ab609110a120ab609b609120ab509120a130ab509b509130ab409130a140ab409b409140a150ab409150ab309b309150ab209150a160ab209b209160ab109160a170ab109b109170ab009170a180ab009b009180aaf09180a190aaf09af09190aae09190a1a0aae09ae091a0aad091a0a1b0aad09ad091b0aac09ac091b0aab091b0a1c0aab09ab091c0aaa091c0a1d0aaa09aa091d0aa9091d0a1e0aa909a9091e0aa8091e0a1f0aa809a8091f0aa7091f0a200aa709a709200aa609200a210aa609a609210aa509210a220aa509a509220aa409220a230aa409a409230aa309230a240aa309a309240aa209240a250aa209a209250aa109250a260aa109a109260aa009260a270aa009a009270a9f09270a280a9f099f09280a9e09280a290a9e099e09290a9d09290a2a0a9d099d092a0a9c092a0a2b0a9c099c092b0a9b092b0a2c0a9b099b092c0a9a092c0a2d0a9a099a092d0a99092d0a2e0a990999092e0a98092e0a2f0a980998092f0a97092f0a300a97099709300a9609300a310a96099609310a9509310a320a95099509320a330a9509330a8f098f09330a9009330a340a90099009340a9109340a350a91099109350a9209350a360a92099209360a9309360a370a93099309370a9409370a380a94099409380a12081208380a1108380a390a11081108390a3a0a11083a0a0b080b083a0a0c083a0a3b0a0c080c083b0a0d083b0a3c0a0d080d083c0a0e083c0a3d0a0e080e083d0a0f083d0a3e0a0f080f083e0a10083e0a3f0a100810083f0afe043f0afd04fe04390a400a3a0a3a0a400a3b0a400a410a3b0a3b0a410a3c0a410a420a3c0a3c0a420a3d0a420a430a3d0a3d0a430a3e0a430a440a3e0a3e0a440a3f0a440a450a3f0a3f0a450afd04450a460afd04fd04460afc04460a470afc04fc04470afb04470a480afb04fb04480afa04480a490afa04fa04490af904490a4a0af904f9044a0af8044a0a4b0af804f8044b0af7044b0a4c0af704f7044c0af6044c0a4d0af604f6044d0af5044d0a4e0af504f5044e0af4044e0a4f0af404f4044f0a500af404500aec04ec04500aed04500a510aed04ed04510aee04510a520aee04ee04520aef04520a530aef04ef04530af004530a540af004f004540af104540a550af104f104550af204550a560af204f204560af304560a570af304f304570ae304570a580ae304e304580ae204580a590ae204e204590a5a0ae2045a0add04dd045a0ade045a0a5b0ade04de045b0adf045b0a5c0adf04df045c0ae0045c0a5d0ae004e0045d0ae104590a5e0a5a0a5a0a5e0a5b0a5e0a5f0a5b0a5b0a5f0a5c0a5f0a600a5c0a5c0a600a5d0a580a610a590a620a610a580a570a620a580a630a620a570a560a630a570a640a630a560a550a640a560a650a640a550a540a650a550a660a650a540a530a660a540a670a660a530a520a670a530a680a670a520a510a680a520a690a680a510a500a690a510a4f0a690a500a4f0a6a0a690a6b0a6a0a4f0a4e0a6b0a4f0a6c0a6b0a4e0a4d0a6c0a4e0a6d0a6c0a4d0a4c0a6d0a4d0a6e0a6d0a4c0a4b0a6e0a4c0a6f0a6e0a4b0a4a0a6f0a4b0a700a6f0a4a0a490a700a4a0a710a700a490a480a710a490a720a710a480a470a720a480a730a720a470a460a730a470a740a730a460a450a740a460a750a740a450a440a750a450a760a750a440a430a760a440a770a760a430a420a770a430a780a770a420a410a780a420a790a780a410a400a790a410a7a0a790a400a390a7a0a400a7b0a7a0a390a380a7b0a390a370a7b0a380a7c0a7b0a370a360a7c0a370a7d0a7c0a360a350a7d0a360a7e0a7d0a350a340a7e0a350a7f0a7e0a340a330a7f0a340a320a7f0a330a320a800a7f0a810a800a320a310a810a320a820a810a310a300a820a310a830a820a300a2f0a830a300a840a830a2f0a2e0a840a2f0a850a840a2e0a2d0a850a2e0a860a850a2d0a2c0a860a2d0a870a860a2c0a2b0a870a2c0a880a870a2b0a2a0a880a2b0a890a880a2a0a290a890a2a0a8a0a890a290a280a8a0a290a8b0a8a0a280a270a8b0a280a8c0a8b0a270a260a8c0a270a8d0a8c0a260a250a8d0a260a8e0a8d0a250a240a8e0a250a8f0a8e0a240a230a8f0a240a900a8f0a230a220a900a230a910a900a220a210a910a220a920a910a210a200a920a210a930a920a200a1f0a930a200a940a930a1f0a1e0a940a1f0a950a940a1e0a1d0a950a1e0a960a950a1d0a1c0a960a1d0a970a960a1c0a1b0a970a1c0a1a0a970a1b0a980a970a1a0a190a980a1a0a990a980a190a180a990a190a9a0a990a180a170a9a0a180a9b0a9a0a170a160a9b0a170a9c0a9b0a160a150a9c0a160a140a9c0a150a140a9d0a9c0a9e0a9d0a140a130a9e0a140a9f0a9e0a130a120a9f0a130aa00a9f0a120a110aa00a120aa10aa00a110a100aa10a110aa20aa10a100a0f0aa20a100aa30aa20a0f0a0e0aa30a0f0aa40aa30a0e0a0d0aa40a0e0aa50aa40a0d0a0c0aa50a0d0aa60aa50a0c0a0b0aa60a0c0aa70aa60a0b0a0a0aa70a0b0aa80aa70a0a0a090aa80a0a0aa90aa80a090a080aa90a090aaa0aa90a080a070aaa0a080aab0aaa0a070a060aab0a070aac0aab0a060a050aac0a060aad0aac0a050a040aad0a050aae0aad0a040a030aae0a040aaf0aae0a030a020aaf0a030a010aaf0a020a010ab00aaf0ab10ab00a010a000ab10a010ab20ab10a000aff09b20a000afe09b20aff09b30ab20afe09fd09b30afe09b40ab30afd09fc09b40afd09b50ab40afc09fb09b50afc09b60ab50afb09fa09b60afb09b70ab60afa09f909b70afa09b80ab70af909f809b80af909b90ab80af809f709b90af809ba0ab90af709f609ba0af709bb0aba0af609f509bb0af609bc0abb0af509f409bc0af509bd0abc0af409f309bd0af409be0abd0af309f209be0af309bf0abe0af209f109bf0af209c00abf0af109f009c00af109c10ac00af009ef09c10af009c20ac10aef09ee09c20aef09c30ac20aee09ed09c30aee09c40ac30aed09ec09c40aed09c50ac40aec09eb09c50aec09c60ac50aeb09ea09c60aeb09c70ac60aea09e909c70aea09c80ac70ae909e809c80ae909c90ac80ae809e709c90ae809ca0ac90ae709e609ca0ae709cb0aca0ae609e509cb0ae609cb0acc0aca0acc0acd0aca0aca0acd0ac90acd0ace0ac90ac90ace0ac80ace0acf0ac80ac80acf0ac70acf0ad00ac70ac70ad00ac60ad00ad10ac60ac60ad10ac50ad10ad20ac50ac50ad20ac40ad20ad30ac40ac40ad30ac30ad30ad40ac30ac30ad40ac20ad40ad50ac20ac20ad50ac10ad50ad60ac10ac10ad60ac00ad60ad70ac00ac00ad70abf0ad70ad80abf0abf0ad80abe0ad80ad90abe0abe0ad90abd0ad90ada0abd0abd0ada0abc0ada0adb0abc0abc0adb0abb0adb0adc0abb0abb0adc0aba0adc0add0aba0aba0add0ab90add0ade0ab90ab90ade0ab80ade0adf0ab80ab80adf0ab70adf0ae00ab70ab70ae00ab60ae00ae10ab60ab60ae10ab50ae10ae20ab50ab50ae20ab40ae20ae30ab40ab40ae30ab30ae30ae40ab30ab30ae40ab20ab20ae40ab10ae40ae50ab10ab10ae50ab00ae50ae60ab00ab00ae60ae70ab00ae70aaf0aaf0ae70aae0ae70ae80aae0aae0ae80aad0ae80ae90aad0aad0ae90aac0ae90aea0aac0aac0aea0aab0aea0aeb0aab0aab0aeb0aaa0aeb0aec0aaa0aaa0aec0aa90aec0aed0aa90aa90aed0aa80aed0aee0aa80aa80aee0aa70aee0aef0aa70aa70aef0aa60aef0af00aa60aa60af00aa50af00af10aa50aa50af10aa40af10af20aa40aa40af20aa30af20af30aa30aa30af30aa20af30af40aa20aa20af40aa10af40af50aa10aa10af50aa00af50af60aa00aa00af60a9f0af60af70a9f0a9f0af70a9e0af70af80a9e0a9e0af80a9d0af80af90a9d0a9d0af90afa0a9d0afa0a9c0a9c0afa0a9b0afa0afb0a9b0a9b0afb0a9a0afb0afc0a9a0a9a0afc0a990afc0afd0a990a990afd0a980afd0afe0a980a980afe0a970a970afe0a960afe0aff0a960a960aff0a950aff0a000b950a950a000b940a000b010b940a940a010b930a010b020b930a930a020b920a020b030b920a920a030b910a030b040b910a910a040b900a040b050b900a900a050b8f0a050b060b8f0a8f0a060b8e0a060b070b8e0a8e0a070b8d0a070b080b8d0a8d0a080b8c0a080b090b8c0a8c0a090b8b0a090b0a0b8b0a8b0a0a0b8a0a0a0b0b0b8a0a8a0a0b0b890a0b0b0c0b890a890a0c0b880a0c0b0d0b880a880a0d0b870a0d0b0e0b870a870a0e0b860a0e0b0f0b860a860a0f0b850a0f0b100b850a850a100b840a100b110b840a840a110b830a110b120b830a830a120b820a120b130b820a820a130b810a130b140b810a810a140b800a140b150b800a800a150b160b800a160b7f0a7f0a160b7e0a160b170b7e0a7e0a170b7d0a170b180b7d0a7d0a180b7c0a180b190b7c0a7c0a190b7b0a7b0a190b7a0a190b1a0b7a0a7a0a1a0b790a1a0b1b0b790a790a1b0b780a1b0b1c0b780a780a1c0b770a1c0b1d0b770a770a1d0b760a1d0b1e0b760a760a1e0b750a1e0b1f0b750a750a1f0b740a1f0b200b740a740a200b730a200b210b730a730a210b720a210b220b720a720a220b710a220b230b710a710a230b700a230b240b700a700a240b6f0a240b250b6f0a6f0a250b6e0a250b260b6e0a6e0a260b6d0a260b270b6d0a6d0a270b6c0a270b280b6c0a6c0a280b6b0a280b290b6b0a6b0a290b6a0a290b2a0b6a0a6a0a2a0b2b0b6a0a2b0b690a690a2b0b680a2b0b2c0b680a680a2c0b670a2c0b2d0b670a670a2d0b660a2d0b2e0b660a660a2e0b650a2e0b2f0b650a650a2f0b640a2f0b300b640a640a300b630a300b310b630a630a310b620a310b320b620a620a320b610a320b330b610a610a330b340b610a340b590a590a340b5e0a340b350b5e0a5e0a350b5f0a350b360b5f0a5f0a360b600a330b370b340b340b370b350b370b380b350b350b380b360b300b390b310b390b3a0b310b310b3a0b320b3a0b3b0b320b320b3b0b330b3b0b3c0b330b330b3c0b370b3c0b3d0b370b370b3d0b380b390b3e0b3a0b3f0b3e0b390b400b3f0b390b400b390b300b2f0b400b300b410b400b2f0b2e0b410b2f0b420b410b2e0b2d0b420b2e0b430b420b2d0b2c0b430b2d0b440b430b2c0b2b0b440b2c0b2a0b440b2b0b2a0b450b440b460b450b2a0b290b460b2a0b470b460b290b280b470b290b480b470b280b270b480b280b490b480b270b260b490b270b4a0b490b260b250b4a0b260b4b0b4a0b250b240b4b0b250b4c0b4b0b240b230b4c0b240b4d0b4c0b230b220b4d0b230b4e0b4d0b220b210b4e0b220b4f0b4e0b210b200b4f0b210b500b4f0b200b1f0b500b200b510b500b1f0b1e0b510b1f0b520b510b1e0b1d0b520b1e0b530b520b1d0b1c0b530b1d0b540b530b1c0b1b0b540b1c0b550b540b1b0b1a0b550b1b0b560b550b1a0b190b560b1a0b180b560b190b570b560b180b170b570b180b580b570b170b160b580b170b150b580b160b150b590b580b5a0b590b150b140b5a0b150b5b0b5a0b140b130b5b0b140b5c0b5b0b130b120b5c0b130b5d0b5c0b120b110b5d0b120b5e0b5d0b110b100b5e0b110b5f0b5e0b100b0f0b5f0b100b600b5f0b0f0b0e0b600b0f0b610b600b0e0b0d0b610b0e0b620b610b0d0b0c0b620b0d0b630b620b0c0b0b0b630b0c0b640b630b0b0b0a0b640b0b0b650b640b0a0b090b650b0a0b660b650b090b080b660b090b670b660b080b070b670b080b680b670b070b060b680b070b690b680b060b050b690b060b6a0b690b050b040b6a0b050b6b0b6a0b040b030b6b0b040b6c0b6b0b030b020b6c0b030b6d0b6c0b020b010b6d0b020b6e0b6d0b010b000b6e0b010b6f0b6e0b000bff0a6f0b000b700b6f0bff0afe0a700bff0afd0a700bfe0a710b700bfd0afc0a710bfd0a720b710bfc0afb0a720bfc0a730b720bfb0afa0a730bfb0af90a730bfa0af90a740b730b750b740bf90af80a750bf90a760b750bf80af70a760bf80a770b760bf70af60a770bf70a780b770bf60af50a780bf60a790b780bf50af40a790bf50a7a0b790bf40af30a7a0bf40a7b0b7a0bf30af20a7b0bf30a7c0b7b0bf20af10a7c0bf20a7d0b7c0bf10af00a7d0bf10a7e0b7d0bf00aef0a7e0bf00a7f0b7e0bef0aee0a7f0bef0a800b7f0bee0aed0a800bee0a810b800bed0aec0a810bed0a820b810bec0aeb0a820bec0a830b820beb0aea0a830beb0a840b830bea0ae90a840bea0a850b840be90ae80a850be90a860b850be80ae70a860be80ae60a860be70ae60a870b860b880b870be60ae50a880be60a890b880be50ae40a890be50ae30a890be40a8a0b890be30ae20a8a0be30a8b0b8a0be20ae10a8b0be20a8c0b8b0be10ae00a8c0be10a8d0b8c0be00adf0a8d0be00a8e0b8d0bdf0ade0a8e0bdf0a8f0b8e0bde0add0a8f0bde0a900b8f0bdd0adc0a900bdd0a910b900bdc0adb0a910bdc0a920b910bdb0ada0a920bdb0a930b920bda0ad90a930bda0a940b930bd90ad80a940bd90a950b940bd80ad70a950bd80a960b950bd70ad60a960bd70a970b960bd60ad50a970bd60a980b970bd50ad40a980bd50a990b980bd40ad30a990bd40a9a0b990bd30ad20a9a0bd30a9b0b9a0bd20ad10a9b0bd20a9c0b9b0bd10ad00a9c0bd10a9d0b9c0bd00acf0a9d0bd00a9e0b9d0bcf0ace0a9e0bcf0a9f0b9e0bce0acd0a9f0bce0aa00b9f0bcd0acc0aa00bcd0aa00ba10b9f0ba10ba20b9f0b9f0ba20b9e0ba20ba30b9e0b9e0ba30b9d0ba30ba40b9d0b9d0ba40b9c0ba40ba50b9c0b9c0ba50b9b0ba50ba60b9b0b9b0ba60b9a0ba60ba70b9a0b9a0ba70b990ba70ba80b990b990ba80b980ba80ba90b980b980ba90b970ba90baa0b970b970baa0b960baa0bab0b960b960bab0b950bab0bac0b950b950bac0b940bac0bad0b940b940bad0b930bad0bae0b930b930bae0b920bae0baf0b920b920baf0b910baf0bb00b910b910bb00b900bb00bb10b900b900bb10b8f0bb10bb20b8f0b8f0bb20b8e0bb20bb30b8e0b8e0bb30b8d0bb30bb40b8d0b8d0bb40b8c0bb40bb50b8c0b8c0bb50b8b0bb50bb60b8b0b8b0bb60b8a0bb60bb70b8a0b8a0bb70b890b890bb70b880bb70bb80b880b880bb80b870bb80bb90b870b870bb90bba0b870bba0b860b860bba0b850bba0bbb0b850b850bbb0b840bbb0bbc0b840b840bbc0b830bbc0bbd0b830b830bbd0b820bbd0bbe0b820b820bbe0b810bbe0bbf0b810b810bbf0b800bbf0bc00b800b800bc00b7f0bc00bc10b7f0b7f0bc10b7e0bc10bc20b7e0b7e0bc20b7d0bc20bc30b7d0b7d0bc30b7c0bc30bc40b7c0b7c0bc40b7b0bc40bc50b7b0b7b0bc50b7a0bc50bc60b7a0b7a0bc60b790bc60bc70b790b790bc70b780bc70bc80b780b780bc80b770bc80bc90b770b770bc90b760bc90bca0b760b760bca0b750bca0bcb0b750b750bcb0b740bcb0bcc0b740b740bcc0bcd0b740bcd0b730b730bcd0b720bcd0bce0b720b720bce0b710bce0bcf0b710b710bcf0b700b700bcf0b6f0bcf0bd00b6f0b6f0bd00b6e0bd00bd10b6e0b6e0bd10b6d0bd10bd20b6d0b6d0bd20b6c0bd20bd30b6c0b6c0bd30b6b0bd30bd40b6b0b6b0bd40b6a0bd40bd50b6a0b6a0bd50b690bd50bd60b690b690bd60b680bd60bd70b680b680bd70b670bd70bd80b670b670bd80b660bd80bd90b660b660bd90b650bd90bda0b650b650bda0b640bda0bdb0b640b640bdb0b630bdb0bdc0b630b630bdc0b620bdc0bdd0b620b620bdd0b610bdd0bde0b610b610bde0b600bde0bdf0b600b600bdf0b5f0bdf0be00b5f0b5f0be00b5e0be00be10b5e0b5e0be10b5d0be10be20b5d0b5d0be20b5c0be20be30b5c0b5c0be30b5b0be30be40b5b0b5b0be40b5a0be40be50b5a0b5a0be50b590be50be60b590b590be60be70b590be70b580b580be70b570be70be80b570b570be80b560b560be80b550be80be90b550b550be90b540be90bea0b540b540bea0b530bea0beb0b530b530beb0b520beb0bec0b520b520bec0b510bec0bed0b510b510bed0b500bed0bee0b500b500bee0b4f0bee0bef0b4f0b4f0bef0b4e0bef0bf00b4e0b4e0bf00b4d0bf00bf10b4d0b4d0bf10b4c0bf10bf20b4c0b4c0bf20b4b0bf20bf30b4b0b4b0bf30b4a0bf30bf40b4a0b4a0bf40b490bf40bf50b490b490bf50b480bf50bf60b480b480bf60b470bf60bf70b470b470bf70b460bf70bf80b460b460bf80b450bf80bf90b450b450bf90bfa0b450bfa0b440b440bfa0b430bfa0bfb0b430b430bfb0b420bfb0bfc0b420b420bfc0b410bfc0bfd0b410b410bfd0b400bfd0b3f0b400bf90bfe0bfa0bfa0bfe0bfb0bfe0bff0bfb0bfb0bff0bfc0bff0b000cfc0bfc0b000cfd0b000c010cfd0bfd0b010c3f0b010c020c3f0b3f0b020c3e0b020c030c3e0b3e0b030c040c3e0b040c3a0b3a0b040c3b0b040c050c3b0b3b0b050c3c0b050c060c3c0b3c0b060c3d0b030c070c040c040c070c050c070c080c050c050c080c060cfe0b090cff0b090c0a0cff0bff0b0a0c000c0a0c0b0c000c000c0b0c010c0b0c0c0c010c010c0c0c020c0c0c0d0c020c020c0d0c030c0d0c0e0c030c030c0e0c070c0e0c0f0c070c070c0f0c080c090c100c0a0c110c100c090c120c110c090c120c090cfe0bf90b120cfe0b130c120cf90bf80b130cf90b140c130cf80bf70b140cf80b150c140cf70bf60b150cf70b160c150cf60bf50b160cf60b170c160cf50bf40b170cf50b180c170cf40bf30b180cf40b190c180cf30bf20b190cf30b1a0c190cf20bf10b1a0cf20b1b0c1a0cf10bf00b1b0cf10b1c0c1b0cf00bef0b1c0cf00b1d0c1c0cef0bee0b1d0cef0b1e0c1d0cee0bed0b1e0cee0b1f0c1e0ced0bec0b1f0ced0b200c1f0cec0beb0b200cec0b210c200ceb0bea0b210ceb0b220c210cea0be90b220cea0b230c220ce90be80b230ce90be70b230ce80be60b230ce70be60b240c230c230c240c220c250c240ce60be50b250ce60b260c250ce50be40b260ce50b270c260ce40be30b270ce40b280c270ce30be20b280ce30b290c280ce20be10b290ce20b2a0c290ce10be00b2a0ce10b2b0c2a0ce00bdf0b2b0ce00b2c0c2b0cdf0bde0b2c0cdf0b2d0c2c0cde0bdd0b2d0cde0b2e0c2d0cdd0bdc0b2e0cdd0b2f0c2e0cdc0bdb0b2f0cdc0b300c2f0cdb0bda0b300cdb0b310c300cda0bd90b310cda0b320c310cd90bd80b320cd90b330c320cd80bd70b330cd80b340c330cd70bd60b340cd70b350c340cd60bd50b350cd60b360c350cd50bd40b360cd50b370c360cd40bd30b370cd40b380c370cd30bd20b380cd30b390c380cd20bd10b390cd20b3a0c390cd10bd00b3a0cd10b3b0c3a0cd00bcf0b3b0cd00bce0b3b0ccf0b3c0c3b0cce0bcd0b3c0cce0bcc0b3c0ccd0bcc0b3d0c3c0c3e0c3d0ccc0bcb0b3e0ccc0b3f0c3e0ccb0bca0b3f0ccb0b400c3f0cca0bc90b400cca0b410c400cc90bc80b410cc90b420c410cc80bc70b420cc80b430c420cc70bc60b430cc70b440c430cc60bc50b440cc60b450c440cc50bc40b450cc50b460c450cc40bc30b460cc40b470c460cc30bc20b470cc30b480c470cc20bc10b480cc20b490c480cc10bc00b490cc10b4a0c490cc00bbf0b4a0cc00b4b0c4a0cbf0bbe0b4b0cbf0b4c0c4b0cbe0bbd0b4c0cbe0b4d0c4c0cbd0bbc0b4d0cbd0b4e0c4d0cbc0bbb0b4e0cbc0b4f0c4e0cbb0bba0b4f0cbb0bb90b4f0cba0bb90b500c4f0c510c500cb90bb80b510cb90b520c510cb80bb70b520cb80bb60b520cb70b530c520cb60bb50b530cb60b540c530cb50bb40b540cb50b550c540cb40bb30b550cb40b560c550cb30bb20b560cb30b570c560cb20bb10b570cb20b580c570cb10bb00b580cb10b590c580cb00baf0b590cb00b5a0c590caf0bae0b5a0caf0b5b0c5a0cae0bad0b5b0cae0b5c0c5b0cad0bac0b5c0cad0b5d0c5c0cac0bab0b5d0cac0b5e0c5d0cab0baa0b5e0cab0b5f0c5e0caa0ba90b5f0caa0b600c5f0ca90ba80b600ca90b610c600ca80ba70b610ca80b620c610ca70ba60b620ca70b630c620ca60ba50b630ca60b640c630ca50ba40b640ca50b650c640ca40ba30b650ca40b660c650ca30ba20b660ca30b670c660ca20ba10b670ca20b670c680c660c680c690c660c660c690c650c690c6a0c650c650c6a0c640c6a0c6b0c640c640c6b0c630c6b0c6c0c630c630c6c0c620c6c0c6d0c620c620c6d0c610c6d0c6e0c610c610c6e0c600c6e0c6f0c600c600c6f0c5f0c6f0c700c5f0c5f0c700c5e0c700c710c5e0c5e0c710c5d0c710c720c5d0c5d0c720c5c0c720c730c5c0c5c0c730c5b0c730c740c5b0c5b0c740c5a0c740c750c5a0c5a0c750c590c750c760c590c590c760c580c760c770c580c580c770c570c770c780c570c570c780c560c780c790c560c560c790c550c790c7a0c550c550c7a0c540c7a0c7b0c540c540c7b0c530c7b0c7c0c530c530c7c0c520c520c7c0c510c7c0c7d0c510c510c7d0c500c7d0c7e0c500c500c7e0c7f0c500c7f0c4f0c4f0c7f0c4e0c7f0c800c4e0c4e0c800c4d0c800c810c4d0c4d0c810c4c0c810c820c4c0c4c0c820c4b0c820c830c4b0c4b0c830c4a0c830c840c4a0c4a0c840c490c840c850c490c490c850c480c850c860c480c480c860c470c860c870c470c470c870c460c870c880c460c460c880c450c880c890c450c450c890c440c890c8a0c440c440c8a0c430c8a0c8b0c430c430c8b0c420c8b0c8c0c420c420c8c0c410c8c0c8d0c410c410c8d0c400c8d0c8e0c400c400c8e0c3f0c8e0c8f0c3f0c3f0c8f0c3e0c8f0c900c3e0c3e0c900c3d0c900c910c3d0c3d0c910c920c3d0c920c3c0c3c0c920c3b0c3b0c920c3a0c920c930c3a0c920c910c930c3a0c930c390c930c940c390c390c940c380c940c950c380c380c950c370c950c960c370c370c960c360c960c970c360c360c970c350c970c980c350c350c980c340c980c990c340c340c990c330c990c9a0c330c330c9a0c320c9a0c9b0c320c320c9b0c310c9b0c9c0c310c310c9c0c300c9c0c9d0c300c300c9d0c2f0c9d0c9e0c2f0c2f0c9e0c2e0c9e0c9f0c2e0c2e0c9f0c2d0c9f0ca00c2d0c2d0ca00c2c0ca00ca10c2c0c2c0ca10c2b0ca10ca20c2b0c2b0ca20c2a0ca20ca30c2a0c2a0ca30c290ca30ca40c290c290ca40c280ca40ca50c280c280ca50c270ca50ca60c270c270ca60c260ca60ca70c260c260ca70c250ca70ca80c250c250ca80c240c240ca80ca90c240ca90c220c220ca90c210ca90caa0c210c210caa0c200caa0cab0c200c200cab0c1f0cab0cac0c1f0c1f0cac0c1e0cac0cad0c1e0c1e0cad0c1d0cad0cae0c1d0c1d0cae0c1c0cae0caf0c1c0c1c0caf0c1b0caf0cb00c1b0c1b0cb00c1a0cb00cb10c1a0c1a0cb10c190cb10cb20c190c190cb20c180cb20cb30c180c180cb30c170cb30cb40c170c170cb40c160cb40cb50c160c160cb50c150cb50cb60c150c150cb60c140cb60cb70c140c140cb70c130cb70cb80c130c130cb80c120cb80c110c120cb20cb90cb30cba0cb90cb20cb10cba0cb20cbb0cba0cb10cb00cbb0cb10cbc0cbb0cb00caf0cbc0cb00cbd0cbc0caf0cae0cbd0caf0cbe0cbd0cae0cad0cbe0cae0cbf0cbe0cad0cac0cbf0cad0cc00cbf0cac0cab0cc00cac0cc10cc00cab0caa0cc10cab0cc20cc10caa0ca90cc20caa0ca80cc20ca90ca80cc30cc20ca70cc30ca80cc40cc30ca70ca60cc40ca70cc50cc40ca60ca50cc50ca60cc60cc50ca50ca40cc60ca50cc70cc60ca40ca30cc70ca40cc80cc70ca30ca20cc80ca30cc90cc80ca20ca10cc90ca20cca0cc90ca10ca00cca0ca10ccb0cca0ca00c9f0ccb0ca00ccc0ccb0c9f0c9e0ccc0c9f0ccd0ccc0c9e0c9d0ccd0c9e0cce0ccd0c9d0c9c0cce0c9d0ccf0cce0c9c0c9b0ccf0c9c0cd00ccf0c9b0c9a0cd00c9b0cd10cd00c9a0c990cd10c9a0cd20cd10c990c980cd20c990cd30cd20c980c970cd30c980cd40cd30c970c960cd40c970cd50cd40c960c950cd50c960cd60cd50c950c940cd60c950cd70cd60c940c930cd70c940c910cd70c930c910cd80cd70c900cd80c910cd90cd80c900c8f0cd90c900cda0cd90c8f0c8e0cda0c8f0cdb0cda0c8e0c8d0cdb0c8e0cdc0cdb0c8d0c8c0cdc0c8d0cdd0cdc0c8c0c8b0cdd0c8c0cde0cdd0c8b0c8a0cde0c8b0cdf0cde0c8a0c890cdf0c8a0ce00cdf0c890c880ce00c890ce10ce00c880c870ce10c880ce20ce10c870c860ce20c870ce30ce20c860c850ce30c860ce40ce30c850c840ce40c850ce50ce40c840c830ce50c840ce60ce50c830c820ce60c830ce70ce60c820c810ce70c820ce80ce70c810c800ce80c810ce90ce80c800c7f0ce90c800c7e0ce90c7f0c7e0cea0ce90ceb0cea0c7e0c7d0ceb0c7e0cec0ceb0c7d0c7c0cec0c7d0c7b0cec0c7c0ced0cec0c7b0c7a0ced0c7b0cee0ced0c7a0c790cee0c7a0cef0cee0c790c780cef0c790cf00cef0c780c770cf00c780cf10cf00c770c760cf10c770cf20cf10c760c750cf20c760cf30cf20c750c740cf30c750cf40cf30c740c730cf40c740cf50cf40c730c720cf50c730cf60cf50c720c710cf60c720cf70cf60c710c700cf70c710cf80cf70c700c6f0cf80c700cf90cf80c6f0c6e0cf90c6f0cfa0cf90c6e0c6d0cfa0c6e0cfb0cfa0c6d0c6c0cfb0c6d0cfc0cfb0c6c0c6b0cfc0c6c0cfd0cfc0c6b0c6a0cfd0c6b0cfe0cfd0c6a0c690cfe0c6a0cff0cfe0c690c680cff0c690cff0c000dfe0c000d010dfe0cfe0c010dfd0c010d020dfd0cfd0c020dfc0c020d030dfc0cfc0c030dfb0c030d040dfb0cfb0c040dfa0c040d050dfa0cfa0c050df90c050d060df90cf90c060df80c060d070df80cf80c070df70c070d080df70cf70c080df60c080d090df60cf60c090df50c090d0a0df50cf50c0a0df40c0a0d0b0df40cf40c0b0df30c0b0d0c0df30cf30c0c0df20c0c0d0d0df20cf20c0d0df10c0d0d0e0df10cf10c0e0df00c0e0d0f0df00cf00c0f0def0c0f0d100def0cef0c100dee0c100d110dee0cee0c110ded0c110d120ded0ced0c120dec0cec0c120deb0c120d130deb0ceb0c130dea0c130d140dea0cea0c140d150dea0c150de90ce90c150de80c150d160de80ce80c160de70c160d170de70ce70c170de60c170d180de60ce60c180de50c180d190de50ce50c190de40c190d1a0de40ce40c1a0de30c1a0d1b0de30ce30c1b0de20c1b0d1c0de20ce20c1c0de10c1c0d1d0de10ce10c1d0de00c1d0d1e0de00ce00c1e0ddf0c1e0d1f0ddf0cdf0c1f0dde0c1f0d200dde0cde0c200ddd0c200d210ddd0cdd0c210ddc0c210d220ddc0cdc0c220ddb0c220d230ddb0cdb0c230dda0c230d240dda0cda0c240dd90c240d250dd90cd90c250dd80cd80c250d260dd80c260dd70cd70c260dd60c260d270dd60cd60c270dd50c270d280dd50cd50c280dd40c280d290dd40cd40c290dd30c290d2a0dd30cd30c2a0dd20c2a0d2b0dd20cd20c2b0dd10c2b0d2c0dd10cd10c2c0dd00c2c0d2d0dd00cd00c2d0dcf0c2d0d2e0dcf0ccf0c2e0dce0c2e0d2f0dce0cce0c2f0dcd0c2f0d300dcd0ccd0c300dcc0c300d310dcc0ccc0c310dcb0c310d320dcb0ccb0c320dca0c320d330dca0cca0c330dc90c330d340dc90cc90c340dc80c340d350dc80cc80c350dc70c350d360dc70cc70c360dc60c360d370dc60cc60c370dc50c370d380dc50cc50c380dc40c380d390dc40cc40c390dc30cc30c390d3a0dc30c3a0dc20cc20c3a0dc10c3a0d3b0dc10cc10c3b0dc00c3b0d3c0dc00cc00c3c0dbf0c3c0d3d0dbf0cbf0c3d0dbe0c3d0d3e0dbe0cbe0c3e0dbd0c3e0d3f0dbd0cbd0c3f0dbc0c3f0d400dbc0cbc0c400dbb0c400d410dbb0cbb0c410dba0c410d420dba0cba0c420db90c420d430db90cb90c430d440db90c440db30cb30c440db40c440d450db40cb40c450db50c450d460db50cb50c460db60c460d470db60cb60c470db70c470d480db70cb70c480db80c480d490db80cb80c490d110c490d4a0d110c110c4a0d100c4a0d4b0d100c100c4b0d4c0d100c4c0d0a0c0a0c4c0d0b0c4c0d4d0d0b0c0b0c4d0d0c0c4d0d4e0d0c0c0c0c4e0d0d0c4e0d4f0d0d0c0d0c4f0d0e0c4f0d500d0e0c0e0c500d0f0c4b0d510d4c0d4c0d510d4d0d510d520d4d0d4d0d520d4e0d520d530d4e0d4e0d530d4f0d530d540d4f0d4f0d540d500d4b0d550d510d550d560d510d510d560d520d560d570d520d520d570d530d570d580d530d530d580d540d550d590d560d5a0d590d550d5b0d5a0d550d5b0d550d4b0d4a0d5b0d4b0d5c0d5b0d4a0d490d5c0d4a0d5d0d5c0d490d480d5d0d490d5e0d5d0d480d470d5e0d480d5f0d5e0d470d460d5f0d470d600d5f0d460d450d600d460d610d600d450d440d610d450d430d610d440d430d620d610d630d620d430d420d630d430d640d630d420d410d640d420d650d640d410d400d650d410d660d650d400d3f0d660d400d670d660d3f0d3e0d670d3f0d680d670d3e0d3d0d680d3e0d690d680d3d0d3c0d690d3d0d6a0d690d3c0d3b0d6a0d3c0d6b0d6a0d3b0d3a0d6b0d3b0d390d6b0d3a0d390d6c0d6b0d380d6c0d390d6d0d6c0d380d370d6d0d380d6e0d6d0d370d360d6e0d370d6f0d6e0d360d350d6f0d360d700d6f0d350d340d700d350d710d700d340d330d710d340d720d710d330d320d720d330d730d720d320d310d730d320d740d730d310d300d740d310d750d740d300d2f0d750d300d760d750d2f0d2e0d760d2f0d770d760d2e0d2d0d770d2e0d780d770d2d0d2c0d780d2d0d790d780d2c0d2b0d790d2c0d7a0d790d2b0d2a0d7a0d2b0d7b0d7a0d2a0d290d7b0d2a0d7c0d7b0d290d280d7c0d290d7d0d7c0d280d270d7d0d280d7e0d7d0d270d260d7e0d270d250d7e0d260d250d7f0d7e0d240d7f0d250d800d7f0d240d230d800d240d810d800d230d220d810d230d820d810d220d210d820d220d830d820d210d200d830d210d840d830d200d1f0d840d200d850d840d1f0d1e0d850d1f0d860d850d1e0d1d0d860d1e0d870d860d1d0d1c0d870d1d0d880d870d1c0d1b0d880d1c0d890d880d1b0d1a0d890d1b0d8a0d890d1a0d190d8a0d1a0d8b0d8a0d190d180d8b0d190d8c0d8b0d180d170d8c0d180d8d0d8c0d170d160d8d0d170d8e0d8d0d160d150d8e0d160d140d8e0d150d140d8f0d8e0d900d8f0d140d130d900d140d910d900d130d120d910d130d110d910d120d920d910d110d100d920d110d930d920d100d0f0d930d100d940d930d0f0d0e0d940d0f0d950d940d0e0d0d0d950d0e0d960d950d0d0d0c0d960d0d0d970d960d0c0d0b0d970d0c0d980d970d0b0d0a0d980d0b0d990d980d0a0d090d990d0a0d9a0d990d090d080d9a0d090d9b0d9a0d080d070d9b0d080d9c0d9b0d070d060d9c0d070d9d0d9c0d060d050d9d0d060d9e0d9d0d050d040d9e0d050d9f0d9e0d040d030d9f0d040da00d9f0d030d020da00d030da10da00d020d010da10d020da20da10d010d000da20d010da20da30da10da30da40da10da10da40da00da40da50da00da00da50d9f0da50da60d9f0d9f0da60d9e0da60da70d9e0d9e0da70d9d0da70da80d9d0d9d0da80d9c0da80da90d9c0d9c0da90d9b0da90daa0d9b0d9b0daa0d9a0daa0dab0d9a0d9a0dab0d990dab0dac0d990d990dac0d980dac0dad0d980d980dad0d970dad0dae0d970d970dae0d960dae0daf0d960d960daf0d950daf0db00d950d950db00d940db00db10d940d940db10d930db10db20d930d930db20d920db20db30d920d920db30d910d910db30d900db30db40d900d900db40d8f0db40db50d8f0d8f0db50db60d8f0db60d8e0d8e0db60d8d0db60db70d8d0d8d0db70d8c0db70db80d8c0d8c0db80d8b0db80db90d8b0d8b0db90d8a0db90dba0d8a0d8a0dba0d890dba0dbb0d890d890dbb0d880dbb0dbc0d880d880dbc0d870dbc0dbd0d870d870dbd0d860dbd0dbe0d860d860dbe0d850dbe0dbf0d850d850dbf0d840dbf0dc00d840d840dc00d830dc00dc10d830d830dc10d820dc10dc20d820d820dc20d810dc20dc30d810d810dc30d800dc30dc40d800d800dc40d7f0d7f0dc40dc50d7f0dc50d7e0d7e0dc50d7d0dc50dc60d7d0d7d0dc60d7c0dc60dc70d7c0d7c0dc70d7b0dc70dc80d7b0d7b0dc80d7a0dc80dc90d7a0d7a0dc90d790dc90dca0d790d790dca0d780dca0dcb0d780d780dcb0d770dcb0dcc0d770d770dcc0d760dcc0dcd0d760d760dcd0d750dcd0dce0d750d750dce0d740dce0dcf0d740d740dcf0d730dcf0dd00d730d730dd00d720dd00dd10d720d720dd10d710dd10dd20d710d710dd20d700dd20dd30d700d700dd30d6f0dd30dd40d6f0d6f0dd40d6e0dd40dd50d6e0d6e0dd50d6d0dd50dd60d6d0d6d0dd60d6c0d6c0dd60dd70d6c0dd70d6b0d6b0dd70d6a0dd70dd80d6a0d6a0dd80d690dd80dd90d690d690dd90d680dd90dda0d680d680dda0d670dda0ddb0d670d670ddb0d660ddb0ddc0d660d660ddc0d650ddc0ddd0d650d650ddd0d640ddd0dde0d640d640dde0d630dde0ddf0d630d630ddf0d620ddf0de00d620d620de00de10d620de10d610d610de10d600de10de20d600d600de20d5f0de20de30d5f0d5f0de30d5e0de30de40d5e0d5e0de40d5d0de40de50d5d0d5d0de50d5c0de50de60d5c0d5c0de60d5b0de60d5a0d5b0de00de70de10de10de70de20de70de80de20de20de80de30de80de90de30de30de90de40de90dea0de40de40dea0de50dea0deb0de50de50deb0de60deb0dec0de60de60dec0d5a0dec0ded0d5a0d5a0ded0d590ded0dee0d590d590dee0def0d590def0d560d560def0d570def0df00d570d570df00d580dee0df10def0def0df10df00de70df20de80df30df20de70de00df30de70df40df30de00ddf0df40de00df50df40ddf0dde0df50ddf0df60df50dde0ddd0df60dde0df70df60ddd0ddc0df70ddd0df80df70ddc0ddb0df80ddc0df90df80ddb0dda0df90ddb0dfa0df90dda0dd90dfa0dda0dfb0dfa0dd90dd80dfb0dd90dfc0dfb0dd80dd70dfc0dd80dd60dfc0dd70dd60dfd0dfc0dd50dfd0dd60dfe0dfd0dd50dd40dfe0dd50dff0dfe0dd40dd30dff0dd40d000eff0dd30dd20d000ed30d010e000ed20dd10d010ed20d020e010ed10dd00d020ed10d030e020ed00dcf0d030ed00d040e030ecf0dce0d040ecf0d050e040ece0dcd0d050ece0d060e050ecd0dcc0d060ecd0d070e060ecc0dcb0d070ecc0d080e070ecb0dca0d080ecb0d090e080eca0dc90d090eca0d0a0e090ec90dc80d0a0ec90d0b0e0a0ec80dc70d0b0ec80d0c0e0b0ec70dc60d0c0ec70d0d0e0c0ec60dc50d0d0ec60dc40d0d0ec50dc40d0e0e0d0ec30d0e0ec40d0f0e0e0ec30dc20d0f0ec30d100e0f0ec20dc10d100ec20d110e100ec10dc00d110ec10d120e110ec00dbf0d120ec00d130e120ebf0dbe0d130ebf0d140e130ebe0dbd0d140ebe0d150e140ebd0dbc0d150ebd0d160e150ebc0dbb0d160ebc0d170e160ebb0dba0d170ebb0d180e170eba0db90d180eba0d190e180eb90db80d190eb90d1a0e190eb80db70d1a0eb80d1b0e1a0eb70db60d1b0eb70db50d1b0eb60db50d1c0e1b0e1d0e1c0eb50db40d1d0eb50d1e0e1d0eb40db30d1e0eb40db20d1e0eb30d1f0e1e0eb20db10d1f0eb20d200e1f0eb10db00d200eb10d210e200eb00daf0d210eb00d220e210eaf0dae0d220eaf0d230e220eae0dad0d230eae0d240e230ead0dac0d240ead0d250e240eac0dab0d250eac0d260e250eab0daa0d260eab0d270e260eaa0da90d270eaa0d280e270ea90da80d280ea90d290e280ea80da70d290ea80d2a0e290ea70da60d2a0ea70d2b0e2a0ea60da50d2b0ea60d2c0e2b0ea50da40d2c0ea50d2d0e2c0ea40da30d2d0ea40d2d0e2e0e2c0e2e0e2f0e2c0e2c0e2f0e2b0e2f0e300e2b0e2b0e300e2a0e300e310e2a0e2a0e310e290e310e320e290e290e320e280e320e330e280e280e330e270e330e340e270e270e340e260e340e350e260e260e350e250e350e360e250e250e360e240e360e370e240e240e370e230e370e380e230e230e380e220e380e390e220e220e390e210e390e3a0e210e210e3a0e200e3a0e3b0e200e200e3b0e1f0e3b0e3c0e1f0e1f0e3c0e1e0e1e0e3c0e1d0e3c0e3d0e1d0e1d0e3d0e1c0e3d0e3e0e1c0e1c0e3e0e3f0e1c0e3f0e1b0e1b0e3f0e1a0e3f0e400e1a0e1a0e400e190e400e410e190e190e410e180e410e420e180e180e420e170e420e430e170e170e430e160e430e440e160e160e440e150e440e450e150e150e450e140e450e460e140e140e460e130e460e470e130e130e470e120e470e480e120e120e480e110e480e490e110e110e490e100e490e4a0e100e100e4a0e0f0e4a0e4b0e0f0e0f0e4b0e0e0e0e0e4b0e4c0e0e0e4c0e0d0e0d0e4c0e0c0e4c0e4d0e0c0e0c0e4d0e0b0e4d0e4e0e0b0e0b0e4e0e0a0e4e0e4f0e0a0e0a0e4f0e090e4f0e500e090e090e500e080e500e510e080e080e510e070e510e520e070e070e520e060e520e530e060e060e530e050e530e540e050e050e540e040e540e550e040e040e550e030e550e560e030e030e560e020e560e570e020e020e570e010e570e580e010e010e580e000e580e590e000e000e590eff0d590e5a0eff0dff0d5a0efe0d5a0e5b0efe0dfe0d5b0efd0dfd0d5b0e5c0efd0d5c0efc0dfc0d5c0efb0d5c0e5d0efb0dfb0d5d0efa0d5d0e5e0efa0dfa0d5e0ef90d5e0e5f0ef90df90d5f0ef80d5f0e600ef80df80d600ef70d600e610ef70df70d610ef60d610e620ef60df60d620ef50d620e630ef50df50d630ef40d630e640ef40df40d640ef30d640e650ef30df30d650ef20d650e660ef20df20d660e670ef20d670ee80de80d670ee90d670e680ee90de90d680eea0d680e690eea0dea0d690eeb0d690e6a0eeb0deb0d6a0eec0d6a0e6b0eec0dec0d6b0eed0d6b0e6c0eed0ded0d6c0eee0d6c0e6d0eee0dee0d6d0ef10d660e6e0e670e670e6e0e680e6e0e6f0e680e680e6f0e690e6f0e700e690e690e700e6a0e700e710e6a0e6a0e710e6b0e710e720e6b0e6b0e720e6c0e720e730e6c0e6c0e730e6d0e6e0e740e6f0e750e740e6e0e660e750e6e0e760e750e660e650e760e660e770e760e650e640e770e650e780e770e640e630e780e640e790e780e630e620e790e630e7a0e790e620e610e7a0e620e7b0e7a0e610e600e7b0e610e7c0e7b0e600e5f0e7c0e600e7d0e7c0e5f0e5e0e7d0e5f0e7e0e7d0e5e0e5d0e7e0e5e0e7f0e7e0e5d0e5c0e7f0e5d0e5b0e7f0e5c0e5b0e800e7f0e5a0e800e5b0e810e800e5a0e590e810e5a0e820e810e590e580e820e590e830e820e580e570e830e580e840e830e570e560e840e570e850e840e560e550e850e560e860e850e550e540e860e550e870e860e540e530e870e540e880e870e530e520e880e530e890e880e520e510e890e520e8a0e890e510e500e8a0e510e8b0e8a0e500e4f0e8b0e500e8c0e8b0e4f0e4e0e8c0e4f0e8d0e8c0e4e0e4d0e8d0e4e0e8e0e8d0e4d0e4c0e8e0e4d0e4b0e8e0e4c0e4b0e8f0e8e0e4a0e8f0e4b0e900e8f0e4a0e490e900e4a0e910e900e490e480e910e490e920e910e480e470e920e480e930e920e470e460e930e470e940e930e460e450e940e460e950e940e450e440e950e450e960e950e440e430e960e440e970e960e430e420e970e430e980e970e420e410e980e420e990e980e410e400e990e410e9a0e990e400e3f0e9a0e400e3e0e9a0e3f0e3e0e9b0e9a0e9c0e9b0e3e0e3d0e9c0e3e0e9d0e9c0e3d0e3c0e9d0e3d0e3b0e9d0e3c0e9e0e9d0e3b0e3a0e9e0e3b0e9f0e9e0e3a0e390e9f0e3a0ea00e9f0e390e380ea00e390ea10ea00e380e370ea10e380ea20ea10e370e360ea20e370ea30ea20e360e350ea30e360ea40ea30e350e340ea40e350ea50ea40e340e330ea50e340ea60ea50e330e320ea60e330ea70ea60e320e310ea70e320ea80ea70e310e300ea80e310ea90ea80e300e2f0ea90e300eaa0ea90e2f0e2e0eaa0e2f0eaa0eab0ea90eab0eac0ea90ea90eac0ea80eac0ead0ea80ea80ead0ea70ead0eae0ea70ea70eae0ea60eae0eaf0ea60ea60eaf0ea50eaf0eb00ea50ea50eb00ea40eb00eb10ea40ea40eb10ea30eb10eb20ea30ea30eb20ea20eb20eb30ea20ea20eb30ea10eb30eb40ea10ea10eb40ea00eb40eb50ea00ea00eb50e9f0eb50eb60e9f0e9f0eb60e9e0eb60eb70e9e0e9e0eb70e9d0e9d0eb70e9c0eb70eb80e9c0e9c0eb80e9b0eb80eb90e9b0e9b0eb90eba0e9b0eba0e9a0e9a0eba0e990eba0ebb0e990e990ebb0e980ebb0ebc0e980e980ebc0e970ebc0ebd0e970e970ebd0e960ebd0ebe0e960e960ebe0e950ebe0ebf0e950e950ebf0e940ebf0ec00e940e940ec00e930ec00ec10e930e930ec10e920ec10ec20e920e920ec20e910ec20ec30e910e910ec30e900ec30ec40e900e900ec40e8f0e8f0ec40ec50e8f0ec50e8e0e8e0ec50e8d0ec50ec60e8d0e8d0ec60e8c0ec60ec70e8c0e8c0ec70e8b0ec70ec80e8b0e8b0ec80e8a0ec80ec90e8a0e8a0ec90e890ec90eca0e890e890eca0e880eca0ecb0e880e880ecb0e870ecb0ecc0e870e870ecc0e860ecc0ecd0e860e860ecd0e850ecd0ece0e850e850ece0e840ece0ecf0e840e840ecf0e830ecf0ed00e830e830ed00e820ed00ed10e820e820ed10e810ed10ed20e810e810ed20e800e800ed20ed30e800ed30e7f0e7f0ed30e7e0ed30ed40e7e0e7e0ed40e7d0ed40ed50e7d0e7d0ed50e7c0ed50ed60e7c0e7c0ed60e7b0ed60ed70e7b0e7b0ed70e7a0ed70ed80e7a0e7a0ed80e790ed80ed90e790e790ed90e780ed90eda0e780e780eda0e770eda0edb0e770e770edb0e760edb0edc0e760e760edc0e750edc0edd0e750e750edd0e740edd0ede0e740e740ede0edf0e740edf0e6f0e6f0edf0e700edf0ee00e700e700ee00e710ee00ee10e710e710ee10e720ee10ee20e720e720ee20e730ede0ee30edf0edf0ee30ee00ee30ee40ee00ee00ee40ee10ee40ee50ee10ee10ee50ee20edd0ee60ede0ee70ee60edd0edc0ee70edd0ee80ee70edc0edb0ee80edc0ee90ee80edb0eda0ee90edb0eea0ee90eda0ed90eea0eda0eeb0eea0ed90ed80eeb0ed90eec0eeb0ed80ed70eec0ed80eed0eec0ed70ed60eed0ed70eee0eed0ed60ed50eee0ed60eef0eee0ed50ed40eef0ed50ef00eef0ed40ed30ef00ed40ed20ef00ed30ed20ef10ef00ed10ef10ed20ef20ef10ed10ed00ef20ed10ef30ef20ed00ecf0ef30ed00ef40ef30ecf0ece0ef40ecf0ef50ef40ece0ecd0ef50ece0ef60ef50ecd0ecc0ef60ecd0ef70ef60ecc0ecb0ef70ecc0ef80ef70ecb0eca0ef80ecb0ef90ef80eca0ec90ef90eca0efa0ef90ec90ec80efa0ec90efb0efa0ec80ec70efb0ec80efc0efb0ec70ec60efc0ec70efd0efc0ec60ec50efd0ec60ec40efd0ec50ec40efe0efd0ec30efe0ec40eff0efe0ec30ec20eff0ec30e000fff0ec20ec10e000fc20e010f000fc10ec00e010fc10e020f010fc00ebf0e020fc00e030f020fbf0ebe0e030fbf0e040f030fbe0ebd0e040fbe0e050f040fbd0ebc0e050fbd0e060f050fbc0ebb0e060fbc0e070f060fbb0eba0e070fbb0eb90e070fba0eb90e080f070f090f080fb90eb80e090fb90e0a0f090fb80eb70e0a0fb80eb60e0a0fb70e0b0f0a0fb60eb50e0b0fb60e0c0f0b0fb50eb40e0c0fb50e0d0f0c0fb40eb30e0d0fb40e0e0f0d0fb30eb20e0e0fb30e0f0f0e0fb20eb10e0f0fb20e100f0f0fb10eb00e100fb10e110f100fb00eaf0e110fb00e120f110faf0eae0e120faf0e130f120fae0ead0e130fae0e140f130fad0eac0e140fad0e150f140fac0eab0e150fac0e150f160f140f160f170f140f140f170f130f170f180f130f130f180f120f180f190f120f120f190f110f190f1a0f110f110f1a0f100f1a0f1b0f100f100f1b0f0f0f1b0f1c0f0f0f0f0f1c0f0e0f1c0f1d0f0e0f0e0f1d0f0d0f1d0f1e0f0d0f0d0f1e0f0c0f1e0f1f0f0c0f0c0f1f0f0b0f1f0f200f0b0f0b0f200f0a0f0a0f200f090f200f210f090f090f210f080f210f220f080f080f220f230f080f230f070f070f230f060f230f240f060f060f240f050f240f250f050f050f250f040f250f260f040f040f260f030f260f270f030f030f270f020f270f280f020f020f280f010f280f290f010f010f290f000f290f2a0f000f000f2a0fff0e2a0f2b0fff0eff0e2b0ffe0efe0e2b0f2c0ffe0e2c0ffd0efd0e2c0ffc0e2c0f2d0ffc0efc0e2d0ffb0e2d0f2e0ffb0efb0e2e0ffa0e2e0f2f0ffa0efa0e2f0ff90e2f0f300ff90ef90e300ff80e300f310ff80ef80e310ff70e310f320ff70ef70e320ff60e320f330ff60ef60e330ff50e330f340ff50ef50e340ff40e340f350ff40ef40e350ff30e350f360ff30ef30e360ff20e360f370ff20ef20e370ff10ef10e370f380ff10e380ff00ef00e380fef0e380f390fef0eef0e390fee0e390f3a0fee0eee0e3a0fed0e3a0f3b0fed0eed0e3b0fec0e3b0f3c0fec0eec0e3c0feb0e3c0f3d0feb0eeb0e3d0fea0e3d0f3e0fea0eea0e3e0fe90e3e0f3f0fe90ee90e3f0fe80e3f0f400fe80ee80e400fe70e400f410fe70ee70e410fe60e410f420fe60ee60e420f430fe60e430fde0ede0e430fe30e430f440fe30ee30e440fe40e440f450fe40ee40e450fe50e420f460f430f430f460f440f460f470f440f440f470f450f3f0f480f400f480f490f400f400f490f410f490f4a0f410f410f4a0f420f4a0f4b0f420f420f4b0f460f4b0f4c0f460f460f4c0f470f480f4d0f490f4e0f4d0f480f4f0f4e0f480f4f0f480f3f0f3e0f4f0f3f0f500f4f0f3e0f3d0f500f3e0f510f500f3d0f3c0f510f3d0f520f510f3c0f3b0f520f3c0f530f520f3b0f3a0f530f3b0f540f530f3a0f390f540f3a0f550f540f390f380f550f390f370f550f380f370f560f550f360f560f370f570f560f360f350f570f360f580f570f350f340f580f350f590f580f340f330f590f340f5a0f590f330f320f5a0f330f5b0f5a0f320f310f5b0f320f5c0f5b0f310f300f5c0f310f5d0f5c0f300f2f0f5d0f300f5e0f5d0f2f0f2e0f5e0f2f0f5f0f5e0f2e0f2d0f5f0f2e0f600f5f0f2d0f2c0f600f2d0f2b0f600f2c0f2b0f610f600f2a0f610f2b0f620f610f2a0f290f620f2a0f630f620f290f280f630f290f640f630f280f270f640f280f650f640f270f260f650f270f660f650f260f250f660f260f670f660f250f240f670f250f680f670f240f230f680f240f220f680f230f220f690f680f6a0f690f220f210f6a0f220f6b0f6a0f210f200f6b0f210f1f0f6b0f200f6c0f6b0f1f0f1e0f6c0f1f0f6d0f6c0f1e0f1d0f6d0f1e0f6e0f6d0f1d0f1c0f6e0f1d0f6f0f6e0f1c0f1b0f6f0f1c0f700f6f0f1b0f1a0f700f1b0f710f700f1a0f190f710f1a0f720f710f190f180f720f190f730f720f180f170f730f180f740f730f170f160f740f170f740f750f730f750f760f730f730f760f720f760f770f720f720f770f710f770f780f710f710f780f700f780f790f700f700f790f6f0f790f7a0f6f0f6f0f7a0f6e0f7a0f7b0f6e0f6e0f7b0f6d0f7b0f7c0f6d0f6d0f7c0f6c0f7c0f7d0f6c0f6c0f7d0f6b0f6b0f7d0f6a0f7d0f7e0f6a0f6a0f7e0f690f7e0f7f0f690f690f7f0f800f690f800f680f680f800f670f800f810f670f670f810f660f810f820f660f660f820f650f820f830f650f650f830f640f830f840f640f640f840f630f840f850f630f630f850f620f850f860f620f620f860f610f610f860f870f610f870f600f600f870f5f0f870f880f5f0f5f0f880f5e0f880f890f5e0f5e0f890f5d0f890f8a0f5d0f5d0f8a0f5c0f8a0f8b0f5c0f5c0f8b0f5b0f8b0f8c0f5b0f5b0f8c0f5a0f8c0f8d0f5a0f5a0f8d0f590f8d0f8e0f590f590f8e0f580f8e0f8f0f580f580f8f0f570f8f0f900f570f570f900f560f560f900f910f560f910f550f550f910f540f910f920f540f540f920f530f920f930f530f530f930f520f930f940f520f520f940f510f940f950f510f510f950f500f950f960f500f500f960f4f0f960f4e0f4f0f900f970f910f910f970f920f970f980f920f920f980f930f980f990f930f930f990f940f990f9a0f940f940f9a0f950f9a0f9b0f950f950f9b0f960f9b0f9c0f960f960f9c0f4e0f9c0f9d0f4e0f4e0f9d0f4d0f9d0f9e0f4d0f4d0f9e0f9f0f4d0f9f0f490f490f9f0f4a0f9f0fa00f4a0f4a0fa00f4b0fa00fa10f4b0f4b0fa10f4c0f9e0fa20f9f0f9f0fa20fa00fa20fa30fa00fa00fa30fa10f990fa40f9a0fa40fa50f9a0f9a0fa50f9b0fa50fa60f9b0f9b0fa60f9c0fa60fa70f9c0f9c0fa70f9d0fa70fa80f9d0f9d0fa80f9e0fa80fa90f9e0f9e0fa90fa20fa90faa0fa20fa20faa0fa30fa40fab0fa50fac0fab0fa40fad0fac0fa40fad0fa40f990f980fad0f990fae0fad0f980f970fae0f980faf0fae0f970f900faf0f970f8f0faf0f900fb00faf0f8f0f8e0fb00f8f0fb10fb00f8e0f8d0fb10f8e0fb20fb10f8d0f8c0fb20f8d0fb30fb20f8c0f8b0fb30f8c0fb40fb30f8b0f8a0fb40f8b0fb50fb40f8a0f890fb50f8a0fb60fb50f890f880fb60f890fb70fb60f880f870fb70f880f860fb70f870f860fb80fb70f850fb80f860fb90fb80f850f840fb90f850fba0fb90f840f830fba0f840fbb0fba0f830f820fbb0f830fbc0fbb0f820f810fbc0f820fbd0fbc0f810f800fbd0f810f7f0fbd0f800fb80fbe0fb70fb70fbe0fb60fbe0fbf0fb60fb60fbf0fb50fbf0fc00fb50fb50fc00fb40fc00fc10fb40fb40fc10fb30fc10fc20fb30fb30fc20fb20fc20fc30fb20fb20fc30fb10fc30fc40fb10fb10fc40fb00fc40fc50fb00fb00fc50faf0faf0fc50fae0fc50fc60fae0fae0fc60fad0fc60fac0fad0fc00fc70fc10fc70fc80fc10fc10fc80fc20fc80fc90fc20fc20fc90fc30fc90fca0fc30fc30fca0fc40fca0fcb0fc40fc40fcb0fc50fc50fcb0fc60fcb0fcc0fc60fc60fcc0fac0fcc0fcd0fac0fac0fcd0fab0fcd0fce0fab0fab0fce0fcf0fab0fcf0fa50fa50fcf0fa60fcf0fd00fa60fa60fd00fa70fd00fd10fa70fa70fd10fa80fd10fd20fa80fa80fd20fa90fd20fd30fa90fa90fd30faa0fce0fd40fcf0fcf0fd40fd00fd40fd50fd00fd00fd50fd10fd50fd60fd10fd10fd60fd20fd60fd70fd20fd20fd70fd30fce0fd80fd40fd80fd90fd40fd40fd90fd50fd90fda0fd50fd50fda0fd60fda0fdb0fd60fd60fdb0fd70fd80fdc0fd90fdd0fdc0fd80fde0fdd0fd80fde0fd80fce0fcd0fde0fce0fdf0fde0fcd0fcc0fdf0fcd0fe00fdf0fcc0fcb0fe00fcc0fca0fe00fcb0fe10fe00fca0fc90fe10fca0fe20fe10fc90fc80fe20fc90fe30fe20fc80fc70fe30fc80fe40fe30fc70fe50fe40fc70fe50fc70fc00fbf0fe50fc00fe60fe50fbf0fbe0fe60fbf0fe70fe60fbe0fb80fe70fbe0fb90fe70fb80fe80fe70fb90fba0fe80fb90fe90fe80fba0fbb0fe90fba0fea0fe90fbb0fbc0fea0fbb0feb0fea0fbc0fbd0feb0fbc0fec0feb0fbd0f7f0fec0fbd0fed0fec0f7f0f7e0fed0f7f0fee0fed0f7e0f7d0fee0f7e0f7c0fee0f7d0fef0fee0f7c0f7b0fef0f7c0ff00fef0f7b0f7a0ff00f7b0ff10ff00f7a0f790ff10f7a0ff20ff10f790f780ff20f790ff30ff20f780f770ff30f780ff40ff30f770f760ff40f770ff50ff40f760f750ff50f760ff50ff60ff40ff60ff70ff40ff40ff70ff30ff70ff80ff30ff30ff80ff20ff80ff90ff20ff20ff90ff10ff90ffa0ff10ff10ffa0ff00ffa0ffb0ff00ff00ffb0fef0ffb0ffc0fef0fef0ffc0fee0fee0ffc0fed0ffc0ffd0fed0fed0ffd0fec0ffd0ffe0fec0fec0ffe0feb0ffe0fff0feb0feb0fff0fea0fff0f0010ea0fea0f0010e90f00100110e90fe90f0110e80f01100210e80fe80f0210e70fe70f0210e60f02100310e60fe60f0310e50f0310e40fe50ffd0f0410fe0f04100510fe0ffe0f0510ff0f05100610ff0fff0f0610001006100710001000100710011007100810011001100810021002100810031008100910031003100910e40f09100a10e40fe40f0a10e30f0a100b10e30fe30f0b10e20f0b100c10e20fe20f0c10e10f0c100d10e10fe10f0d10e00fe00f0d10df0f0d100e10df0fdf0f0e10de0f0e10dd0fde0f06100f1007100f1010100710071010100810081010100910101011100910091011100a10111012100a100a1012100b10121013100b100b1013100c10131014100c100c1014100d100d1014100e10141015100e100e101510dd0f15101610dd0fdd0f1610dc0f16101710dc0fdc0f17101810dc0f1810d90fd90f1810da0f18101910da0fda0f1910db0f17101a10181018101a10191013101b10141014101b1015101b101c10151015101c1016101c101d10161016101d1017101d101e10171017101e101a101b101f101c1020101f101b1020101b1013101210201013102110201012101110211012102210211011101010221011100f1022101010231022100f10241023100f1024100f10061005102410061025102410051004102510051026102510041027102610041027100410fd0ffc0f2710fd0ffb0f2710fc0f28102710fb0f281026102710fa0f2810fb0f29102810fa0ff90f2910fa0f2a102910f90ff80f2a10f90f2b102a10f80ff70f2b10f80f2c102b10f70ff60f2c10f70f2c102d102b102d102e102b102b102e102a102e102f102a102a102f1029102f10301029102910301028103010261028102d1031102e10311032102e102e1032102f10321033102f102f103310301033103410301030103410261026103410251034103510251025103510241035102310241031103610321036103710321032103710331037103810331033103810341034103810351038103910351035103910231039103a10231023103a10221022103a1021103a103b10211021103b1020103b101f10201036103c1037103c103d10371037103d10381038103d1039103d103e10391039103e103a103a103e103b103e103f103b103b103f101f101f103f1040101f1040101c101c1040101d10401041101d101d1041101e103f10421040104010421041103c1043103d103d1044103e103e1045103f103f1046104210180025001900ca01d301cb01de01e701df0183028c028402190322031a033f0348034003ef03f803f0036f057805700586058f058705100619061106400649064106e606ef06e7069807a1079907ff0608070007b407bd07b5077d0886087e08
+ m_Skin: []
+ m_VertexData:
+ m_CurrentChannels: 139
+ m_VertexCount: 4167
+ m_Channels:
+ - stream: 0
+ offset: 0
+ format: 0
+ dimension: 3
+ - stream: 0
+ offset: 12
+ format: 0
+ dimension: 3
+ - stream: 0
+ offset: 0
+ format: 0
+ dimension: 0
+ - stream: 0
+ offset: 24
+ format: 0
+ dimension: 2
+ - stream: 0
+ offset: 0
+ format: 0
+ dimension: 0
+ - stream: 0
+ offset: 0
+ format: 0
+ dimension: 0
+ - stream: 0
+ offset: 0
+ format: 0
+ dimension: 0
+ - stream: 0
+ offset: 32
+ format: 0
+ dimension: 4
+ m_DataSize: 200016
+ _typelessdata: 00000000000080bf0000000000000000000080bf000000000000003e00000000f30435bf00000000f304353f000080bf00000000eedd7fbf720f043d00000000eedd7fbf720f043d00000080e32b283c000080bf0000000000000000000080bf720f04bdeedd7fbf00000000720f04bdeedd7fbf000000000000803ee32b283c0000008000000000000080bf000080bfc36108bd4db77fbfc361083dc36108bd4db77fbfc361083d0000003e59ab753cf30435bf00000000f30435bf000080bf00000000d96e7fbf1e3b883d00000000d96e7fbf1e3b883d000000804195ad3c000080bf0000000000000000000080bf1e3b88bdd96e7fbf000000001e3b88bdd96e7fbf000000000000803e4195ad3c0000008000000000000080bf000080bfc36108bd4db77fbfc36108bdc36108bd4db77fbfc36108bd0000c03e59ab753cf304353f00000000f30435bf000080bf00000000eedd7fbf720f04bd00000000eedd7fbf720f04bd0000003fe32b283c0000803f0000000000000000000080bf00000000000080bf0000000000000000000080bf000000000000c03e00000000f30435bf00000000f30435bf000080bf00000000d96e7fbf1e3b88bd00000000d96e7fbf1e3b88bd0000003f4195ad3c0000803f0000000000000000000080bfc361083d4db77fbfc36108bdc361083d4db77fbfc36108bd0000203f59ab753cf304353f00000000f304353f000080bf720f043deedd7fbf00000000720f043deedd7fbf000000000000403fe32b283c00000080000000000000803f000080bf00000000000080bf0000000000000000000080bf000000000000203f00000000f304353f00000000f30435bf000080bf1e3b883dd96e7fbf000000001e3b883dd96e7fbf000000000000403f4195ad3c00000080000000000000803f000080bfc361083d4db77fbfc361083dc361083d4db77fbfc361083d0000603f59ab753cf30435bf00000000f304353f000080bf00000000eedd7fbf720f043d00000000eedd7fbf720f043d0000803fe32b283c000080bf0000000000000000000080bf00000000000080bf0000000000000000000080bf000000000000603f00000000f304353f00000000f304353f000080bf00000000d96e7fbf1e3b883d00000000d96e7fbf1e3b883d0000803f4195ad3c000080bf0000000000000000000080bfc9d20cbd0d3e7fbfc9d28c3dc9d20cbd0d3e7fbfc9d28c3d2920973da5a9c83c2ef964bf000000002ef9e4be000080bf000000001fa47ebfcabcd23d000000001fa47ebfcabcd23d00000080cc65063d000080bf0000000000000000000080bfc9d28cbd0d3e7fbfc9d20cbdc9d28cbd0d3e7fbfc9d20cbd09c8a53ea5a9c83c2ef9e43e000000002ef964bf000080bfcabcd2bd1fa47ebf00000000cabcd2bd1fa47ebf000000000000803ecc65063d0000008000000000000080bf000080bfc9d20cbd0d3e7fbfc9d28cbdc9d20cbd0d3e7fbfc9d28cbdf637da3ea5a9c83c2ef9643f000000002ef9e4be000080bf000000001fa47ebfcabcd2bd000000001fa47ebfcabcd2bd0000003fcc65063d0000803f0000000000000000000080bfc9d20c3d0d3e7fbfc9d28cbdc9d20c3d0d3e7fbfc9d28cbd05e4123fa5a9c83c2ef9643f000000002ef9e43e000080bfc9d28c3d0d3e7fbfc9d20cbdc9d28c3d0d3e7fbfc9d20cbdfc1b2d3fa5a9c83c2ef9e43e000000002ef9643f000080bfcabcd23d1fa47ebf00000000cabcd23d1fa47ebf000000000000403fcc65063d00000080000000000000803f000080bfc9d20c3d0d3e7fbfc9d28c3dc9d20c3d0d3e7fbfc9d28c3dfb1b6d3fa5a9c83c2ef964bf000000002ef9e43e000080bf000000001fa47ebfcabcd23d000000001fa47ebfcabcd23d0000803fcc65063d000080bf0000000000000000000080bf925c11bdff617ebfdb0ada3d925c11bdff617ebfdb0ada3daebf513dbba0123de9dc72bf000000009be8a1be000080bf00000000546d7dbfc3d0103e00000000546d7dbfc3d0103e000000805e01393d000080bf0000000000000000000080bf878b91bd2cb47ebf878b913d878b91bd2cb47ebf878b913d0000003e0642033df30435bf00000000f30435bf000080bfdb0adabdff617ebf925c11bddb0adabdff617ebf925c11bdf6379a3ebba0123d9be8a13e00000000e9dc72bf000080bfc3d010be546d7dbf00000000c3d010be546d7dbf000000000000803e5e01393d0000008000000000000080bf000080bfdb0adabdff617ebf925c113ddb0adabdff617ebf925c113d14904b3ebba0123d9be8a1be00000000e9dc72bf000080bfc9d28cbd0d3e7fbfc9d20c3dc9d28cbd0d3e7fbfc9d20c3dec6f343ea5a9c83c2ef9e4be000000002ef964bf000080bfdb0ada3dff617ebf925c11bddb0ada3dff617ebf925c11bd05e4323fbba0123d9be8a13e00000000e9dc723f000080bf878b913d2cb47ebf878b91bd878b913d2cb47ebf878b91bd0000203f0642033df304353f00000000f304353f000080bfc3d0103e546d7dbf00000000c3d0103e546d7dbf000000000000403f5e01393d00000080000000000000803f000080bf925c113dff617ebfdb0ada3d925c113dff617ebfdb0ada3d05e4723fbba0123de9dc72bf000000009be8a13e000080bf00000000546d7dbfc3d0103e00000000546d7dbfc3d0103e0000803f5e01393d000080bf0000000000000000000080bf19f715bdfa107dbf19f7153e19f715bdfa107dbf19f7153e86b31f3daf92453d435b78bf00000000435b78be000080bf6f5e96bd5cbf7dbfa78de13d6f5e96bd5cbf7dbfa78de13db6a8bf3d7e152d3d400155bf00000000d5000ebf000080bfa78de1bd5cbf7dbf6f5e963da78de1bd5cbf7dbf6f5e963da42b203e7e152d3dd5000ebf00000000400155bf000080bf19f715befa107dbf18f7153d19f715befa107dbf18f7153d1f13583eaf92453d415b78be00000000435b78bf000080bfa78de13d5cbf7dbf6f5e96bda78de13d5cbf7dbf6f5e96bde90a283f7e152d3dd5000e3f000000004001553f000080bf6f5e963d5cbf7dbfa78de1bd6f5e963d5cbf7dbfa78de1bd17f5173f7e152d3d4001553f00000000d5000e3f000080bf925c113dff617ebfdb0adabd925c113dff617ebfdb0adabdfb1b0d3fbba0123de9dc723f000000009be8a13e000080bf00000000546d7dbfc3d010be00000000546d7dbfc3d010be0000003f5e01393d0000803f0000000000000000000080bf925c11bdff617ebfdb0adabd925c11bdff617ebfdb0adabd0ac8e53ebba0123de9dc723f000000009be8a1be000080bf878b91bd2cb47ebf878b91bd878b91bd2cb47ebf878b91bd0000c03e0642033df304353f00000000f30435bf000080bfa78de1bd5cbf7dbf6f5e96bda78de1bd5cbf7dbf6f5e96bd2eeaaf3e7e152d3dd5000e3f00000000400155bf000080bf19f715befa107dbf19f715bd19f715befa107dbf19f715bd71f6933eaf92453d435b783e00000000435b78bf000080bf9b753abe5eb87bbf000000009b753abe5eb87bbf000000000000803e5ebd6e3d0000008000000000000080bf000080bf6f5e96bd5cbf7dbfa78de1bd6f5e96bd5cbf7dbfa78de1bdd215d03e7e152d3d4001553f00000000d5000ebf000080bf18f715bdfa107dbf19f715be18f715bdfa107dbf19f715be8f09ec3eaf92453d435b783f00000000415b78be000080bf000000005eb87bbf9b753abe000000005eb87bbf9b753abe0000003f5ebd6e3d0000803f0000000000000000000080bf19f7153dfa107dbf19f715be19f7153dfa107dbf19f715be38fb093faf92453d435b783f00000000435b783e000080bff03d41beeb367bbff3971abdf03d41beeb367bbff3971abdd215903ecb7d7c3daad2483e0000000055077bbf000080bf924166beb37179bf00000000924166beb37179bf000000000000803e97d9933d0000008000000000000080bf000080bff03d41beeb367bbff4971a3df03d41beeb367bbff4971a3d5cd45f3ecb7d7c3dacd248be0000000055077bbf000080bf2c421bbe874b7cbf2b429b3d2c421bbe874b7cbf2b429b3dec6f343e3e165e3d2df9e4be000000002ef964bf000080bf1a39e9bd87a87cbf1a39e93d1a39e9bd87a87cbf1a39e93d0000003e94e4523df30435bf00000000f30435bf000080bf2c429bbd874b7cbf2c421b3e2c429bbd874b7cbf2c421b3e2920973d3e165e3d2ef964bf000000002ef9e4be000080bff3971abdeb367bbff03d413ef3971abdeb367bbff03d413e91ae003dcb7d7c3d55077bbf00000000aad248be000080bf000000005eb87bbf9b753a3e000000005eb87bbf9b753a3e000000805ebd6e3d000080bf0000000000000000000080bf00000000b37179bf9241663e00000000b37179bf9241663e0000008097d9933d000080bf0000000000000000000080bf10321fbd39be78bf18cb6e3e10321fbd39be78bf18cb6e3e0552d73c30979b3d50847cbf00000000355828be000080bf00000000d08476bfef0c8a3e00000000d08476bfef0c8a3e0000008053f9b13d000080bf0000000000000000000080bf912aa0bd83427abf3535483e912aa0bd83427abf3535483e360d783d524f8a3da6b06dbf00000000eb26bebe000080bfcdfcf0bd55077bbf89a8203ecdfcf0bd55077bbf89a8203eaebfd13d9bae803dcdcc4cbf00000000999919bf000080bf89a820be55077bbfccfcf03d89a820be55077bbfccfcf03d2920173e9bae803d999919bf00000000cdcc4cbf000080bf353548be83427abf902aa03d353548be83427abf902aa03db3fc413e524f8a3dea26bebe00000000a6b06dbf000080bf18cb6ebe39be78bf10321f3d18cb6ebe39be78bf10321f3dbf15653e30979b3d355828be0000000050847cbf000080bfef0c8abed08476bf00000000ef0c8abed08476bf000000000000803e53f9b13d0000008000000000000080bf000080bf18cb6ebe39be78bf10321fbd18cb6ebe39be78bf10321fbd20758d3e30979b3d3558283e0000000050847cbf000080bf353548be83427abf912aa0bd353548be83427abf912aa0bda7019f3e524f8a3deb26be3e00000000a6b06dbf000080bf2c421bbe874b7cbf2c429bbd2c421bbe874b7cbf2c429bbd09c8a53e3e165e3d2ef9e43e000000002ef964bf000080bf1a39e9bd87a87cbf1a39e9bd1a39e9bd87a87cbf1a39e9bd0000c03e94e4523df304353f00000000f30435bf000080bf2b429bbd874b7cbf2c421bbe2b429bbd874b7cbf2c421bbef637da3e3e165e3d2ef9643f000000002df9e4be000080bff4971abdeb367bbff03d41bef4971abdeb367bbff03d41be2eeaef3ecb7d7c3d55077b3f00000000acd248be000080bf00000000b37179bf924166be00000000b37179bf924166be0000003f97d9933d0000803f0000000000000000000080bff3971a3deb367bbff03d41bef3971a3deb367bbff03d41bee90a083fcb7d7c3d55077b3f00000000aad2483e000080bf2c429b3d874b7cbf2c421bbe2c429b3d874b7cbf2c421bbe05e4123f3e165e3d2ef9643f000000002ef9e43e000080bf1a39e93d87a87cbf1a39e9bd1a39e93d87a87cbf1a39e9bd0000203f94e4523df304353f00000000f304353f000080bf2c421b3e874b7cbf2b429bbd2c421b3e874b7cbf2b429bbdfc1b2d3f3e165e3d2df9e43e000000002ef9643f000080bf19f7153efa107dbf18f715bd19f7153efa107dbf18f715bdc804363faf92453d415b783e00000000435b783f000080bf9b753a3e5eb87bbf000000009b753a3e5eb87bbf000000000000403f5ebd6e3d00000080000000000000803f000080bf19f7153efa107dbf19f7153d19f7153efa107dbf19f7153d38fb493faf92453d435b78be00000000435b783f000080bfdb0ada3dff617ebf925c113ddb0ada3dff617ebf925c113dfb1b4d3fbba0123d9be8a1be00000000e9dc723f000080bfc9d28c3d0d3e7fbfc9d20c3dc9d28c3d0d3e7fbfc9d20c3d05e4523fa5a9c83c2ef9e4be000000002ef9643f000080bf878b913d2cb47ebf878b913d878b913d2cb47ebf878b913d0000603f0642033df30435bf00000000f304353f000080bfa78de13d5cbf7dbf6f5e963da78de13d5cbf7dbf6f5e963d17f5573f7e152d3dd5000ebf000000004001553f000080bf6f5e963d5cbf7dbfa78de13d6f5e963d5cbf7dbfa78de13de90a683f7e152d3d400155bf00000000d5000e3f000080bf18f7153dfa107dbf19f7153e18f7153dfa107dbf19f7153ec804763faf92453d435b78bf00000000415b783e000080bf000000005eb87bbf9b753a3e000000005eb87bbf9b753a3e0000803f5ebd6e3d000080bf0000000000000000000080bff03d413eeb367bbff3971a3df03d413eeb367bbff3971a3de90a483fcb7d7c3daad248be0000000055077b3f000080bf9241663eb37179bf000000009241663eb37179bf000000000000403f97d9933d00000080000000000000803f000080bf2c421b3e874b7cbf2c429b3d2c421b3e874b7cbf2c429b3d05e4523f3e165e3d2ef9e4be000000002ef9643f000080bf1a39e93d87a87cbf1a39e93d1a39e93d87a87cbf1a39e93d0000603f94e4523df30435bf00000000f304353f000080bf2b429b3d874b7cbf2c421b3e2b429b3d874b7cbf2c421b3efb1b6d3f3e165e3d2ef964bf000000002df9e43e000080bff4971a3deb367bbff03d413ef4971a3deb367bbff03d413e17f5773fcb7d7c3d55077bbf00000000acd2483e000080bf00000000b37179bf9241663e00000000b37179bf9241663e0000803f97d9933d000080bf0000000000000000000080bf18cb6e3e39be78bf10321f3d18cb6e3e39be78bf10321f3d90ba463f30979b3d355828be0000000050847c3f000080bfef0c8a3ed08476bf00000000ef0c8a3ed08476bf000000000000403f53f9b13d00000080000000000000803f000080bf18cb6e3e39be78bf10321fbd18cb6e3e39be78bf10321fbd7045393f30979b3d3558283e0000000050847c3f000080bff03d413eeb367bbff4971abdf03d413eeb367bbff4971abd17f5373fcb7d7c3dacd2483e0000000055077b3f000080bf3535483e83427abf902aa0bd3535483e83427abf902aa0bd2d7f303f524f8a3dea26be3e00000000a6b06d3f000080bf89a8203e55077bbfccfcf0bd89a8203e55077bbfccfcf0bd0bc8253f9bae803d9999193f00000000cdcc4c3f000080bfcdfcf03d55077bbf89a820becdfcf03d55077bbf89a820bef6371a3f9bae803dcdcc4c3f000000009999193f000080bf912aa03d83427abf353548be912aa03d83427abf353548bed4800f3f524f8a3da6b06d3f00000000eb26be3e000080bf10321f3d39be78bf18cb6ebe10321f3d39be78bf18cb6ebe90ba063f30979b3d50847c3f000000003558283e000080bf00000000d08476bfef0c8abe00000000d08476bfef0c8abe0000003f53f9b13d0000803f0000000000000000000080bf10321fbd39be78bf18cb6ebe10321fbd39be78bf18cb6ebedf8af23e30979b3d50847c3f00000000355828be000080bf902aa0bd83427abf353548be902aa0bd83427abf353548be59fee03e524f8a3da6b06d3f00000000ea26bebe000080bfccfcf0bd55077bbf89a820beccfcf0bd55077bbf89a820be1590cb3e9bae803dcdcc4c3f00000000999919bf000080bf89a820be55077bbfcdfcf0bd89a820be55077bbfcdfcf0bdec6fb43e9bae803d9999193f00000000cdcc4cbf000080bf814d4fbe67c378bf67c3f8bd814d4fbe67c378bf67c3f8bd8f09ac3e5e5f9b3dfeb5033f00000000a8845bbf000080bf7f8c77be7f8c77bf5508a5bd7f8c77be7f8c77bf5508a5bdf6379a3ec3f8a73d9be8a13e00000000e9dc72bf000080bfd53e8fbe499075bf86b523bdd53e8fbe499075bf86b523bd14908b3e64c8ba3dc3d0103e00000000556d7dbf000080bf9be8a1bee8dc72bf000000009be8a1bee8dc72bf000000000000803eb7bfd13d0000008000000000000080bf000080bfd53e8fbe499075bf86b5233dd53e8fbe499075bf86b5233dd7df683e64c8ba3dc3d010be00000000556d7dbf000080bf7f8c77be7f8c77bf5508a53d7f8c77be7f8c77bf5508a53d14904b3ec3f8a73d9be8a1be00000000e9dc72bf000080bf814d4fbe67c378bf67c3f83d814d4fbe67c378bf67c3f83de1ec273e5e5f9b3dfeb503bf00000000a8845bbf000080bf5f1d26be0f2c79bf5f1d263e5f1d26be0f2c79bf5f1d263e0000003e58e6963df30435bf00000000f30435bf000080bf67c3f8bd67c378bf814d4f3e67c3f8bd67c378bf814d4f3e3c26b03d5e5f9b3da8845bbf00000000feb503bf000080bf5508a5bd7f8c77bf7f8c773e5508a5bd7f8c77bf7f8c773eaebf513dc3f8a73de9dc72bf000000009be8a1be000080bf86b523bd499075bfd53e8f3e86b523bd499075bfd53e8f3e4701b93c64c8ba3d556d7dbf00000000c3d010be000080bf00000000e8dc72bf9be8a13e00000000e8dc72bf9be8a13e00000080b7bfd13d000080bf0000000000000000000080bf980f28bd6a9671bf980fa83e980f28bd6a9671bf980fa83e3a22a23c97c9db3dec057ebf00000000ec05febd000080bf00000000ee656ebf8e92ba3e00000000ee656ebf8e92ba3e000000806e26f33d000080bf0000000000000000000080bfe0c8a9bdc21074bfc48f943ee0c8a9bdc21074bfc48f943e556c353db9d6c73d6f2676bf0000000040a88cbe000080bf093900bea7c275bf0939803e093900bea7c275bf0939803e2920973d7400b93d2ff964bf000000002ff9e4be000080bf04902bbe069f76bf0574563e04902bbe069f76bf0574563e6deedb3d1f01b13d05e747bf0000000004ec1fbf000080bf057456be069f76bf04902b3e057456be069f76bf04902b3ec908123e1f01b13d04ec1fbf0000000005e747bf000080bf093980bea7c275bf0939003e093980bea7c275bf0939003eec6f343e7400b93d2ff9e4be000000002ff964bf000080bfc48f94bec21074bfdfc8a93dc48f94bec21074bfdfc8a93deba4523eb9d6c73d3fa88cbe000000006f2676bf000080bf980fa8be6a9671bf970f283d980fa8be6a9671bf970f283db8bb6b3e97c9db3dea05febd00000000ec057ebf000080bf8e92babeee656ebf000000008e92babeee656ebf000000000000803e6e26f33d0000008000000000000080bf000080bf980fa8be6a9671bf980f28bd980fa8be6a9671bf980f28bd23228a3e97c9db3dec05fe3d00000000ec057ebf000080bfc48f94bec21074bfe0c8a9bdc48f94bec21074bfe0c8a9bd8aad963eb9d6c73d40a88c3e000000006f2676bf000080bf093980bea7c275bf093900be093980bea7c275bf093900be09c8a53e7400b93d2ff9e43e000000002ff964bf000080bf057456be069f76bf04902bbe057456be069f76bf04902bbe9bfbb63e1f01b13d04ec1f3f0000000005e747bf000080bf5f1d26be0f2c79bf5f1d26be5f1d26be0f2c79bf5f1d26be0000c03e58e6963df304353f00000000f30435bf000080bf67c3f8bd67c378bf814d4fbe67c3f8bd67c378bf814d4fbe70f6d33e5e5f9b3da8845b3f00000000feb503bf000080bf5508a5bd7f8c77bf7f8c77be5508a5bd7f8c77bf7f8c77be0ac8e53ec3f8a73de9dc723f000000009be8a1be000080bf86b523bd499075bfd53e8fbe86b523bd499075bfd53e8fbeeb6ff43e64c8ba3d556d7d3f00000000c3d010be000080bf00000000e8dc72bf9be8a1be00000000e8dc72bf9be8a1be0000003fb7bfd13d0000803f0000000000000000000080bf86b5233d499075bfd53e8fbe86b5233d499075bfd53e8fbe0ac8053f64c8ba3d556d7d3f00000000c3d0103e000080bf5508a53d7f8c77bf7f8c77be5508a53d7f8c77bf7f8c77befb1b0d3fc3f8a73de9dc723f000000009be8a13e000080bf67c3f83d67c378bf814d4fbe67c3f83d67c378bf814d4fbec804163f5e5f9b3da8845b3f00000000feb5033f000080bf5f1d263e0f2c79bf5f1d26be5f1d263e0f2c79bf5f1d26be0000203f58e6963df304353f00000000f304353f000080bf814d4f3e67c378bf67c3f8bd814d4f3e67c378bf67c3f8bd38fb293f5e5f9b3dfeb5033f00000000a8845b3f000080bf7f8c773e7f8c77bf5508a5bd7f8c773e7f8c77bf5508a5bd05e4323fc3f8a73d9be8a13e00000000e9dc723f000080bfd53e8f3e499075bf86b523bdd53e8f3e499075bf86b523bdf6373a3f64c8ba3dc3d0103e00000000556d7d3f000080bf9be8a13ee8dc72bf000000009be8a13ee8dc72bf000000000000403fb7bfd13d00000080000000000000803f000080bfd53e8f3e499075bf86b5233dd53e8f3e499075bf86b5233d0ac8453f64c8ba3dc3d010be00000000556d7d3f000080bf7f8c773e7f8c77bf5508a53d7f8c773e7f8c77bf5508a53dfb1b4d3fc3f8a73d9be8a1be00000000e9dc723f000080bf3535483e83427abf912aa03d3535483e83427abf912aa03dd3804f3f524f8a3deb26bebe00000000a6b06d3f000080bf89a8203e55077bbfcdfcf03d89a8203e55077bbfcdfcf03df6375a3f9bae803d999919bf00000000cdcc4c3f000080bfccfcf03d55077bbf89a8203eccfcf03d55077bbf89a8203e0ac8653f9bae803dcdcc4cbf000000009999193f000080bf902aa03d83427abf3535483e902aa03d83427abf3535483e2d7f703f524f8a3da6b06dbf00000000ea26be3e000080bf10321f3d39be78bf18cb6e3e10321f3d39be78bf18cb6e3e7045793f30979b3d50847cbf000000003558283e000080bf00000000d08476bfef0c8a3e00000000d08476bfef0c8a3e0000803f53f9b13d000080bf0000000000000000000080bf814d4f3e67c378bf67c3f83d814d4f3e67c378bf67c3f83dc804563f5e5f9b3dfeb503bf00000000a8845b3f000080bf5f1d263e0f2c79bf5f1d263e5f1d263e0f2c79bf5f1d263e0000603f58e6963df30435bf00000000f304353f000080bf67c3f83d67c378bf814d4f3e67c3f83d67c378bf814d4f3e38fb693f5e5f9b3da8845bbf00000000feb5033f000080bf5508a53d7f8c77bf7f8c773e5508a53d7f8c77bf7f8c773e05e4723fc3f8a73de9dc72bf000000009be8a13e000080bf86b5233d499075bfd53e8f3e86b5233d499075bfd53e8f3ef6377a3f64c8ba3d556d7dbf00000000c3d0103e000080bf00000000e8dc72bf9be8a13e00000000e8dc72bf9be8a13e0000803fb7bfd13d000080bf0000000000000000000080bf0574563e069f76bf04902b3e0574563e069f76bf04902b3ece7d5b3f1f01b13d04ec1fbf0000000005e7473f000080bf0939803ea7c275bf0939003e0939803ea7c275bf0939003e05e4523f7400b93d2ff9e4be000000002ff9643f000080bfc48f943ec21074bfe0c8a93dc48f943ec21074bfe0c8a93dc5564b3fb9d6c73d40a88cbe000000006f26763f000080bf980fa83e6a9671bf980f283d980fa83e6a9671bf980f283d1211453f97c9db3dec05febd00000000ec057e3f000080bf8e92ba3eee656ebf000000008e92ba3eee656ebf000000000000403f6e26f33d00000080000000000000803f000080bf980fa83e6a9671bf970f28bd980fa83e6a9671bf970f28bdeeee3a3f97c9db3dea05fe3d00000000ec057e3f000080bfc48f943ec21074bfdfc8a9bdc48f943ec21074bfdfc8a9bd3ba9343fb9d6c73d3fa88c3e000000006f26763f000080bf0939803ea7c275bf093900be0939803ea7c275bf093900befc1b2d3f7400b93d2ff9e43e000000002ff9643f000080bf0574563e069f76bf04902bbe0574563e069f76bf04902bbe3282243f1f01b13d04ec1f3f0000000005e7473f000080bf04902b3e069f76bf057456be04902b3e069f76bf057456bece7d1b3f1f01b13d05e7473f0000000004ec1f3f000080bf0939003ea7c275bf093980be0939003ea7c275bf093980be05e4123f7400b93d2ff9643f000000002ff9e43e000080bfe0c8a93dc21074bfc48f94bee0c8a93dc21074bfc48f94bec6560b3fb9d6c73d6f26763f0000000040a88c3e000080bf980f283d6a9671bf980fa8be980f283d6a9671bf980fa8be1211053f97c9db3dec057e3f00000000ec05fe3d000080bf00000000ee656ebf8e92babe00000000ee656ebf8e92babe0000003f6e26f33d0000803f0000000000000000000080bf970f28bd6a9671bf980fa8be970f28bd6a9671bf980fa8bedcddf53e97c9db3dec057e3f00000000ea05febd000080bfdfc8a9bdc21074bfc48f94bedfc8a9bdc21074bfc48f94be7552e93eb9d6c73d6f26763f000000003fa88cbe000080bf093900bea7c275bf093980be093900bea7c275bf093980bef637da3e7400b93d2ff9643f000000002ff9e4be000080bf04902bbe069f76bf057456be04902bbe069f76bf057456be6404c93e1f01b13d05e7473f0000000004ec1fbf000080bf67905dbe71b873bf67905dbe67905dbe71b873bf67905dbe0000c03ed0baca3df404353f00000000f40435bf000080bfb0b084beee4373bf96eb30beb0b084beee4373bf96eb30be2eeaaf3ed07bce3dd6000e3f00000000400155bf000080bf2cf299be45ea71bf26f403be2cf299be45ea71bf26f403be59fea03e7440d93dcbafc93e00000000174d6bbf000080bf5c56aebebeb66fbf5c56aebd5c56aebebeb66fbf5c56aebd71f6933ea0c8e93d425b783e00000000425b78bf000080bf4eb0c1be0abb6cbff02a2cbd4eb0c1be0abb6cbff02a2cbd6504893e8f8cfe3ded29e23d000000002a6f7ebf000080bffbddd3bec70d69bf00000000fbddd3bec70d69bf000000000000803e170f0b3e0000008000000000000080bf000080bf4eb0c1be0abb6cbff32a2c3d4eb0c1be0abb6cbff32a2c3d35f76d3e8f8cfe3df129e2bd000000002a6f7ebf000080bf5c56aebebeb66fbf5b56ae3d5c56aebebeb66fbf5b56ae3d1f13583ea0c8e93d415b78be00000000425b78bf000080bf2cf299be45ea71bf26f4033e2cf299be45ea71bf26f4033e4d033e3e7440d93dcbafc9be00000000174d6bbf000080bfb0b084beee4373bf95eb303eb0b084beee4373bf95eb303ea42b203ed07bce3dd5000ebf00000000400155bf000080bf67905dbe71b873bf67905d3e67905dbe71b873bf67905d3e0000003ed0baca3df40435bf00000000f40435bf000080bf96eb30beee4373bfb0b0843e96eb30beee4373bfb0b0843eb8a8bf3dd07bce3d400155bf00000000d6000ebf000080bf26f403be45ea71bf2cf2993e26f403be45ea71bf2cf2993e65f9833d7440d93d174d6bbf00000000cbafc9be000080bf5c56aebdbeb66fbf5c56ae3e5c56aebdbeb66fbf5c56ae3e86b31f3da0c8e93d425b78bf00000000425b78be000080bff02a2cbd0abb6cbf4eb0c13ef02a2cbd0abb6cbf4eb0c13e4b46903c8f8cfe3d2a6f7ebf00000000ed29e2bd000080bf00000000c70d69bffbddd33e00000000c70d69bffbddd33e00000080170f0b3e000080bf0000000000000000000080bf32f02fbd42eb66bf3fecdb3e32f02fbd42eb66bf3fecdb3e9df2813c157d113ec2ba7ebf000000009bc8cbbd000080bf00000000dbc562bf5392ed3e00000000dbc562bf5392ed3e000000805f461d3e000080bf0000000000000000000080bf1698b2bd9d676abf19ebc83e1698b2bd9d676abf19ebc83ecc8c0e3d98d7063e65e779bf0000000004235ebe000080bf078007be0d206dbfb4aab43e078007be0d206dbfb4aab43ed2e1693d67e5fb3d45b36fbf0000000073c6b3be000080bfe41636be0bfe6ebf07549f3ee41636be0bfe6ebf07549f3e2037a93da4f6ee3d2f455ebf00000000ed05febe000080bf4b8464be4ff16fbf2d1c893e4b8464be4ff16fbf2d1c893e1073e23d441ee83d26aa44bf000000001fe323bf000080bf2d1c89be4ff16fbf4b84643e2d1c89be4ff16fbf4b84643e77c60e3e441ee83d1fe323bf0000000026aa44bf000080bf07549fbe0bfe6ebfe416363e07549fbe0bfe6ebfe416363e6f642b3ea4f6ee3ded05febe000000002f455ebf000080bfb4aab4be0d206dbf0780073eb4aab4be0d206dbf0780073e8b87453e67e5fb3d73c6b3be0000000045b36fbf000080bf19ebc8be9d676abf1698b23d19ebc8be9d676abf1698b23dcd5c5c3e98d7063e04235ebe0000000065e779bf000080bf3fecdbbe42eb66bf2ff02f3d3fecdbbe42eb66bf2ff02f3dadc16f3e157d113e97c8cbbd00000000c2ba7ebf000080bf5392edbedbc562bf000000005392edbedbc562bf000000000000803e5f461d3e0000008000000000000080bf000080bf3fecdbbe42eb66bf32f02fbd3fecdbbe42eb66bf32f02fbd2a1f883e157d113e9bc8cb3d00000000c2ba7ebf000080bf19ebc8be9d676abf1698b2bd19ebc8be9d676abf1698b2bd99d1913e98d7063e04235e3e0000000065e779bf000080bfb4aab4be0d206dbf078007beb4aab4be0d206dbf078007be3a3c9d3e67e5fb3d73c6b33e0000000045b36fbf000080bf07549fbe0bfe6ebfe41636be07549fbe0bfe6ebfe41636bec84daa3ea4f6ee3ded05fe3e000000002f455ebf000080bf2d1c89be4ff16fbf4b8464be2d1c89be4ff16fbf4b8464bec49cb83e441ee83d1fe3233f0000000026aa44bf000080bf4b8464be4ff16fbf2d1c89be4b8464be4ff16fbf2d1c89be3b63c73e441ee83d26aa443f000000001fe323bf000080bf95eb30beee4373bfb0b084be95eb30beee4373bfb0b084bed215d03ed07bce3d4001553f00000000d5000ebf000080bf26f403be45ea71bf2cf299be26f403be45ea71bf2cf299bea601df3e7440d93d174d6b3f00000000cbafc9be000080bf5b56aebdbeb66fbf5c56aebe5b56aebdbeb66fbf5c56aebe8f09ec3ea0c8e93d425b783f00000000415b78be000080bff32a2cbd0abb6cbf4eb0c1bef32a2cbd0abb6cbf4eb0c1be9afbf63e8f8cfe3d2a6f7e3f00000000f129e2bd000080bf00000000c70d69bffbddd3be00000000c70d69bffbddd3be0000003f170f0b3e0000803f0000000000000000000080bff02a2c3d0abb6cbf4eb0c1bef02a2c3d0abb6cbf4eb0c1be3282043f8f8cfe3d2a6f7e3f00000000ed29e23d000080bf5c56ae3dbeb66fbf5c56aebe5c56ae3dbeb66fbf5c56aebe38fb093fa0c8e93d425b783f00000000425b783e000080bf26f4033e45ea71bf2cf299be26f4033e45ea71bf2cf299be2d7f103f7440d93d174d6b3f00000000cbafc93e000080bf96eb303eee4373bfb0b084be96eb303eee4373bfb0b084be17f5173fd07bce3d4001553f00000000d6000e3f000080bf67905d3e71b873bf67905dbe67905d3e71b873bf67905dbe0000203fd0baca3df404353f00000000f404353f000080bfb0b0843eee4373bf95eb30beb0b0843eee4373bf95eb30bee90a283fd07bce3dd5000e3f000000004001553f000080bf2cf2993e45ea71bf26f403be2cf2993e45ea71bf26f403bed4802f3f7440d93dcbafc93e00000000174d6b3f000080bf5c56ae3ebeb66fbf5b56aebd5c56ae3ebeb66fbf5b56aebdc804363fa0c8e93d415b783e00000000425b783f000080bf4eb0c13e0abb6cbff32a2cbd4eb0c13e0abb6cbff32a2cbdce7d3b3f8f8cfe3df129e23d000000002a6f7e3f000080bffbddd33ec70d69bf00000000fbddd33ec70d69bf000000000000403f170f0b3e00000080000000000000803f000080bf4eb0c13e0abb6cbff02a2c3d4eb0c13e0abb6cbff02a2c3d3282443f8f8cfe3ded29e2bd000000002a6f7e3f000080bf5c56ae3ebeb66fbf5c56ae3d5c56ae3ebeb66fbf5c56ae3d38fb493fa0c8e93d425b78be00000000425b783f000080bf2cf2993e45ea71bf26f4033e2cf2993e45ea71bf26f4033e2d7f503f7440d93dcbafc9be00000000174d6b3f000080bfb0b0843eee4373bf96eb303eb0b0843eee4373bf96eb303e17f5573fd07bce3dd6000ebf000000004001553f000080bf67905d3e71b873bf67905d3e67905d3e71b873bf67905d3e0000603fd0baca3df40435bf00000000f404353f000080bf04902b3e069f76bf0574563e04902b3e069f76bf0574563e3282643f1f01b13d05e747bf0000000004ec1f3f000080bf0939003ea7c275bf0939803e0939003ea7c275bf0939803efb1b6d3f7400b93d2ff964bf000000002ff9e43e000080bfdfc8a93dc21074bfc48f943edfc8a93dc21074bfc48f943e3ba9743fb9d6c73d6f2676bf000000003fa88c3e000080bf970f283d6a9671bf980fa83e970f283d6a9671bf980fa83eeeee7a3f97c9db3dec057ebf00000000ea05fe3d000080bf00000000ee656ebf8e92ba3e00000000ee656ebf8e92ba3e0000803f6e26f33d000080bf0000000000000000000080bf95eb303eee4373bfb0b0843e95eb303eee4373bfb0b0843ee90a683fd07bce3d400155bf00000000d5000e3f000080bf26f4033e45ea71bf2cf2993e26f4033e45ea71bf2cf2993ed3806f3f7440d93d174d6bbf00000000cbafc93e000080bf5b56ae3dbeb66fbf5c56ae3e5b56ae3dbeb66fbf5c56ae3ec804763fa0c8e93d425b78bf00000000415b783e000080bff32a2c3d0abb6cbf4eb0c13ef32a2c3d0abb6cbf4eb0c13ece7d7b3f8f8cfe3d2a6f7ebf00000000f129e23d000080bf00000000c70d69bffbddd33e00000000c70d69bffbddd33e0000803f170f0b3e000080bf0000000000000000000080bf4b84643e4ff16fbf2d1c893e4b84643e4ff16fbf2d1c893e9eb1633f441ee83d26aa44bf000000001fe3233f000080bfe416363e0bfe6ebf07549f3ee416363e0bfe6ebf07549f3e1cd96a3fa4f6ee3d2f455ebf00000000ed05fe3e000080bf0780073e0d206dbfb4aab43e0780073e0d206dbfb4aab43ee361713f67e5fb3d45b36fbf0000000073c6b33e000080bf1698b23d9d676abf19ebc83e1698b23d9d676abf19ebc83e3317773f98d7063e65e779bf0000000004235e3e000080bf2ff02f3d42eb66bf3fecdb3e2ff02f3d42eb66bf3fecdb3e6bf07b3f157d113ec2ba7ebf0000000097c8cb3d000080bf00000000dbc562bf5392ed3e00000000dbc562bf5392ed3e0000803f5f461d3e000080bf0000000000000000000080bf5d2b6b3e5d2b6bbf5a9ea43e5d2b6b3e5d2b6bbf5a9ea43e90ba663f3e66043ed75050bf0000000008cc143f000080bf77668d3ec7aa6bbf77668d3e77668d3ec7aa6bbf77668d3e0000603f49c9023ef30435bf00000000f304353f000080bf2d1c893e4ff16fbf4b84643e2d1c893e4ff16fbf4b84643e624e5c3f441ee83d1fe323bf0000000026aa443f000080bf07549f3e0bfe6ebfe416363e07549f3e0bfe6ebfe416363ee426553fa4f6ee3ded05febe000000002f455e3f000080bfb4aab43e0d206dbf0780073eb4aab43e0d206dbf0780073e1d9e4e3f67e5fb3d73c6b3be0000000045b36f3f000080bf19ebc83e9d676abf1698b23d19ebc83e9d676abf1698b23dcde8483f98d7063e04235ebe0000000065e7793f000080bf3fecdb3e42eb66bf32f02f3d3fecdb3e42eb66bf32f02f3d950f443f157d113e9bc8cbbd00000000c2ba7e3f000080bf5392ed3edbc562bf000000005392ed3edbc562bf000000000000403f5f461d3e00000080000000000000803f000080bf3fecdb3e42eb66bf2ff02fbd3fecdb3e42eb66bf2ff02fbd6bf03b3f157d113e97c8cb3d00000000c2ba7e3f000080bf19ebc83e9d676abf1698b2bd19ebc83e9d676abf1698b2bd3417373f98d7063e04235e3e0000000065e7793f000080bfb4aab43e0d206dbf078007beb4aab43e0d206dbf078007bee361313f67e5fb3d73c6b33e0000000045b36f3f000080bf07549f3e0bfe6ebfe41636be07549f3e0bfe6ebfe41636be1cd92a3fa4f6ee3ded05fe3e000000002f455e3f000080bf2d1c893e4ff16fbf4b8464be2d1c893e4ff16fbf4b8464be9eb1233f441ee83d1fe3233f0000000026aa443f000080bf4b84643e4ff16fbf2d1c89be4b84643e4ff16fbf2d1c89be624e1c3f441ee83d26aa443f000000001fe3233f000080bfe416363e0bfe6ebf07549fbee416363e0bfe6ebf07549fbee426153fa4f6ee3d2f455e3f00000000ed05fe3e000080bf0780073e0d206dbfb4aab4be0780073e0d206dbfb4aab4be1e9e0e3f67e5fb3d45b36f3f0000000073c6b33e000080bf1698b23d9d676abf19ebc8be1698b23d9d676abf19ebc8becce8083f98d7063e65e7793f0000000004235e3e000080bf32f02f3d42eb66bf3fecdbbe32f02f3d42eb66bf3fecdbbe950f043f157d113ec2ba7e3f000000009bc8cb3d000080bf00000000dbc562bf5392edbe00000000dbc562bf5392edbe0000003f5f461d3e0000803f0000000000000000000080bf2ff02fbd42eb66bf3fecdbbe2ff02fbd42eb66bf3fecdbbed6e0f73e157d113ec2ba7e3f0000000097c8cbbd000080bf1698b2bd9d676abf19ebc8be1698b2bd9d676abf19ebc8be672eee3e98d7063e65e7793f0000000004235ebe000080bf078007be0d206dbfb4aab4be078007be0d206dbfb4aab4bec5c3e23e67e5fb3d45b36f3f0000000073c6b3be000080bfe41636be0bfe6ebf07549fbee41636be0bfe6ebf07549fbe38b2d53ea4f6ee3d2f455e3f00000000ed05febe000080bf5d2b6bbe5d2b6bbf5a9ea4be5d2b6bbe5d2b6bbf5a9ea4be2075cd3e3e66043ed750503f0000000008cc14bf000080bf77668dbec7aa6bbf77668dbe77668dbec7aa6bbf77668dbe0000c03e49c9023ef304353f00000000f30435bf000080bf5a9ea4be5d2b6bbf5d2b6bbe5a9ea4be5d2b6bbf5d2b6bbedf8ab23e3e66043e08cc143f00000000d75050bf000080bfbaf4babee8b169bfbaf43abebaf4babee8b169bfbaf43abe09c8a53eab12093e2ef9e43e000000002ef964bf000080bf102bd0be4b4c67bf60c70abe102bd0be4b4c67bf60c70abef6379a3ed95d103e9be8a13e00000000e9dc72bf000080bf1c10e4be1c1064bf4a73b6bd1c10e4be1c1064bf4a73b6bdd215903e8bb2193eabd2483e0000000055077bbf000080bf8681f6bea81860bfed4633bd8681f6bea81860bfed4633bd3c63873eec77243ece6ab93d00000000dbf27ebf000080bfffb503bfa9845bbf00000000ffb503bfa9845bbf000000000000803e3c26303e0000008000000000000080bf000080bf8681f6bea81860bfea46333d8681f6bea81860bfea46333d8939713eec77243ecb6ab9bd00000000dbf27ebf000080bf1c10e4be1c1064bf4b73b63d1c10e4be1c1064bf4b73b63d5bd45f3e8bb2193eacd248be0000000055077bbf000080bf102bd0be4b4c67bf60c70a3e102bd0be4b4c67bf60c70a3e14904b3ed95d103e9be8a1be00000000e9dc72bf000080bfbaf4babee8b169bfb9f43a3ebaf4babee8b169bfb9f43a3eec6f343eab12093e2df9e4be000000002ef964bf000080bf5a9ea4be5d2b6bbf5d2b6b3e5a9ea4be5d2b6bbf5d2b6b3e40ea1a3e3e66043e08cc14bf00000000d75050bf000080bf77668dbec7aa6bbf77668d3e77668dbec7aa6bbf77668d3e0000003e49c9023ef30435bf00000000f30435bf000080bf5d2b6bbe5d2b6bbf5a9ea43e5d2b6bbe5d2b6bbf5a9ea43e7f2bca3d3e66043ed75050bf0000000008cc14bf000080bfbaf43abee8b169bfbaf4ba3ebaf43abee8b169bfbaf4ba3e2920973dab12093e2ef964bf000000002ef9e4be000080bf60c70abe4b4c67bf102bd03e60c70abe4b4c67bf102bd03eaebf513dd95d103ee9dc72bf000000009be8a1be000080bf4a73b6bd1c1064bf1c10e43e4a73b6bd1c1064bf1c10e43e91ae003d8bb2193e55077bbf00000000abd248be000080bfed4633bda81860bf8681f63eed4633bda81860bf8681f63e7b676c3cec77243edbf27ebf00000000ce6ab9bd000080bf00000000a9845bbfffb5033f00000000a9845bbfffb5033f000000803c26303e000080bf0000000000000000000080bfe41636bd2e3b58bf2b91083fe41636bd2e3b58bf2b91083f72cc583c471f383e9f1d7fbf00000000bf13aabd000080bf00000000564753bf208f103f00000000564753bf208f103f000000800296433e000080bf0000000000000000000080bf5fccb9bdb1a25cbf0379ff3e5fccb9bdb1a25cbf0379ff3e147eea3c4d5d2d3ee5de7bbf00000000be2d37be000080bf67b30dbe0e5c60bf012bec3e67b30dbe0e5c60bf012bec3e12003e3d13c6233e1b3475bf00000000431f93be000080bfbd643fbea14763bf5551d73ebd643fbea14763bf5551d73ee751883dcfe01b3e8eef69bf0000000062f1cfbe000080bfef5b71be894a65bf5916c13eef5b71be894a65bf5916c13e3713b63de437163e6b1659bf0000000003ae07bf000080bfa37691be2c5166bf13b5a93ea37691be2c5166bf13b5a93eebf9e63d0041133ea45e42bf00000000449a26bf000080bf14b5a9be2c5166bfa276913e14b5a9be2c5166bfa276913e0a830c3e0041133e439a26bf00000000a55e42bf000080bf5916c1be894a65bfed5b713e5916c1be894a65bfed5b713e64f6243ee437163e02ae07bf000000006c1659bf000080bf5551d7bea14763bfbd643f3e5551d7bea14763bfbd643f3e0cd73b3ecfe01b3e62f1cfbe000000008eef69bf000080bf012becbe0e5c60bf66b30d3e012becbe0e5c60bf66b30d3efb7f503e13c6233e421f93be000000001b3475bf000080bf0379ffbeb1a25cbf5fccb93d0379ffbeb1a25cbf5fccb93d3db0623e4d5d2d3ebe2d37be00000000e5de7bbf000080bf2b9108bf2e3b58bfe316363d2b9108bf2e3b58bfe316363d3873723e471f383ebe13aabd000000009f1d7fbf000080bf208f10bf564753bf00000000208f10bf564753bf000000000000803e0296433e0000008000000000000080bf000080bf2b9108bf2e3b58bfe41636bd2b9108bf2e3b58bfe41636bd63c6863e471f383ebf13aa3d000000009f1d7fbf000080bf0379ffbeb1a25cbf5fccb9bd0379ffbeb1a25cbf5fccb9bde1a78e3e4d5d2d3ebe2d373e00000000e5de7bbf000080bf012becbe0e5c60bf67b30dbe012becbe0e5c60bf67b30dbe02c0973e13c6233e431f933e000000001b3475bf000080bf5551d7bea14763bfbd643fbe5551d7bea14763bfbd643fbe7a14a23ecfe01b3e62f1cf3e000000008eef69bf000080bf5916c1be894a65bfef5b71be5916c1be894a65bfef5b71bece84ad3ee437163e03ae073f000000006b1659bf000080bf13b5a9be2c5166bfa37691be13b5a9be2c5166bfa37691be7abeb93e0041133e449a263f00000000a45e42bf000080bfa27691be2c5166bf14b5a9bea27691be2c5166bf14b5a9be8541c63e0041133ea55e423f00000000439a26bf000080bfed5b71be894a65bf5916c1beed5b71be894a65bf5916c1be337bd23ee437163e6c16593f0000000002ae07bf000080bfb9f43abee8b169bfbaf4babeb9f43abee8b169bfbaf4babef637da3eab12093e2ef9643f000000002df9e4be000080bf60c70abe4b4c67bf102bd0be60c70abe4b4c67bf102bd0be0ac8e53ed95d103ee9dc723f000000009be8a1be000080bf4b73b6bd1c1064bf1c10e4be4b73b6bd1c1064bf1c10e4be2eeaef3e8bb2193e55077b3f00000000acd248be000080bfea4633bda81860bf8681f6beea4633bda81860bf8681f6bec49cf83eec77243edbf27e3f00000000cb6ab9bd000080bf00000000a9845bbfffb503bf00000000a9845bbfffb503bf0000003f3c26303e0000803f0000000000000000000080bfed46333da81860bf8681f6beed46333da81860bf8681f6be9eb1033fec77243edbf27e3f00000000ce6ab93d000080bf4a73b63d1c1064bf1c10e4be4a73b63d1c1064bf1c10e4bee90a083f8bb2193e55077b3f00000000abd2483e000080bf60c70a3e4b4c67bf102bd0be60c70a3e4b4c67bf102bd0befb1b0d3fd95d103ee9dc723f000000009be8a13e000080bfbaf43a3ee8b169bfbaf4babebaf43a3ee8b169bfbaf4babe05e4123fab12093e2ef9643f000000002ef9e43e000080bf5d2b6b3e5d2b6bbf5a9ea4be5d2b6b3e5d2b6bbf5a9ea4be7045193f3e66043ed750503f0000000008cc143f000080bf77668d3ec7aa6bbf77668dbe77668d3ec7aa6bbf77668dbe0000203f49c9023ef304353f00000000f304353f000080bf5a9ea43e5d2b6bbf5d2b6bbe5a9ea43e5d2b6bbf5d2b6bbe90ba263f3e66043e08cc143f00000000d750503f000080bfbaf4ba3ee8b169bfb9f43abebaf4ba3ee8b169bfb9f43abefc1b2d3fab12093e2df9e43e000000002ef9643f000080bf102bd03e4b4c67bf60c70abe102bd03e4b4c67bf60c70abe05e4323fd95d103e9be8a13e00000000e9dc723f000080bf1c10e43e1c1064bf4b73b6bd1c10e43e1c1064bf4b73b6bd17f5373f8bb2193eacd2483e0000000055077b3f000080bf8681f63ea81860bfea4633bd8681f63ea81860bfea4633bd624e3c3fec77243ecb6ab93d00000000dbf27e3f000080bfffb5033fa9845bbf00000000ffb5033fa9845bbf000000000000403f3c26303e00000080000000000000803f000080bf8681f63ea81860bfed46333d8681f63ea81860bfed46333d9eb1433fec77243ece6ab9bd00000000dbf27e3f000080bf1c10e43e1c1064bf4a73b63d1c10e43e1c1064bf4a73b63de90a483f8bb2193eabd248be0000000055077b3f000080bf102bd03e4b4c67bf60c70a3e102bd03e4b4c67bf60c70a3efb1b4d3fd95d103e9be8a1be00000000e9dc723f000080bfbaf4ba3ee8b169bfbaf43a3ebaf4ba3ee8b169bfbaf43a3e05e4523fab12093e2ef9e4be000000002ef9643f000080bf5a9ea43e5d2b6bbf5d2b6b3e5a9ea43e5d2b6bbf5d2b6b3e7045593f3e66043e08cc14bf00000000d750503f000080bf0379ff3eb1a25cbf5fccb9bd0379ff3eb1a25cbf5fccb9bd10ac383f4d5d2d3ebe2d373e00000000e5de7b3f000080bf2b91083f2e3b58bfe31636bd2b91083f2e3b58bfe31636bdce9c3c3f471f383ebe13aa3d000000009f1d7f3f000080bf208f103f564753bf00000000208f103f564753bf000000000000403f0296433e00000080000000000000803f000080bf2b91083f2e3b58bfe416363d2b91083f2e3b58bfe416363d3263433f471f383ebf13aabd000000009f1d7f3f000080bf0379ff3eb1a25cbf5fccb93d0379ff3eb1a25cbf5fccb93df153473f4d5d2d3ebe2d37be00000000e5de7b3f000080bf012bec3e0e5c60bf67b30d3e012bec3e0e5c60bf67b30d3e01e04b3f13c6233e431f93be000000001b34753f000080bf5551d73ea14763bfbd643f3e5551d73ea14763bfbd643f3e3d0a513fcfe01b3e62f1cfbe000000008eef693f000080bf5916c13e894a65bfef5b713e5916c13e894a65bfef5b713e67c2563fe437163e03ae07bf000000006b16593f000080bf13b5a93e2c5166bfa376913e13b5a93e2c5166bfa376913e3edf5c3f0041133e449a26bf00000000a45e423f000080bfa276913e2c5166bf14b5a93ea276913e2c5166bf14b5a93ec320633f0041133ea55e42bf00000000439a263f000080bfed5b713e894a65bf5916c13eed5b713e894a65bf5916c13e993d693fe437163e6c1659bf0000000002ae073f000080bfb9f43a3ee8b169bfbaf4ba3eb9f43a3ee8b169bfbaf4ba3efb1b6d3fab12093e2ef964bf000000002df9e43e000080bf60c70a3e4b4c67bf102bd03e60c70a3e4b4c67bf102bd03e05e4723fd95d103ee9dc72bf000000009be8a13e000080bf4b73b63d1c1064bf1c10e43e4b73b63d1c1064bf1c10e43e17f5773f8bb2193e55077bbf00000000acd2483e000080bfea46333da81860bf8681f63eea46333da81860bf8681f63e624e7c3fec77243edbf27ebf00000000cb6ab93d000080bf00000000a9845bbfffb5033f00000000a9845bbfffb5033f0000803f3c26303e000080bf0000000000000000000080bfbd643f3ea14763bf5551d73ebd643f3ea14763bf5551d73ec3f56e3fcfe01b3e8eef69bf0000000062f1cf3e000080bf66b30d3e0e5c60bf012bec3e66b30d3e0e5c60bf012bec3eff1f743f13c6233e1b3475bf00000000421f933e000080bf5fccb93db1a25cbf0379ff3e5fccb93db1a25cbf0379ff3e0fac783f4d5d2d3ee5de7bbf00000000be2d373e000080bfe316363d2e3b58bf2b91083fe316363d2e3b58bf2b91083fce9c7c3f471f383e9f1d7fbf00000000be13aa3d000080bf00000000564753bf208f103f00000000564753bf208f103f0000803f0296433e000080bf0000000000000000000080bf89e8763eae375ebfae37de3e89e8763eae375ebfae37de3ec5566b3fc459293ec5c85fbf0000000031a6f83e000080bfe544433e83ad5bbf2016f43ee544433e83ad5bbf2016f43e2d7f703f08c12f3ea6b06dbf00000000ea26be3e000080bf162d103ea04358bf5329043f162d103ea04358bf5329043fe426753f2f0b383ec3fa76bf0000000054b7863e000080bf9f88bc3db31954bf77660d3f9f88bc3db31954bf77660d3f7045793fb3b9413e50847cbf000000003658283e000080bfaf49383de0524fbfdabb153faf49383de0524fbfdabb153f3ddf7c3f40554c3ef63e7fbf0000000012139d3d000080bf00000000fd124abf362b1d3f00000000fd124abf362b1d3f0000803f7177573e000080bf0000000000000000000080bf5ea27b3e9ee355bf5fa2fb3e5ea27b3e9ee355bf5fa2fb3efb1b6d3faa9e3d3e2ef964bf000000002df9e43e000080bff775983e74fc57bff3b0e43ef775983e74fc57bff3b0e43ee90a683f42b4383e3f0155bf00000000d5000e3f000080bf8330953ec5c85fbf5aebc63e8330953ec5c85fbf5aebc63e0ac8653fd649253ecdcc4cbf000000009999193f000080bf6577ae3e5e5060bf6577ae3e6577ae3e5e5060bf6577ae3e0000603ff6e4233ef30435bf00000000f304353f000080bf5aebc63ec5c85fbf8330953e5aebc63ec5c85fbf8330953ef6375a3fd649253e999919bf00000000cdcc4c3f000080bfae37de3eae375ebf89e8763eae37de3eae375ebf89e8763e3ba9543fc459293e31a6f8be00000000c5c85f3f000080bf2016f43e83ad5bbfe644433e2016f43e83ad5bbfe644433ed3804f3f08c12f3eeb26bebe00000000a6b06d3f000080bf5329043fa04358bf152d103e5329043fa04358bf152d103e1cd94a3f2f0b383e53b786be00000000c3fa763f000080bf77660d3fb31954bf9f88bc3d77660d3fb31954bf9f88bc3d90ba463fb3b9413e365828be0000000050847c3f000080bfdabb153fe0524fbfaa49383ddabb153fe0524fbfaa49383dc320433f40554c3e0e139dbd00000000f63e7f3f000080bf362b1d3ffd124abf00000000362b1d3ffd124abf000000000000403f7177573e00000080000000000000803f000080bfdabb153fe0524fbfaf4938bddabb153fe0524fbfaf4938bd3edf3c3f40554c3e12139d3d00000000f63e7f3f000080bf77660d3fb31954bf9f88bcbd77660d3fb31954bf9f88bcbd7045393fb3b9413e3658283e0000000050847c3f000080bf5329043fa04358bf162d10be5329043fa04358bf162d10bee426353f2f0b383e54b7863e00000000c3fa763f000080bf012bec3e0e5c60bf66b30dbe012bec3e0e5c60bf66b30dbeff1f343f13c6233e421f933e000000001b34753f000080bf5551d73ea14763bfbd643fbe5551d73ea14763bfbd643fbec3f52e3fcfe01b3e62f1cf3e000000008eef693f000080bf5916c13e894a65bfed5b71be5916c13e894a65bfed5b71be9a3d293fe437163e02ae073f000000006c16593f000080bf14b5a93e2c5166bfa27691be14b5a93e2c5166bfa27691bec320233f0041133e439a263f00000000a55e423f000080bfa376913e2c5166bf13b5a9bea376913e2c5166bf13b5a9be3edf1c3f0041133ea45e423f00000000449a263f000080bfef5b713e894a65bf5916c1beef5b713e894a65bf5916c1be68c2163fe437163e6b16593f0000000003ae073f000080bfbd643f3ea14763bf5551d7bebd643f3ea14763bf5551d7be3d0a113fcfe01b3e8eef693f0000000062f1cf3e000080bf67b30d3e0e5c60bf012becbe67b30d3e0e5c60bf012becbe02e00b3f13c6233e1b34753f00000000431f933e000080bf5fccb93db1a25cbf0379ffbe5fccb93db1a25cbf0379ffbef153073f4d5d2d3ee5de7b3f00000000be2d373e000080bfe416363d2e3b58bf2b9108bfe416363d2e3b58bf2b9108bf3263033f471f383e9f1d7f3f00000000bf13aa3d000080bf00000000564753bf208f10bf00000000564753bf208f10bf0000003f0296433e0000803f0000000000000000000080bfe31636bd2e3b58bf2b9108bfe31636bd2e3b58bf2b9108bf9c39f93e471f383e9f1d7f3f00000000be13aabd000080bf5fccb9bdb1a25cbf0379ffbe5fccb9bdb1a25cbf0379ffbe1e58f13e4d5d2d3ee5de7b3f00000000be2d37be000080bf66b30dbe0e5c60bf012becbe66b30dbe0e5c60bf012becbefd3fe83e13c6233e1b34753f00000000421f93be000080bfbd643fbea14763bf5551d7bebd643fbea14763bf5551d7be86ebdd3ecfe01b3e8eef693f0000000062f1cfbe000080bf89e876beae375ebfae37debe89e876beae375ebfae37debe8aadd63ec459293ec5c85f3f0000000031a6f8be000080bf833095bec5c85fbf5aebc6be833095bec5c85fbf5aebc6be1490cb3ed649253ecdcc4c3f00000000999919bf000080bf6577aebe5e5060bf6577aebe6577aebe5e5060bf6577aebe0000c03ef6e4233ef304353f00000000f30435bf000080bf5aebc6bec5c85fbf833095be5aebc6bec5c85fbf833095beea6fb43ed649253e9999193f00000000cdcc4cbf000080bfae37debeae375ebf89e876beae37debeae375ebf89e876be7652a93ec459293e31a6f83e00000000c5c85fbf000080bf2016f4be83ad5bbfe64443be2016f4be83ad5bbfe64443bea6019f3e08c12f3eeb26be3e00000000a6b06dbf000080bf532904bfa04358bf152d10be532904bfa04358bf152d10be38b2953e2f0b383e53b7863e00000000c3fa76bf000080bf77660dbfb31954bf9f88bcbd77660dbfb31954bf9f88bcbd20758d3eb3b9413e3658283e0000000050847cbf000080bfdabb15bfe0524fbfaa4938bddabb15bfe0524fbfaa4938bd8541863e40554c3e0e139d3d00000000f63e7fbf000080bf362b1dbffd124abf00000000362b1dbffd124abf000000000000803e7177573e0000008000000000000080bf000080bfdabb15bfe0524fbfaf49383ddabb15bfe0524fbfaf49383df57c733e40554c3e12139dbd00000000f63e7fbf000080bf77660dbfb31954bf9f88bc3d77660dbfb31954bf9f88bc3dbf15653eb3b9413e365828be0000000050847cbf000080bf532904bfa04358bf162d103e532904bfa04358bf162d103e8f9b543e2f0b383e54b786be00000000c3fa76bf000080bf2016f4be83ad5bbfe544433e2016f4be83ad5bbfe544433eb3fc413e08c12f3eea26bebe00000000a6b06dbf000080bfae37debeae375ebf89e8763eae37debeae375ebf89e8763e155b2d3ec459293e31a6f8be00000000c5c85fbf000080bf5aebc6bec5c85fbf8330953e5aebc6bec5c85fbf8330953e2920173ed649253e999919bf00000000cdcc4cbf000080bf6577aebe5e5060bf6577ae3e6577aebe5e5060bf6577ae3e0000003ef6e4233ef30435bf00000000f30435bf000080bf833095bec5c85fbf5aebc63e833095bec5c85fbf5aebc63eaebfd13dd649253ecdcc4cbf00000000999919bf000080bf89e876beae375ebfae37de3e89e876beae375ebfae37de3ed549a53dc459293ec5c85fbf0000000031a6f8be000080bfe64443be83ad5bbf2016f43ee64443be83ad5bbf2016f43e340d783d08c12f3ea6b06dbf00000000eb26bebe000080bf152d10bea04358bf5329043f152d10bea04358bf5329043fc2912d3d2f0b383ec3fa76bf0000000053b786be000080bf9f88bcbdb31954bf77660d3f9f88bcbdb31954bf77660d3f0552d73cb3b9413e50847cbf00000000365828be000080bfaa4938bde0524fbfdabb153faa4938bde0524fbfdabb153fa230483c40554c3ef63e7fbf000000000e139dbd000080bf00000000fd124abf362b1d3f00000000fd124abf362b1d3f000000807177573e000080bf0000000000000000000080bf5fcc39bd256945bfd392223f5fcc39bd256945bfd392223fe2f0393c29f6603e74597fbf00000000f9e991bd000080bf0000000060f53fbf0960293f0000000060f53fbf0960293f0000008096a76b3e000080bf0000000000000000000080bf2c90bebd2f794abf24d51a3f2c90bebd2f794abf24d51a3f1606c73c27a3563eed057dbf00000000e0b41bbe000080bfc11e12bee7004fbfc11e123fc11e12bee7004fbfc11e123f86b31f3de8064d3e425b78bf00000000425b78be000080bfad7346bee8da52bf876f083fad7346bee8da52bf876f083f045d633df989443e4c9670bf00000000f2f8aebe000080bf5fa27bbe9ee355bf5fa2fb3e5fa27bbe9ee355bf5fa2fb3e2920973daa9e3d3e2ef964bf000000002ef9e4be000080bff77598be74fc57bff3b0e43ef77598be74fc57bff3b0e43eb6a8bf3d42b4383e3f0155bf00000000d5000ebf000080bff0c0b2bedb0e59bf374acc3ef0c0b2bedb0e59bf374acc3e594dea3d6225363edea840bf00000000c29328bf000080bf374accbedb0e59bff0c0b23e374accbedb0e59bff0c0b23e53d90a3e6225363ec29328bf00000000dea840bf000080bff3b0e4be74fc57bff775983ef3b0e4be74fc57bff775983ea42b203e42b4383ed5000ebf000000003f0155bf000080bf5fa2fbbe9ee355bf5ea27b3e5fa2fbbe9ee355bf5ea27b3eec6f343eaa9e3d3e2df9e4be000000002ef964bf000080bf876f08bfe8da52bfac73463e876f08bfe8da52bfac73463ebf28473ef989443ef2f8aebe000000004e9670bf000080bfc11e12bfe7004fbfc11e123ec11e12bfe7004fbfc11e123e1f13583ee8064d3e425b78be00000000425b78bf000080bf24d51abf2f794abf2b90be3d24d51abf2f794abf2b90be3d3c1f673e27a3563ee0b41bbe00000000ed057dbf000080bfd39222bf256945bf5fcc393dd39222bf256945bf5fcc393df160743e29f6603ef9e991bd0000000074597fbf000080bf096029bf60f53fbf00000000096029bf60f53fbf000000000000803e96a76b3e0000008000000000000080bf000080bfd39222bf256945bf5fcc39bdd39222bf256945bf5fcc39bd87cf853e29f6603ef9e9913d0000000074597fbf000080bf24d51abf2f794abf2c90bebd24d51abf2f794abf2c90bebd61708c3e27a3563ee0b41b3e00000000ed057dbf000080bfc11e12bfe7004fbfc11e12bec11e12bfe7004fbfc11e12be71f6933ee8064d3e425b783e00000000425b78bf000080bf876f08bfe8da52bfad7346be876f08bfe8da52bfad7346bea06b9c3ef989443ef2f8ae3e000000004c9670bf000080bf5fa2fbbe9ee355bf5fa27bbe5fa2fbbe9ee355bf5fa27bbe09c8a53eaa9e3d3e2ef9e43e000000002ef964bf000080bff3b0e4be74fc57bff77598bef3b0e4be74fc57bff77598be2eeaaf3e42b4383ed5000e3f000000003f0155bf000080bf374accbedb0e59bff0c0b2be374accbedb0e59bff0c0b2be5693ba3e6225363ec293283f00000000dea840bf000080bff0c0b2bedb0e59bf374accbef0c0b2bedb0e59bf374accbea96cc53e6225363edea8403f00000000c29328bf000080bff77598be74fc57bff3b0e4bef77598be74fc57bff3b0e4bed215d03e42b4383e3f01553f00000000d5000ebf000080bf5ea27bbe9ee355bf5fa2fbbe5ea27bbe9ee355bf5fa2fbbef637da3eaa9e3d3e2ef9643f000000002df9e4be000080bfe54443be83ad5bbf2016f4bee54443be83ad5bbf2016f4be59fee03e08c12f3ea6b06d3f00000000ea26bebe000080bf162d10bea04358bf532904bf162d10bea04358bf532904bfc74dea3e2f0b383ec3fa763f0000000054b786be000080bf9f88bcbdb31954bf77660dbf9f88bcbdb31954bf77660dbfdf8af23eb3b9413e50847c3f00000000365828be000080bfaf4938bde0524fbfdabb15bfaf4938bde0524fbfdabb15bf7bbef93e40554c3ef63e7f3f0000000012139dbd000080bf00000000fd124abf362b1dbf00000000fd124abf362b1dbf0000003f7177573e0000803f0000000000000000000080bfaa49383de0524fbfdabb15bfaa49383de0524fbfdabb15bfc220033f40554c3ef63e7f3f000000000e139d3d000080bf9f88bc3db31954bf77660dbf9f88bc3db31954bf77660dbf90ba063fb3b9413e50847c3f000000003658283e000080bf152d103ea04358bf532904bf152d103ea04358bf532904bf1cd90a3f2f0b383ec3fa763f0000000053b7863e000080bfe644433e83ad5bbf2016f4bee644433e83ad5bbf2016f4bed4800f3f08c12f3ea6b06d3f00000000eb26be3e000080bf89e8763eae375ebfae37debe89e8763eae375ebfae37debe3ba9143fc459293ec5c85f3f0000000031a6f83e000080bf8330953ec5c85fbf5aebc6be8330953ec5c85fbf5aebc6bef6371a3fd649253ecdcc4c3f000000009999193f000080bf6577ae3e5e5060bf6577aebe6577ae3e5e5060bf6577aebe0000203ff6e4233ef304353f00000000f304353f000080bf5aebc63ec5c85fbf833095be5aebc63ec5c85fbf833095be0bc8253fd649253e9999193f00000000cdcc4c3f000080bfae37de3eae375ebf89e876beae37de3eae375ebf89e876bec5562b3fc459293e31a6f83e00000000c5c85f3f000080bf2016f43e83ad5bbfe54443be2016f43e83ad5bbfe54443be2d7f303f08c12f3eea26be3e00000000a6b06d3f000080bf5fa27b3e9ee355bf5fa2fbbe5fa27b3e9ee355bf5fa2fbbe05e4123faa9e3d3e2ef9643f000000002ef9e43e000080bfad73463ee8da52bf876f08bfad73463ee8da52bf876f08bfd0350e3ff989443e4c96703f00000000f2f8ae3e000080bff775983e74fc57bff3b0e4bef775983e74fc57bff3b0e4be17f5173f42b4383e3f01553f00000000d5000e3f000080bff0c0b23edb0e59bf374accbef0c0b23edb0e59bf374accbeac491d3f6225363edea8403f00000000c293283f000080bf374acc3edb0e59bff0c0b2be374acc3edb0e59bff0c0b2be55b6223f6225363ec293283f00000000dea8403f000080bff3b0e43e74fc57bff77598bef3b0e43e74fc57bff77598bee90a283f42b4383ed5000e3f000000003f01553f000080bf5fa2fb3e9ee355bf5ea27bbe5fa2fb3e9ee355bf5ea27bbefc1b2d3faa9e3d3e2df9e43e000000002ef9643f000080bf876f083fe8da52bfac7346be876f083fe8da52bfac7346be30ca313ff989443ef2f8ae3e000000004e96703f000080bfc11e123fe7004fbfc11e12bec11e123fe7004fbfc11e12bec804363fe8064d3e425b783e00000000425b783f000080bf24d51a3f2f794abf2b90bebd24d51a3f2f794abf2b90bebdd0c7393f27a3563ee0b41b3e00000000ed057d3f000080bfd392223f256945bf5fcc39bdd392223f256945bf5fcc39bd3c183d3f29f6603ef9e9913d0000000074597f3f000080bf0960293f60f53fbf000000000960293f60f53fbf000000000000403f96a76b3e00000080000000000000803f000080bfd392223f256945bf5fcc393dd392223f256945bf5fcc393dc4e7423f29f6603ef9e991bd0000000074597f3f000080bf24d51a3f2f794abf2c90be3d24d51a3f2f794abf2c90be3d3138463f27a3563ee0b41bbe00000000ed057d3f000080bfc11e123fe7004fbfc11e123ec11e123fe7004fbfc11e123e38fb493fe8064d3e425b78be00000000425b783f000080bf876f083fe8da52bfad73463e876f083fe8da52bfad73463ed0354e3ff989443ef2f8aebe000000004c96703f000080bf5fa2fb3e9ee355bf5fa27b3e5fa2fb3e9ee355bf5fa27b3e05e4523faa9e3d3e2ef9e4be000000002ef9643f000080bff3b0e43e74fc57bff775983ef3b0e43e74fc57bff775983e17f5573f42b4383ed5000ebf000000003f01553f000080bf374acc3edb0e59bff0c0b23e374acc3edb0e59bff0c0b23eab495d3f6225363ec29328bf00000000dea8403f000080bff0c0b23edb0e59bf374acc3ef0c0b23edb0e59bf374acc3e55b6623f6225363edea840bf00000000c293283f000080bfc6bf1f3f429d44bff275133ec6bf1f3f429d44bff275133e993d493fb48c623e924166be00000000b471793f000080bf10d6273f12d03fbf12d0bf3d10d6273f12d03fbf12d0bf3d0ac8453f57ef6b3ec2d010be00000000546d7d3f000080bf009e163fabd248bfabd2483e009e163fabd248bfabd2483efb1b4d3f640c5a3e9ce8a1be00000000e9dc723f000080bf06730c3f374a4cbfc55c7f3e06730c3f374a4cbfc55c7f3ee361513f2ed4523efbddd3be00000000c70d693f000080bfae4c013f16e14ebfd0289b3eae4c013f16e14ebfd0289b3ec804563fb94b4d3efdb503bf00000000a8845b3f000080bf808aea3e1d7b50bfb96bb63e808aea3e1d7b50bfb96bb63eeeee5a3fd1ce493e362b1dbf00000000fc124a3f000080bfeb05d13eeb0551bfeb05d13eeb05d13eeb0551bfeb05d13e0000603f809d483ef30435bf00000000f304353f000080bfb96bb63e1d7b50bf808aea3eb96bb63e1d7b50bf808aea3e1211653fd1ce493efc124abf00000000362b1d3f000080bfd0289b3e16e14ebfae4c013fd0289b3e16e14ebfae4c013f38fb693fb94b4d3ea8845bbf00000000fdb5033f000080bfc55c7f3e374a4cbf06730c3fc55c7f3e374a4cbf06730c3f1d9e6e3f2ed4523ec70d69bf00000000fbddd33e000080bfac73463ee8da52bf876f083fac73463ee8da52bf876f083f30ca713ff989443e4e9670bf00000000f2f8ae3e000080bfc11e123ee7004fbfc11e123fc11e123ee7004fbfc11e123fc804763fe8064d3e425b78bf00000000425b783e000080bf2b90be3d2f794abf24d51a3f2b90be3d2f794abf24d51a3fcfc7793f27a3563eed057dbf00000000e0b41b3e000080bf5fcc393d256945bfd392223f5fcc393d256945bfd392223f3c187d3f29f6603e74597fbf00000000f9e9913d000080bf0000000060f53fbf0960293f0000000060f53fbf0960293f0000803f96a76b3e000080bf0000000000000000000080bfabd2483eabd248bf009e163fabd2483eabd248bf009e163f05e4723f640c5a3ee9dc72bf000000009ce8a13e000080bff275133e429d44bfc6bf1f3ff275133e429d44bfc6bf1f3f67c2763fb48c623eb47179bf000000009241663e000080bf12d0bf3d12d03fbf10d6273f12d0bf3d12d03fbf10d6273ff6377a3f57ef6b3e546d7dbf00000000c2d0103e000080bf54913a3d54913abf3fe82e3f54913a3d54913abf3fe82e3fab497d3f8cd9753ed86e7fbf000000001e3b883d000080bf00000000f30435bff304353f00000000f30435bff304353f0000803f0100803e000080bf0000000000000000000080bf8ef8803ed77441bfdfc31a3f8ef8803ed77441bfdfc31a3f2eea6f3fe5c1683ec54e6cbf000000004decc43e000080bf79494a3ee2a43dbfb35b243f79494a3ee2a43dbfb35b243f8bd6733f2213703eefad74bf000000006b92963e000080bf1e25143e662e39bff9d52c3f1e25143e662e39bff9d52c3f3866773fc46a783e43517abf00000000cb8e563e000080bf1b3cc03d5a3834bf5a38343f1b3cc03d5a3834bf5a38343f70997a3fcdb7803e1dc17dbf00000000ed55073e000080bf53913a3d3fe82ebf54913a3f53913a3d3fe82ebf54913a3ff3747d3ff769853e60807fbf000000005f807f3d000080bf00000000096029bf60f53f3f00000000096029bf60f53f3f0000803f352c8a3e000080bf0000000000000000000080bf72a1813e9f7b35bf1485283f72a1813e9f7b35bf1485283f3d0a713f0c2a7f3ebdef6ebf000000001bccb73e000080bf216d9e3ea7d438bf226d1e3f216d9e3ea7d438bf226d1e3ffb1b6d3f1710793e2ef964bf000000002cf9e43e000080bf5b2d9d3eb37844bf3f14103f5b2d9d3eb37844bf3f14103fa0a76b3f58d5623ec4bd60bf000000001b2cf53e000080bf0053b93eca8f46bfdc5f043f0053b93eca8f46bfdc5f043fe61d673f5fa65e3e2fb951bf000000006dce123f000080bfdef0d43ed1a147bffb8eef3edef0d43ed1a147bffb8eef3ed964623f537b5c3e38563fbf00000000bf132a3f000080bffb8eef3ed1a147bfdff0d43efb8eef3ed1a147bfdff0d43e289b5d3f537b5c3ec0132abf0000000038563f3f000080bfdc5f043fca8f46bf0153b93edc5f043fca8f46bf0153b93e1ae2583f5fa65e3e6dce12bf000000002eb9513f000080bf3f14103fb37844bf5c2d9d3e3f14103fb37844bf5c2d9d3e6058543f58d5623e1c2cf5be00000000c4bd603f000080bfdfc31a3fd77441bf8ff8803edfc31a3fd77441bf8ff8803ed215503fe5c1683e4eecc4be00000000c54e6c3f000080bfb35b243fe2a43dbf7a494a3eb35b243fe2a43dbf7a494a3e75294c3f2213703e6c9296be00000000efad743f000080bff9d52c3f662e39bf1f25143ef9d52c3f662e39bf1f25143ec999483fc46a783ecc8e56be0000000043517a3f000080bf5a38343f5a3834bf1c3cc03d5a38343f5a3834bf1c3cc03d9066453fcdb7803eee5507be000000001dc17d3f000080bf3fe82e3f54913abf54913a3d3fe82e3f54913abf54913a3d55b6423f8cd9753e1e3b88bd00000000d86e7f3f000080bff304353ff30435bf00000000f304353ff30435bf000000000000403f0100803e00000080000000000000803f000080bf3fe82e3f54913abf54913abd3fe82e3f54913abf54913abdac493d3f8cd9753e1e3b883d00000000d86e7f3f000080bf10d6273f12d03fbf12d0bfbd10d6273f12d03fbf12d0bfbdf6373a3f57ef6b3ec2d0103e00000000546d7d3f000080bfc6bf1f3f429d44bff27513bec6bf1f3f429d44bff27513be67c2363fb48c623e9241663e00000000b471793f000080bf009e163fabd248bfabd248be009e163fabd248bfabd248be05e4323f640c5a3e9ce8a13e00000000e9dc723f000080bf06730c3f374a4cbfc55c7fbe06730c3f374a4cbfc55c7fbe1e9e2e3f2ed4523efbddd33e00000000c70d693f000080bfae4c013f16e14ebfd0289bbeae4c013f16e14ebfd0289bbe38fb293fb94b4d3efdb5033f00000000a8845b3f000080bf808aea3e1d7b50bfb96bb6be808aea3e1d7b50bfb96bb6be1211253fd1ce493e362b1d3f00000000fc124a3f000080bfeb05d13eeb0551bfeb05d1beeb05d13eeb0551bfeb05d1be0000203f809d483ef304353f00000000f304353f000080bfb96bb63e1d7b50bf808aeabeb96bb63e1d7b50bf808aeabeeeee1a3fd1ce493efc124a3f00000000362b1d3f000080bfd0289b3e16e14ebfae4c01bfd0289b3e16e14ebfae4c01bfc804163fb94b4d3ea8845b3f00000000fdb5033f000080bfc55c7f3e374a4cbf06730cbfc55c7f3e374a4cbf06730cbfe361113f2ed4523ec70d693f00000000fbddd33e000080bfabd2483eabd248bf009e16bfabd2483eabd248bf009e16bffb1b0d3f640c5a3ee9dc723f000000009ce8a13e000080bfc11e123ee7004fbfc11e12bfc11e123ee7004fbfc11e12bf38fb093fe8064d3e425b783f00000000425b783e000080bf2c90be3d2f794abf24d51abf2c90be3d2f794abf24d51abf3138063f27a3563eed057d3f00000000e0b41b3e000080bf5fcc393d256945bfd39222bf5fcc393d256945bfd39222bfc4e7023f29f6603e74597f3f00000000f9e9913d000080bf0000000060f53fbf096029bf0000000060f53fbf096029bf0000003f96a76b3e0000803f0000000000000000000080bf5fcc39bd256945bfd39222bf5fcc39bd256945bfd39222bf7830fa3e29f6603e74597f3f00000000f9e991bd000080bf2b90bebd2f794abf24d51abf2b90bebd2f794abf24d51abf9e8ff33e27a3563eed057d3f00000000e0b41bbe000080bfc11e12bee7004fbfc11e12bfc11e12bee7004fbfc11e12bf8f09ec3ee8064d3e425b783f00000000425b78be000080bfac7346bee8da52bf876f08bfac7346bee8da52bf876f08bf5f94e33ef989443e4e96703f00000000f2f8aebe000080bfc55c7fbe374a4cbf06730cbfc55c7fbe374a4cbf06730cbf3a3cdd3e2ed4523ec70d693f00000000fbddd3be000080bfd0289bbe16e14ebfae4c01bfd0289bbe16e14ebfae4c01bf70f6d33eb94b4d3ea8845b3f00000000fdb503bf000080bfb96bb6be1d7b50bf808aeabeb96bb6be1d7b50bf808aeabe2422ca3ed1ce493efc124a3f00000000362b1dbf000080bfeb05d1beeb0551bfeb05d1beeb05d1beeb0551bfeb05d1be0000c03e809d483ef304353f00000000f30435bf000080bf808aeabe1d7b50bfb96bb6be808aeabe1d7b50bfb96bb6bedcddb53ed1ce493e362b1d3f00000000fc124abf000080bfae4c01bf16e14ebfd0289bbeae4c01bf16e14ebfd0289bbe8f09ac3eb94b4d3efdb5033f00000000a8845bbf000080bf06730cbf374a4cbfc55c7fbe06730cbf374a4cbfc55c7fbec5c3a23e2ed4523efbddd33e00000000c70d69bf000080bf009e16bfabd248bfabd248be009e16bfabd248bfabd248bef6379a3e640c5a3e9ce8a13e00000000e9dc72bf000080bfc6bf1fbf429d44bff27513bec6bf1fbf429d44bff27513be327b923eb48c623e9241663e00000000b47179bf000080bf10d627bf12d03fbf12d0bfbd10d627bf12d03fbf12d0bfbd14908b3e57ef6b3ec2d0103e00000000546d7dbf000080bf3fe82ebf54913abf54913abd3fe82ebf54913abf54913abda96c853e8cd9753e1e3b883d00000000d86e7fbf000080bff30435bff30435bf00000000f30435bff30435bf000000000000803e0100803e0000008000000000000080bf000080bf3fe82ebf54913abf54913a3d3fe82ebf54913abf54913a3dac26753e8cd9753e1e3b88bd00000000d86e7fbf000080bf10d627bf12d03fbf12d0bf3d10d627bf12d03fbf12d0bf3dd7df683e57ef6b3ec2d010be00000000546d7dbf000080bfc6bf1fbf429d44bff275133ec6bf1fbf429d44bff275133e9b095b3eb48c623e924166be00000000b47179bf000080bf009e16bfabd248bfabd2483e009e16bfabd248bfabd2483e14904b3e640c5a3e9ce8a1be00000000e9dc72bf000080bf06730cbf374a4cbfc55c7f3e06730cbf374a4cbfc55c7f3e74783a3e2ed4523efbddd3be00000000c70d69bf000080bfae4c01bf16e14ebfd0289b3eae4c01bf16e14ebfd0289b3ee2ec273eb94b4d3efdb503bf00000000a8845bbf000080bf808aeabe1d7b50bfb96bb63e808aeabe1d7b50bfb96bb63e4744143ed1ce493e362b1dbf00000000fc124abf000080bfeb05d1beeb0551bfeb05d13eeb05d1beeb0551bfeb05d13e0000003e809d483ef30435bf00000000f30435bf000080bfb96bb6be1d7b50bf808aea3eb96bb6be1d7b50bf808aea3e7177d73dd1ce493efc124abf00000000362b1dbf000080bfd0289bbe16e14ebfae4c013fd0289bbe16e14ebfae4c013f3c26b03db94b4d3ea8845bbf00000000fdb503bf000080bfc55c7fbe374a4cbf06730c3fc55c7fbe374a4cbf06730c3f160f8b3d2ed4523ec70d69bf00000000fbddd3be000080bfabd248beabd248bf009e163fabd248beabd248bf009e163faebf513d640c5a3ee9dc72bf000000009ce8a1be000080bff27513be429d44bfc6bf1f3ff27513be429d44bfc6bf1f3f90d9133db48c623eb47179bf00000000924166be000080bf12d0bfbd12d03fbf10d6273f12d0bfbd12d03fbf10d6273f4701b93c57ef6b3e546d7dbf00000000c2d010be000080bf54913abd54913abf3fe82e3f54913abd54913abf3fe82e3f31952d3c8cd9753ed86e7fbf000000001e3b88bd000080bf00000000f30435bff304353f00000000f30435bff304353f000000800100803e000080bf0000000000000000000080bf54913abd3fe82ebf54913a3f54913abd3fe82ebf54913a3f51c3223cf769853e60807fbf0000000060807fbd000080bf00000000096029bf60f53f3f00000000096029bf60f53f3f00000080352c8a3e000080bf0000000000000000000080bf1c3cc0bd5a3834bf5a38343f1c3cc0bd5a3834bf5a38343f01d2ac3ccdb7803e1dc17dbf00000000ee5507be000080bf1f2514be662e39bff9d52c3f1f2514be662e39bff9d52c3f889c093dc46a783e43517abf00000000cc8e56be000080bf7a494abee2a43dbfb35b243f7a494abee2a43dbfb35b243f4f97423d2213703eefad74bf000000006c9296be000080bf8ff880bed77441bfdfc31a3f8ff880bed77441bfdfc31a3f91ae803de5c1683ec54e6cbf000000004eecc4be000080bf5c2d9dbeb37844bf3f14103f5c2d9dbeb37844bf3f14103f00c3a23d58d5623ec4bd60bf000000001c2cf5be000080bf0153b9beca8f46bfdc5f043f0153b9beca8f46bfdc5f043fd310c73d5fa65e3e2eb951bf000000006dce12bf000080bfdff0d4bed1a147bffb8eef3edff0d4bed1a147bffb8eef3e3bd9ec3d537b5c3e38563fbf00000000c0132abf000080bffb8eefbed1a147bfdef0d43efb8eefbed1a147bfdef0d43e6293093e537b5c3ebf132abf0000000038563fbf000080bfdc5f04bfca8f46bf0053b93edc5f04bfca8f46bf0053b93e96771c3e5fa65e3e6dce12bf000000002fb951bf000080bf3f1410bfb37844bf5b2d9d3e3f1410bfb37844bf5b2d9d3e809e2e3e58d5623e1b2cf5be00000000c4bd60bf000080bfdfc31abfd77441bf8ef8803edfc31abfd77441bf8ef8803eb8a83f3ee5c1683e4decc4be00000000c54e6cbf000080bfb35b24bfe2a43dbf79494a3eb35b24bfe2a43dbf79494a3e2c5a4f3e2213703e6b9296be00000000efad74bf000080bff9d52cbf662e39bf1e25143ef9d52cbf662e39bf1e25143ede985d3ec46a783ecb8e56be0000000043517abf000080bf5a3834bf5a3834bf1b3cc03d5a3834bf5a3834bf1b3cc03dc0656a3ecdb7803eed5507be000000001dc17dbf000080bf54913abf3fe82ebf53913a3d54913abf3fe82ebf53913a3dcbd3753ef769853e5f807fbd0000000060807fbf000080bf60f53fbf096029bf0000000060f53fbf096029bf000000000000803e352c8a3e0000008000000000000080bf000080bf54913abf3fe82ebf54913abd54913abf3fe82ebf54913abd1b16853ef769853e60807f3d0000000060807fbf000080bf5a3834bf5a3834bf1c3cc0bd5a3834bf5a3834bf1c3cc0bd20cd8a3ecdb7803eee55073e000000001dc17dbf000080bff9d52cbf662e39bf1f2514bef9d52cbf662e39bf1f2514be9133913ec46a783ecc8e563e0000000043517abf000080bfb35b24bfe2a43dbf7a494abeb35b24bfe2a43dbf7a494abee952983e2213703e6c92963e00000000efad74bf000080bfdfc31abfd77441bf8ff880bedfc31abfd77441bf8ff880bea42ba03ee5c1683e4eecc43e00000000c54e6cbf000080bf3f1410bfb37844bf5c2d9dbe3f1410bfb37844bf5c2d9dbebfb0a83e58d5623e1c2cf53e00000000c4bd60bf000080bfdc5f04bfca8f46bf0153b9bedc5f04bfca8f46bf0153b9be35c4b13e5fa65e3e6dce123f000000002eb951bf000080bffb8eefbed1a147bfdff0d4befb8eefbed1a147bfdff0d4be4f36bb3e537b5c3ec0132a3f0000000038563fbf000080bfdef0d4bed1a147bffb8eefbedef0d4bed1a147bffb8eefbeb1c9c43e537b5c3e38563f3f00000000bf132abf000080bf0053b9beca8f46bfdc5f04bf0053b9beca8f46bfdc5f04bfcb3bce3e5fa65e3e2fb9513f000000006dce12bf000080bf5b2d9dbeb37844bf3f1410bf5b2d9dbeb37844bf3f1410bf404fd73e58d5623ec4bd603f000000001b2cf5be000080bf8ef880bed77441bfdfc31abf8ef880bed77441bfdfc31abf5cd4df3ee5c1683ec54e6c3f000000004decc4be000080bfabd248beabd248bf009e16bfabd248beabd248bf009e16bf0ac8e53e640c5a3ee9dc723f000000009ce8a1be000080bff27513be429d44bfc6bf1fbff27513be429d44bfc6bf1fbfcd84ed3eb48c623eb471793f00000000924166be000080bf12d0bfbd12d03fbf10d627bf12d0bfbd12d03fbf10d627bfeb6ff43e57ef6b3e546d7d3f00000000c2d010be000080bf54913abd54913abf3fe82ebf54913abd54913abf3fe82ebf5793fa3e8cd9753ed86e7f3f000000001e3b88bd000080bf00000000f30435bff30435bf00000000f30435bff30435bf0000003f0100803e0000803f0000000000000000000080bf54913a3d54913abf3fe82ebf54913a3d54913abf3fe82ebf54b6023f8cd9753ed86e7f3f000000001e3b883d000080bf12d0bf3d12d03fbf10d627bf12d0bf3d12d03fbf10d627bf0ac8053f57ef6b3e546d7d3f00000000c2d0103e000080bff275133e429d44bfc6bf1fbff275133e429d44bfc6bf1fbf9a3d093fb48c623eb471793f000000009241663e000080bf1e2514be662e39bff9d52cbf1e2514be662e39bff9d52cbf6eccee3ec46a783e43517a3f00000000cb8e56be000080bf79494abee2a43dbfb35b24bf79494abee2a43dbfb35b24bf15ade73e2213703eefad743f000000006b9296be000080bf53913abd3fe82ebf54913abf53913abd3fe82ebf54913abfe5e9fa3ef769853e60807f3f000000005f807fbd000080bf1b3cc0bd5a3834bf5a3834bf1b3cc0bd5a3834bf5a3834bfdf32f53ecdb7803e1dc17d3f00000000ed5507be000080bf1c3cc03d5a3834bf5a3834bf1c3cc03d5a3834bf5a3834bf9066053fcdb7803e1dc17d3f00000000ee55073e000080bf1f25143e662e39bff9d52cbf1f25143e662e39bff9d52cbfc999083fc46a783e43517a3f00000000cc8e563e000080bf7a494a3ee2a43dbfb35b24bf7a494a3ee2a43dbfb35b24bf76290c3f2213703eefad743f000000006c92963e000080bf8ff8803ed77441bfdfc31abf8ff8803ed77441bfdfc31abfd215103fe5c1683ec54e6c3f000000004eecc43e000080bf5c2d9d3eb37844bf3f1410bf5c2d9d3eb37844bf3f1410bf6058143f58d5623ec4bd603f000000001c2cf53e000080bf0153b93eca8f46bfdc5f04bf0153b93eca8f46bfdc5f04bf1ae2183f5fa65e3e2eb9513f000000006dce123f000080bfdff0d43ed1a147bffb8eefbedff0d43ed1a147bffb8eefbe289b1d3f537b5c3e38563f3f00000000c0132a3f000080bffb8eef3ed1a147bfdef0d4befb8eef3ed1a147bfdef0d4bed864223f537b5c3ebf132a3f0000000038563f3f000080bfdc5f043fca8f46bf0053b9bedc5f043fca8f46bf0053b9bee61d273f5fa65e3e6dce123f000000002fb9513f000080bf3f14103fb37844bf5b2d9dbe3f14103fb37844bf5b2d9dbea0a72b3f58d5623e1b2cf53e00000000c4bd603f000080bfdfc31a3fd77441bf8ef880bedfc31a3fd77441bf8ef880be2eea2f3fe5c1683e4decc43e00000000c54e6c3f000080bfb35b243fe2a43dbf79494abeb35b243fe2a43dbf79494abe8cd6333f2213703e6b92963e00000000efad743f000080bff9d52c3f662e39bf1e2514bef9d52c3f662e39bf1e2514be3866373fc46a783ecb8e563e0000000043517a3f000080bf5a38343f5a3834bf1b3cc0bd5a38343f5a3834bf1b3cc0bd70993a3fcdb7803eed55073e000000001dc17d3f000080bf54913a3f3fe82ebf53913abd54913a3f3fe82ebf53913abdf2743d3ff769853e5f807f3d0000000060807f3f000080bf60f53f3f096029bf0000000060f53f3f096029bf000000000000403f352c8a3e00000080000000000000803f000080bf54913a3f3fe82ebf54913a3d54913a3f3fe82ebf54913a3d0d8b423ff769853e60807fbd0000000060807f3f000080bf226d1e3fa7d438bf216d9ebe226d1e3fa7d438bf216d9ebefc1b2d3f1710793e2cf9e43e000000002ef9643f000080bf1485283f9f7b35bf72a181be1485283f9f7b35bf72a181be3d0a313f0c2a7f3e1bccb73e00000000bdef6e3f000080bf386f313f386f31bf3fc84abe386f313f386f31bf3fc84abe3ba9343f4732833e3fa88c3e000000006f26763f000080bf662e393ff9d52cbf202514be662e393ff9d52cbf202514be17f5373feb35873eadd2483e0000000056077b3f000080bf12d03f3f10d627bf11d0bfbd12d03f3f10d627bf11d0bfbdeeee3a3f86798b3eea05fe3d00000000ec057e3f000080bf2569453fd39222bf65cc39bd2569453fd39222bf65cc39bd289b3d3f63dc8f3e8886703d00000000e98e7f3f000080bffd124a3f362b1dbf00000000fd124a3f362b1dbf000000000000403f4844943e00000080000000000000803f000080bf2569453fd39222bf5fcc393d2569453fd39222bf5fcc393dd864423f63dc8f3e818670bd00000000e98e7f3f000080bf12d03f3f10d627bf12d0bf3d12d03f3f10d627bf12d0bf3d1211453f86798b3eec05febd00000000ec057e3f000080bf662e393ff9d52cbf1f25143e662e393ff9d52cbf1f25143ee90a483feb35873eacd248be0000000056077b3f000080bf386f313f386f31bf40c84a3e386f313f386f31bf40c84a3ec5564b3f4732833e40a88cbe000000006f26763f000080bf1485283f9f7b35bf72a1813e1485283f9f7b35bf72a1813ec3f54e3f0c2a7f3e1bccb7be00000000bdef6e3f000080bf226d1e3fa7d438bf226d9e3e226d1e3fa7d438bf226d9e3e05e4523f1710793e2ef9e4be000000002ef9643f000080bfd631133fb4563bbfb456bb3ed631133fb4563bbfb456bb3e3417573fae69743eac7009bf0000000033fa573f000080bf82ec063fb5e43cbfcfe0d73e82ec063fb5e43cbfcfe0d73ece7d5b3f867e713e03ec1fbf0000000004e7473f000080bf568af33e986b3dbf568af33e568af33e986b3dbf568af33e0000603fa47f703ef40435bf00000000f404353f000080bfcee0d73eb5e43cbf82ec063fcee0d73eb5e43cbf82ec063f3382643f867e713e06e747bf0000000003ec1f3f000080bfb456bb3eb4563bbfd631133fb456bb3eb4563bbfd631133fcde8683fae69743e33fa57bf00000000ac70093f000080bf38162c3f38162cbf6fd99e3e38162c3f38162cbf6fd99e3e2e9e513f19db873ecb8ed6be000000000670683f000080bf9f7b353f148528bf72a1813e9f7b353f148528bf72a1813edff94d3fbee58a3e4a34acbe000000000016713f000080bff275213f71ea2ebff05ebc3ef275213f71ea2ebff05ebc3e0484553f0d68853eb1fd00bf000000009d205d3f000080bf31ab153f96e130bf2fb3d93e31ab153f96e130bf2fb3d93e959e593f2faf833e6b9216bf0000000055094f3f000080bf77d6083f9be331bfd74ef63e77d6083f9be331bfd74ef63e8adb5d3f5ecb823e46412bbf0000000086483e3f000080bfd74ef63e9be331bf77d6083fd74ef63e9be331bf77d6083f7624623f5ecb823e86483ebf0000000046412b3f000080bf2fb3d93e96e130bf31ab153f2fb3d93e96e130bf31ab153f6b61663f2faf833e55094fbf000000006b92163f000080bff15ebc3e71ea2ebff275213ff15ebc3e71ea2ebff275213ffc7b6a3f0d68853e9d205dbf00000000b2fd003f000080bf6fd99e3e38162cbf38162c3f6fd99e3e38162cbf38162c3fd3616e3f19db873e067068bf00000000cb8ed63e000080bf72a1813e148528bf9f7b353f72a1813e148528bf9f7b353f2106723fbee58a3e001671bf000000004a34ac3e000080bf3fc84a3e386f31bf386f313f3fc84a3e386f31bf386f313f3ba9743f4732833e6f2676bf000000003fa88c3e000080bf2025143ef9d52cbf662e393f2025143ef9d52cbf662e393f17f5773feb35873e56077bbf00000000add2483e000080bf11d0bf3d10d627bf12d03f3f11d0bf3d10d627bf12d03f3feeee7a3f86798b3eec057ebf00000000ea05fe3d000080bf65cc393dd39222bf2569453f65cc393dd39222bf2569453f279b7d3f63dc8f3ee98e7fbf000000008886703d000080bf00000000362b1dbffd124a3f00000000362b1dbffd124a3f0000803f4844943e000080bf0000000000000000000080bf79494a3eb35b24bfe3a43d3f79494a3eb35b24bfe3a43d3fd261753f73628e3e2d5b77bf000000005bec833e000080bff275133ec6bf1fbf429d443ff275133ec6bf1fbf429d443fc072783fd82c923e839d7bbf0000000023b63c3e000080bf2e90be3d24d51abf2f794a3f2e90be3d24d51abf2f794a3f833a7b3f7d24963e1e3f7ebf00000000784aef3d000080bfa549383ddabb15bfe0524f3fa549383ddabb15bfe0524f3f21bd7d3f532e9a3e199b7fbf000000008134633d000080bf00000000208f10bf5647533f00000000208f10bf5647533f0000803fff349e3e000080bf0000000000000000000080bf8ff8803edfc31abfd774413f8ff8803edfc31abfd774413f05e4723f4b32963ee8dc72bf000000009be8a13e000080bfaad2483e009e16bfabd2483faad2483e009e16bfabd2483fc804763f8d7c993e435b78bf00000000415b783e000080bfc01e123ec11e12bfe7004f3fc01e123ec11e12bfe7004f3f1ae2783ff3ff9c3ec61a7cbf00000000c7f4313e000080bfa288bc3d77660dbfb319543fa288bc3d77660dbfb319543fce7d7b3fa4a1a03e2a6f7ebf00000000f029e23d000080bfe616363d2b9108bf2e3b583fe616363d2b9108bf2e3b583f8adb7d3fa44ba43e6ba57fbf00000000f147573d000080bf00000000ffb503bfa9845b3f00000000ffb503bfa9845b3f0000803fe1eca73e000080bf0000000000000000000080bfc45c7f3e06730cbf374a4c3fc45c7f3e06730cbf374a4c3fcca8733f475ba13ecd5874bf0000000080b7983e000080bf5b2d9d3e3f1410bfb378443f5b2d9d3e3f1410bfb378443f2d7f703fb6939e3ea6b06dbf00000000ea26be3e000080bf226d9e3e226d1ebfa7d4383f226d9e3e226d1ebfa7d4383fd3806f3f0440933e174d6bbf00000000cbafc93e000080bff15ebc3ef27521bf71ea2e3ff15ebc3ef27521bf71ea2e3f01e06b3fa1c6903e8e6661bf0000000038bdf23e000080bf4951da3ef7bc23bff7bc233f4951da3ef7bc23bff7bc233fe90a683f15e68e3e400155bf00000000d5000e3f000080bf44baf73ed82625bf9b63173f44baf73ed82625bf9b63173f950f643f7bb98d3e102246bf00000000df1b223f000080bfa4060a3f92a125bfa4060a3fa4060a3f92a125bfa4060a3f0000603f1f538d3ef40435bf00000000f404353f000080bf9b63173fd82625bf44baf73e9b63173fd82625bf44baf73e6bf05b3f7bb98d3edf1b22bf000000001022463f000080bff7bc233ff7bc23bf4a51da3ef7bc233ff7bc23bf4a51da3e17f5573f15e68e3ed5000ebf000000004001553f000080bf71ea2e3ff27521bff05ebc3e71ea2e3ff27521bff05ebc3eff1f543fa1c6903e36bdf2be000000008e66613f000080bfa7d4383f226d1ebf226d9e3ea7d4383f226d1ebf226d9e3e2d7f503f0440933ecbafc9be00000000174d6b3f000080bfd774413fdfc31abf8ff8803ed774413fdfc31abf8ff8803efb1b4d3f4b32963e9be8a1be00000000e8dc723f000080bfe2a43d3fb35b24bf7a494a3ee2a43d3fb35b24bf7a494a3e2f9e4a3f73628e3e5cec83be000000002b5b773f000080bf429d443fc6bf1fbff275133e429d443fc6bf1fbff275133e408d473fd82c923e23b63cbe00000000839d7b3f000080bf2f794a3f24d51abf2c90be3d2f794a3f24d51abf2c90be3d7dc5443f7d24963e764aefbd000000001e3f7e3f000080bfe0524f3fdabb15bfaa49383de0524f3fdabb15bfaa49383ddf42423f532e9a3e873463bd00000000199b7f3f000080bf5647533f208f10bf000000005647533f208f10bf000000000000403fff349e3e00000080000000000000803f000080bfe0524f3fdabb15bfa54938bde0524f3fdabb15bfa54938bd21bd3d3f532e9a3e8134633d00000000199b7f3f000080bf2f794a3f24d51abf2e90bebd2f794a3f24d51abf2e90bebd833a3b3f7d24963e784aef3d000000001e3f7e3f000080bf429d443fc6bf1fbff27513be429d443fc6bf1fbff27513bec072383fd82c923e23b63c3e00000000839d7b3f000080bfe3a43d3fb35b24bf79494abee3a43d3fb35b24bf79494abed261353f73628e3e5bec833e000000002d5b773f000080bf9f7b353f148528bf72a181be9f7b353f148528bf72a181be2206323fbee58a3e4a34ac3e000000000016713f000080bf38162c3f38162cbf6fd99ebe38162c3f38162cbf6fd99ebed3612e3f19db873ecb8ed63e000000000670683f000080bff275213f71ea2ebff15ebcbef275213f71ea2ebff15ebcbefc7b2a3f0d68853eb2fd003f000000009d205d3f000080bfd631133fb4563bbfb456bbbed631133fb4563bbfb456bbbecde8283fae69743eac70093f0000000033fa573f000080bf82ec063fb5e43cbfcee0d7be82ec063fb5e43cbfcee0d7be3282243f867e713e03ec1f3f0000000006e7473f000080bf568af33e986b3dbf568af3be568af33e986b3dbf568af3be0000203fa47f703ef404353f00000000f404353f000080bfcfe0d73eb5e43cbf82ec06bfcfe0d73eb5e43cbf82ec06bfce7d1b3f867e713e04e7473f0000000003ec1f3f000080bfb456bb3eb4563bbfd63113bfb456bb3eb4563bbfd63113bf3417173fae69743e33fa573f00000000ac70093f000080bf226d9e3ea7d438bf226d1ebf226d9e3ea7d438bf226d1ebf05e4123f1710793e2ef9643f000000002ef9e43e000080bf72a1813e9f7b35bf148528bf72a1813e9f7b35bf148528bfc4f50e3f0c2a7f3ebdef6e3f000000001bccb73e000080bf40c84a3e386f31bf386f31bf40c84a3e386f31bf386f31bfc6560b3f4732833e6f26763f0000000040a88c3e000080bf1f25143ef9d52cbf662e39bf1f25143ef9d52cbf662e39bfe90a083feb35873e56077b3f00000000acd2483e000080bf12d0bf3d10d627bf12d03fbf12d0bf3d10d627bf12d03fbf1211053f86798b3eec057e3f00000000ec05fe3d000080bf54913a3d3fe82ebf54913abf54913a3d3fe82ebf54913abf0e8b023ff769853e60807f3f0000000060807f3d000080bf00000000096029bf60f53fbf00000000096029bf60f53fbf0000003f352c8a3e0000803f0000000000000000000080bf65cc39bdd39222bf256945bf65cc39bdd39222bf256945bf4f36fb3e63dc8f3ee98e7f3f00000000888670bd000080bf11d0bfbd10d627bf12d03fbf11d0bfbd10d627bf12d03fbfdcddf53e86798b3eec057e3f00000000ea05febd000080bf202514bef9d52cbf662e39bf202514bef9d52cbf662e39bf2eeaef3eeb35873e56077b3f00000000add248be000080bf3fc84abe386f31bf386f31bf3fc84abe386f31bf386f31bf7552e93e4732833e6f26763f000000003fa88cbe000080bf72a181be9f7b35bf148528bf72a181be9f7b35bf148528bf7914e23e0c2a7f3ebdef6e3f000000001bccb7be000080bf216d9ebea7d438bf226d1ebf216d9ebea7d438bf226d1ebff637da3e1710793e2ef9643f000000002cf9e4be000080bfb456bbbeb4563bbfd63113bfb456bbbeb4563bbfd63113bf99d1d13eae69743e33fa573f00000000ac7009bf000080bfcee0d7beb5e43cbf82ec06bfcee0d7beb5e43cbf82ec06bf6404c93e867e713e06e7473f0000000003ec1fbf000080bf568af3be986b3dbf568af3be568af3be986b3dbf568af3be0000c03ea47f703ef404353f00000000f40435bf000080bf82ec06bfb5e43cbfcfe0d7be82ec06bfb5e43cbfcfe0d7be9bfbb63e867e713e03ec1f3f0000000004e747bf000080bfd63113bfb4563bbfb456bbbed63113bfb4563bbfb456bbbe662eae3eae69743eac70093f0000000033fa57bf000080bf226d1ebfa7d438bf226d9ebe226d1ebfa7d438bf226d9ebe09c8a53e1710793e2ef9e43e000000002ef964bf000080bf148528bf9f7b35bf72a181be148528bf9f7b35bf72a181be86eb9d3e0c2a7f3e1bccb73e00000000bdef6ebf000080bf386f31bf386f31bf40c84abe386f31bf386f31bf40c84abe8aad963e4732833e40a88c3e000000006f2676bf000080bf662e39bff9d52cbf1f2514be662e39bff9d52cbf1f2514bed215903eeb35873eacd2483e0000000056077bbf000080bf12d03fbf10d627bf12d0bfbd12d03fbf10d627bf12d0bfbd23228a3e86798b3eec05fe3d00000000ec057ebf000080bf256945bfd39222bf5fcc39bd256945bfd39222bf5fcc39bdb1c9843e63dc8f3e8186703d00000000e98e7fbf000080bffd124abf362b1dbf00000000fd124abf362b1dbf000000000000803e4844943e0000008000000000000080bf000080bf256945bfd39222bf65cc393d256945bfd39222bf65cc393d9e6c763e63dc8f3e888670bd00000000e98e7fbf000080bf12d03fbf10d627bf11d0bf3d12d03fbf10d627bf11d0bf3db8bb6b3e86798b3eea05febd00000000ec057ebf000080bf662e39bff9d52cbf2025143e662e39bff9d52cbf2025143e5bd45f3eeb35873eadd248be0000000056077bbf000080bf386f31bf386f31bf3fc84a3e386f31bf386f31bf3fc84a3eeba4523e4732833e3fa88cbe000000006f2676bf000080bf148528bf9f7b35bf72a1813e148528bf9f7b35bf72a1813ef328443e0c2a7f3e1bccb7be00000000bdef6ebf000080bf226d1ebfa7d438bf216d9e3e226d1ebfa7d438bf216d9e3eec6f343e1710793e2cf9e4be000000002ef964bf000080bfd63113bfb4563bbfb456bb3ed63113bfb4563bbfb456bb3e32a3233eae69743eac7009bf0000000033fa57bf000080bf82ec06bfb5e43cbfcee0d73e82ec06bfb5e43cbfcee0d73eca08123e867e713e03ec1fbf0000000006e747bf000080bf568af3be986b3dbf568af33e568af3be986b3dbf568af33e0000003ea47f703ef40435bf00000000f40435bf000080bfcfe0d7beb5e43cbf82ec063fcfe0d7beb5e43cbf82ec063f6ceedb3d867e713e04e747bf0000000003ec1fbf000080bfb456bbbeb4563bbfd631133fb456bbbeb4563bbfd631133f9ab9b83dae69743e33fa57bf00000000ac7009bf000080bf226d9ebea7d438bf226d1e3f226d9ebea7d438bf226d1e3f2920973d1710793e2ef964bf000000002ef9e4be000080bf72a181be9f7b35bf1485283f72a181be9f7b35bf1485283f315c6f3d0c2a7f3ebdef6ebf000000001bccb7be000080bf40c84abe386f31bf386f313f40c84abe386f31bf386f313f556c353d4732833e6f2676bf0000000040a88cbe000080bf1f2514bef9d52cbf662e393f1f2514bef9d52cbf662e393f91ae003deb35873e56077bbf00000000acd248be000080bf12d0bfbd10d627bf12d03f3f12d0bfbd10d627bf12d03f3f3a22a23c86798b3eec057ebf00000000ec05febd000080bf5fcc39bdd39222bf2569453f5fcc39bdd39222bf2569453f1c36193c63dc8f3ee98e7fbf00000000818670bd000080bf00000000362b1dbffd124a3f00000000362b1dbffd124a3f000000804844943e000080bf0000000000000000000080bfaa4938bddabb15bfe0524f3faa4938bddabb15bfe0524f3fb4b7103c532e9a3e199b7fbf00000000873463bd000080bf00000000208f10bf5647533f00000000208f10bf5647533f00000080ff349e3e000080bf0000000000000000000080bf2c90bebd24d51abf2f794a3f2c90bebd24d51abf2f794a3fa1af983c7d24963e1e3f7ebf00000000764aefbd000080bff27513bec6bf1fbf429d443ff27513bec6bf1fbf429d443ffaa7f13cd82c923e839d7bbf0000000023b63cbe000080bf7a494abeb35b24bfe2a43d3f7a494abeb35b24bfe2a43d3fe7e2293d73628e3e2b5b77bf000000005cec83be000080bf72a181be148528bf9f7b353f72a181be148528bf9f7b353fea9d5f3dbee58a3e001671bf000000004a34acbe000080bf6fd99ebe38162cbf38162c3f6fd99ebe38162cbf38162c3f6af18c3d19db873e067068bf00000000cb8ed6be000080bff05ebcbe71ea2ebff275213ff05ebcbe71ea2ebff275213f2120ac3d0d68853e9d205dbf00000000b1fd00bf000080bf2fb3d9be96e130bf31ab153f2fb3d9be96e130bf31ab153faaf4cc3d2faf833e55094fbf000000006b9216bf000080bfd74ef6be9be331bf77d6083fd74ef6be9be331bf77d6083f50dcee3d5ecb823e86483ebf0000000046412bbf000080bf77d608bf9be331bfd74ef63e77d608bf9be331bfd74ef63ed891083e5ecb823e46412bbf0000000086483ebf000080bf31ab15bf96e130bf2fb3d93e31ab15bf96e130bf2fb3d93eab85193e2faf833e6b9216bf0000000055094fbf000080bff27521bf71ea2ebff15ebc3ef27521bf71ea2ebff15ebc3eefef293e0d68853eb2fd00bf000000009d205dbf000080bf38162cbf38162cbf6fd99e3e38162cbf38162cbf6fd99e3e4a87393e19db873ecb8ed6be00000000067068bf000080bf9f7b35bf148528bf72a1813e9f7b35bf148528bf72a1813e8518483ebee58a3e4a34acbe00000000001671bf000080bfe3a43dbfb35b24bf79494a3ee3a43dbfb35b24bf79494a3e4787553e73628e3e5bec83be000000002d5b77bf000080bf429d44bfc6bf1fbff275133e429d44bfc6bf1fbff275133e00cb613ed82c923e23b63cbe00000000839d7bbf000080bf2f794abf24d51abf2e90be3d2f794abf24d51abf2e90be3d0bea6c3e7d24963e784aefbd000000001e3f7ebf000080bfe0524fbfdabb15bfa549383de0524fbfdabb15bfa549383d85f4763e532e9a3e813463bd00000000199b7fbf000080bf564753bf208f10bf00000000564753bf208f10bf000000000000803eff349e3e0000008000000000000080bf000080bfe0524fbfdabb15bfaa4938bde0524fbfdabb15bfaa4938bdbe85843e532e9a3e8734633d00000000199b7fbf000080bf2f794abf24d51abf2c90bebd2f794abf24d51abf2c90bebdfa8a893e7d24963e764aef3d000000001e3f7ebf000080bf429d44bfc6bf1fbff27513be429d44bfc6bf1fbff27513be7f1a8f3ed82c923e23b63c3e00000000839d7bbf000080bfe2a43dbfb35b24bf7a494abee2a43dbfb35b24bf7a494abe5d3c953e73628e3e5cec833e000000002b5b77bf000080bf9f7b35bf148528bf72a181be9f7b35bf148528bf72a181bebdf39b3ebee58a3e4a34ac3e00000000001671bf000080bf38162cbf38162cbf6fd99ebe38162cbf38162cbf6fd99ebe5a3ca33e19db873ecb8ed63e00000000067068bf000080bff27521bf71ea2ebff05ebcbef27521bf71ea2ebff05ebcbe0808ab3e0d68853eb1fd003f000000009d205dbf000080bf31ab15bf96e130bf2fb3d9be31ab15bf96e130bf2fb3d9be2a3db33e2faf833e6b92163f0000000055094fbf000080bf77d608bf9be331bfd74ef6be77d608bf9be331bfd74ef6be14b7bb3e5ecb823e46412b3f0000000086483ebf000080bfd74ef6be9be331bf77d608bfd74ef6be9be331bf77d608bfeb48c43e5ecb823e86483e3f0000000046412bbf000080bf2fb3d9be96e130bf31ab15bf2fb3d9be96e130bf31ab15bfd5c2cc3e2faf833e55094f3f000000006b9216bf000080bff15ebcbe71ea2ebff27521bff15ebcbe71ea2ebff27521bff7f7d43e0d68853e9d205d3f00000000b2fd00bf000080bf6fd99ebe38162cbf38162cbf6fd99ebe38162cbf38162cbfa5c3dc3e19db873e0670683f00000000cb8ed6be000080bf72a181be148528bf9f7b35bf72a181be148528bf9f7b35bf420ce43ebee58a3e0016713f000000004a34acbe000080bf79494abeb35b24bfe3a43dbf79494abeb35b24bfe3a43dbfa3c3ea3e73628e3e2d5b773f000000005bec83be000080bff27513bec6bf1fbf429d44bff27513bec6bf1fbf429d44bf80e5f03ed82c923e839d7b3f0000000023b63cbe000080bf2e90bebd24d51abf2f794abf2e90bebd24d51abf2f794abf0575f63e7d24963e1e3f7e3f00000000784aefbd000080bfa54938bddabb15bfe0524fbfa54938bddabb15bfe0524fbf427afb3e532e9a3e199b7f3f00000000813463bd000080bf00000000362b1dbffd124abf00000000362b1dbffd124abf0000003f4844943e0000803f0000000000000000000080bf5fcc393dd39222bf256945bf5fcc393dd39222bf256945bfd864023f63dc8f3ee98e7f3f000000008186703d000080bf00000000208f10bf564753bf00000000208f10bf564753bf0000003fff349e3e0000803f0000000000000000000080bfaa49383ddabb15bfe0524fbfaa49383ddabb15bfe0524fbfdf42023f532e9a3e199b7f3f000000008734633d000080bf2c90be3d24d51abf2f794abf2c90be3d24d51abf2f794abf7ec5043f7d24963e1e3f7e3f00000000764aef3d000080bff275133ec6bf1fbf429d44bff275133ec6bf1fbf429d44bf408d073fd82c923e839d7b3f0000000023b63c3e000080bf7a494a3eb35b24bfe2a43dbf7a494a3eb35b24bfe2a43dbf2e9e0a3f73628e3e2b5b773f000000005cec833e000080bf72a1813e148528bf9f7b35bf72a1813e148528bf9f7b35bfdff90d3fbee58a3e0016713f000000004a34ac3e000080bf6fd99e3e38162cbf38162cbf6fd99e3e38162cbf38162cbf2e9e113f19db873e0670683f00000000cb8ed63e000080bff05ebc3e71ea2ebff27521bff05ebc3e71ea2ebff27521bf0484153f0d68853e9d205d3f00000000b1fd003f000080bf2fb3d93e96e130bf31ab15bf2fb3d93e96e130bf31ab15bf969e193f2faf833e55094f3f000000006b92163f000080bfd74ef63e9be331bf77d608bfd74ef63e9be331bf77d608bf8adb1d3f5ecb823e86483e3f0000000046412b3f000080bf77d6083f9be331bfd74ef6be77d6083f9be331bfd74ef6be7624223f5ecb823e46412b3f0000000086483e3f000080bf31ab153f96e130bf2fb3d9be31ab153f96e130bf2fb3d9be6b61263f2faf833e6b92163f0000000055094f3f000080bf226d9e3e226d1ebfa7d438bf226d9e3e226d1ebfa7d438bf2d7f103f0440933e174d6b3f00000000cbafc93e000080bf8ff8803edfc31abfd77441bf8ff8803edfc31abfd77441bffb1b0d3f4b32963ee8dc723f000000009be8a13e000080bff05ebc3ef27521bf71ea2ebff05ebc3ef27521bf71ea2ebfff1f143fa1c6903e8e66613f0000000036bdf23e000080bf4a51da3ef7bc23bff7bc23bf4a51da3ef7bc23bff7bc23bf17f5173f15e68e3e4001553f00000000d5000e3f000080bf44baf73ed82625bf9b6317bf44baf73ed82625bf9b6317bf6bf01b3f7bb98d3e1022463f00000000df1b223f000080bfa4060a3f92a125bfa4060abfa4060a3f92a125bfa4060abf0000203f1f538d3ef404353f00000000f404353f000080bf9b63173fd82625bf44baf7be9b63173fd82625bf44baf7be960f243f7bb98d3edf1b223f000000001022463f000080bff7bc233ff7bc23bf4951dabef7bc233ff7bc23bf4951dabee90a283f15e68e3ed5000e3f000000004001553f000080bf71ea2e3ff27521bff15ebcbe71ea2e3ff27521bff15ebcbe01e02b3fa1c6903e38bdf23e000000008e66613f000080bfa7d4383f226d1ebf226d9ebea7d4383f226d1ebf226d9ebed4802f3f0440933ecbafc93e00000000174d6b3f000080bfd774413fdfc31abf8ff880bed774413fdfc31abf8ff880be05e4323f4b32963e9be8a13e00000000e8dc723f000080bfabd2483f009e16bfaad248beabd2483f009e16bfaad248bec804363f8d7c993e415b783e00000000435b783f000080bfe7004f3fc11e12bfc01e12bee7004f3fc11e12bfc01e12be1ae2383ff3ff9c3ec7f4313e00000000c61a7c3f000080bfb319543f77660dbfa288bcbdb319543f77660dbfa288bcbdce7d3b3fa4a1a03ef029e23d000000002a6f7e3f000080bf2e3b583f2b9108bfe61636bd2e3b583f2b9108bfe61636bd8adb3d3fa44ba43ef147573d000000006ba57f3f000080bfa9845b3fffb503bf00000000a9845b3fffb503bf000000000000403fe1eca73e00000080000000000000803f000080bf2e3b583f2b9108bfe416363d2e3b583f2b9108bfe416363d7624423fa44ba43eef4757bd000000006ba57f3f000080bfb319543f77660dbf9f88bc3db319543f77660dbf9f88bc3d3282443fa4a1a03eec29e2bd000000002a6f7e3f000080bfe7004f3fc11e12bfc11e123ee7004f3fc11e12bfc11e123ee61d473ff3ff9c3ec8f431be00000000c61a7c3f000080bfabd2483f009e16bfabd2483eabd2483f009e16bfabd2483e38fb493f8d7c993e435b78be00000000435b783f000080bfa043583f532904bf142d10bea043583f532904bf142d10be7045393f3597a73e3458283e0000000050847c3f000080bfb1a25c3f0379ffbe5fccb9bdb1a25c3f0379ffbe5fccb9bd18ba3b3f44dcaa3ef964d63d00000000e8977e3f000080bfa818603f8681f6beec4633bda818603f8681f6beec4633bdeaf63d3f9b22ae3e628b4c3d000000003bae7f3f000080bfdbc5623f5392edbe00000000dbc5623f5392edbe000000000000403fd15cb13e00000080000000000000803f000080bfa818603f8681f6beed46333da818603f8681f6beed46333d1609423f9b22ae3e638b4cbd000000003bae7f3f000080bfb1a25c3f0379ffbe5fccb93db1a25c3f0379ffbe5fccb93de845443f44dcaa3ef964d6bd00000000e8977e3f000080bfa043583f532904bf162d103ea043583f532904bf162d103e90ba463f3597a73e365828be0000000050847c3f000080bfe8da523f876f08bfad73463ee8da523f876f08bfad73463e5d6a493ff464a43e49896abe00000000de31793f000080bf374a4c3f06730cbfc55c7f3e374a4c3f06730cbfc55c7f3e34574c3f475ba13e80b798be00000000cd58743f000080bfb378443f3f1410bf5d2d9d3eb378443f3f1410bf5d2d9d3ed3804f3fb6939e3eec26bebe00000000a6b06d3f000080bfb4563b3fd63113bfb456bb3eb4563b3fd63113bfb456bb3e05e4523f4a2a9c3e2ef9e4be000000002ef9643f000080bf96e1303f31ab15bf2fb3d93e96e1303f31ab15bf2fb3d93ef879563f663b9a3e3f2b06bf0000000047065a3f000080bfd826253f9b6317bf44baf73ed826253f9b6317bf44baf73ef6375a3fc4e0983e9a9919bf00000000cdcc4c3f000080bf9745183f974518bfcf6d0a3f9745183f974518bfcf6d0a3fb10f5e3f152e983e49342cbf00000000b76c3d3f000080bfce6d0a3f974518bf9845183fce6d0a3f974518bf9845183f50f0613f152e983eb86c3dbf0000000048342c3f000080bf42baf73e9b6317bfd926253f42baf73e9b6317bfd926253f0bc8653fc4e0983ececc4cbf000000009899193f000080bf2eb3d93e31ab15bf96e1303f2eb3d93e31ab15bf96e1303f0886693f663b9a3e48065abf000000003f2b063f000080bfb356bb3ed63113bfb4563b3fb356bb3ed63113bfb4563b3ffb1b6d3f4a2a9c3e2ef964bf000000002df9e43e000080bf9be3313f77d608bfd74ef63e9be3313f77d608bfd74ef63e10ac583f7617a43ebfb711bf00000000307b523f000080bfb5e43c3f82ec06bfcfe0d73eb5e43c3f82ec06bfcfe0d73ee426553f8187a53eed05febe000000002f455e3f000080bf92a1253fa4060abfa4060a3f92a1253fa4060abfa4060a3f624e5c3ff031a33e20e323bf0000000027aa443f000080bf9745183fcf6d0abf9745183f9745183fcf6d0abf9745183f0000603fe8e3a23ef30435bf00000000f304353f000080bfa4060a3fa4060abf92a1253fa4060a3fa4060abf92a1253f9eb1633ff031a33e27aa44bf0000000020e3233f000080bfd94ef63e77d608bf9ae3313fd94ef63e77d608bf9ae3313ff053673f7617a43e2e7b52bf00000000c0b7113f000080bfcfe0d73e82ec06bfb5e43c3fcfe0d73e82ec06bfb5e43c3f1cd96a3f8187a53e2f455ebf00000000ed05fe3e000080bf0153b93edc5f04bfca8f463f0153b93edc5f04bfca8f463fd0356e3fa86ea73e9efb67bf000000007184d83e000080bfcf289b3eae4c01bf16e14e3fcf289b3eae4c01bf16e14e3fe361713fb2b5a93e45b36fbf0000000072c6b33e000080bf61a27b3e5fa2fbbe9ee3553f61a27b3e5fa2fbbe9ee3553f6058743f4d44ac3efa9875bf000000001c78903e000080bfac73463e876f08bfe8da523fac73463e876f08bfe8da523fa395763ff464a43ede3179bf0000000048896a3e000080bf142d103e532904bfa043583f142d103e532904bfa043583f7045793f3597a73e50847cbf000000003458283e000080bf5fccb93d0379ffbeb1a25c3f5fccb93d0379ffbeb1a25c3f18ba7b3f44dcaa3ee8977ebf00000000f964d63d000080bfec46333d8681f6bea818603fec46333d8681f6bea818603feaf67d3f9b22ae3e3bae7fbf00000000628b4c3d000080bf000000005392edbedbc5623f000000005392edbedbc5623f0000803fd15cb13e000080bf0000000000000000000080bfe644433e2016f4be83ad5b3fe644433e2016f4be83ad5b3f3317773f3903af3e65e779bf0000000004235e3e000080bf66b30d3e012becbe0e5c603f66b30d3e012becbe0e5c603f959e793fd4ddb13e09de7cbf00000000a6b41f3e000080bf4673b63d1c10e4be1c10643f4673b63d1c10e4be1c10643f6bf07b3fd3c2b43ec2ba7ebf0000000097c8cb3d000080bf36f02f3d3fecdbbe42eb663f36f02f3d3fecdbbe42eb663fb10f7e3f7ea4b73ed3b57fbf00000000b1d3423d000080bf00000000fbddd3bec70d693f00000000fbddd3bec70d693f0000803f7578ba3e000080bf0000000000000000000080bf89e8763eae37debeae375e3f89e8763eae37debeae375e3fecf5743f30d5b63e1ba976bf000000009e08893e000080bfbf643f3e5551d7bea147633fbf643f3e5551d7bea147633fbc8b773f1143b93e3d827abf000000006bf4523e000080bf62c70a3e102bd0be4b4c673f62c70a3e102bd0be4b4c673f05ef793ff4c2bb3eef2a7dbf0000000091e6173e000080bf1398b23d19ebc8be9d676a3f1398b23d19ebc8be9d676a3f9e217c3f6547be3ecbd87ebf00000000422bc23d000080bfed2a2c3d4eb0c1be0abb6c3fed2a2c3d4eb0c1be0abb6c3f38267e3fd7c5c03e67bc7fbf000000005ffd393d000080bf000000008e92babeee656e3f000000008e92babeee656e3f0000803f6336c33e000080bf0000000000000000000080bfed5b713e5916c1be894a653fed5b713e5916c1be894a653f0484753fc4fac03e339277bf00000000f14c823e000080bf8330953e5aebc6bec5c85f3f8330953e5aebc6bec5c85f3f05e4723f56f8be3ee9dc72bf000000009be8a13e000080bff775983ef3b0e4be74fc573ff775983ef3b0e4be74fc573f0d2d723f9f89b43ed16771bf000000006667aa3e000080bfb86bb63e808aeabe1d7b503fb86bb63e808aeabe1d7b503f67326f3f1d73b23e4a896abf000000001f38cd3e000080bfdef0d43efb8eefbed2a1473fdef0d43efb8eefbed2a1473f90096c3fd4a5b03ee3e161bf00000000f0f0f03e000080bf588af33e568af3be986b3d3f588af33e568af3be986b3d3fbcb8683fd435af3e785757bf00000000186f0a3f000080bf77d6083fd74ef6be9be3313f77d6083fd74ef6be9be3313fd948653f0335ae3e68e94abf0000000001161c3f000080bf9b63173f44baf7bed826253f9b63173f44baf7bed826253f36c5613ff1b0ad3e23b63cbf000000004afc2c3f000080bfd826253f44baf7be9b63173fd826253f44baf7be9b63173fca3a5e3ff1b0ad3e4afc2cbf0000000023b63c3f000080bf9be3313fd74ef6be77d6083f9be3313fd74ef6be77d6083f27b75a3f0335ae3e01161cbf0000000068e94a3f000080bf986b3d3f568af3be568af33e986b3d3f568af3be568af33e4447573fd435af3e176f0abf000000007957573f000080bfd1a1473ffb8eefbedff0d43ed1a1473ffb8eefbedff0d43e71f6533fd4a5b03ef1f0f0be00000000e2e1613f000080bfca8f463fdc5f04bf0153b93eca8f463fdc5f04bf0153b93e30ca513fa86ea73e7184d8be000000009efb673f000080bf16e14e3fae4c01bfd0289b3e16e14e3fae4c01bfd0289b3e1d9e4e3fb2b5a93e73c6b3be0000000045b36f3f000080bf9ee3553f5fa2fbbe5fa27b3e9ee3553f5fa2fbbe5fa27b3ea0a74b3f4d44ac3e1a7890be00000000fa98753f000080bf83ad5b3f2016f4bee644433e83ad5b3f2016f4bee644433ecde8483f3903af3e04235ebe0000000065e7793f000080bf0e5c603f012becbe67b30d3e0e5c603f012becbe67b30d3e6b61463fd4ddb13ea7b41fbe0000000009de7c3f000080bf1c10643f1c10e4be4a73b63d1c10643f1c10e4be4a73b63d950f443fd3c2b43e9bc8cbbd00000000c2ba7e3f000080bf42eb663f3fecdbbe32f02f3d42eb663f3fecdbbe32f02f3d4ff0413f7ea4b73eadd342bd00000000d3b57f3f000080bfc70d693ffbddd3be00000000c70d693ffbddd3be000000000000403f7578ba3e00000080000000000000803f000080bf42eb663f3fecdbbe36f02fbd42eb663f3fecdbbe36f02fbdb00f3e3f7ea4b73eb1d3423d00000000d3b57f3f000080bf1c10643f1c10e4be4673b6bd1c10643f1c10e4be4673b6bd6bf03b3fd3c2b43e97c8cb3d00000000c2ba7e3f000080bf0e5c603f012becbe66b30dbe0e5c603f012becbe66b30dbe969e393fd4ddb13ea6b41f3e0000000009de7c3f000080bf83ad5b3f2016f4bee64443be83ad5b3f2016f4bee64443be3417373f3903af3e04235e3e0000000065e7793f000080bfe8da523f876f08bfac7346bee8da523f876f08bfac7346bea495363ff464a43e48896a3e00000000de31793f000080bf374a4c3f06730cbfc45c7fbe374a4c3f06730cbfc45c7fbecca8333f475ba13e80b7983e00000000cd58743f000080bfb378443f3f1410bf5b2d9dbeb378443f3f1410bf5b2d9dbe2d7f303fb6939e3eea26be3e00000000a6b06d3f000080bfb4563b3fd63113bfb356bbbeb4563b3fd63113bfb356bbbefc1b2d3f4a2a9c3e2df9e43e000000002ef9643f000080bf96e1303f31ab15bf2eb3d9be96e1303f31ab15bf2eb3d9be0886293f663b9a3e3f2b063f0000000048065a3f000080bfd926253f9b6317bf42baf7bed926253f9b6317bf42baf7be0bc8253fc4e0983e9899193f00000000cecc4c3f000080bf9845183f974518bfce6d0abf9845183f974518bfce6d0abf50f0213f152e983e48342c3f00000000b86c3d3f000080bfcf6d0a3f974518bf974518bfcf6d0a3f974518bf974518bfb10f1e3f152e983eb76c3d3f0000000049342c3f000080bf44baf73e9b6317bfd82625bf44baf73e9b6317bfd82625bff6371a3fc4e0983ecdcc4c3f000000009a99193f000080bf2fb3d93e31ab15bf96e130bf2fb3d93e31ab15bf96e130bff879163f663b9a3e47065a3f000000003f2b063f000080bfb456bb3ed63113bfb4563bbfb456bb3ed63113bfb4563bbf05e4123f4a2a9c3e2ef9643f000000002ef9e43e000080bf5d2d9d3e3f1410bfb37844bf5d2d9d3e3f1410bfb37844bfd4800f3fb6939e3ea6b06d3f00000000ec26be3e000080bfc55c7f3e06730cbf374a4cbfc55c7f3e06730cbf374a4cbf34570c3f475ba13ecd58743f0000000080b7983e000080bfabd2483e009e16bfabd248bfabd2483e009e16bfabd248bf38fb093f8d7c993e435b783f00000000435b783e000080bfc11e123ec11e12bfe7004fbfc11e123ec11e12bfe7004fbfe61d073ff3ff9c3ec61a7c3f00000000c8f4313e000080bf9f88bc3d77660dbfb31954bf9f88bc3d77660dbfb31954bf3282043fa4a1a03e2a6f7e3f00000000ec29e23d000080bfe416363d2b9108bf2e3b58bfe416363d2b9108bf2e3b58bf7624023fa44ba43e6ba57f3f00000000ef47573d000080bf00000000ffb503bfa9845bbf00000000ffb503bfa9845bbf0000003fe1eca73e0000803f0000000000000000000080bfe61636bd2b9108bf2e3b58bfe61636bd2b9108bf2e3b58bf13b7fb3ea44ba43e6ba57f3f00000000f14757bd000080bfa288bcbd77660dbfb31954bfa288bcbd77660dbfb31954bf9bfbf63ea4a1a03e2a6f7e3f00000000f029e2bd000080bfc01e12bec11e12bfe7004fbfc01e12bec11e12bfe7004fbf34c4f13ef3ff9c3ec61a7c3f00000000c7f431be000080bfaad248be009e16bfabd248bfaad248be009e16bfabd248bf8f09ec3e8d7c993e435b783f00000000415b78be000080bf8ff880bedfc31abfd77441bf8ff880bedfc31abfd77441bf0ac8e53e4b32963ee8dc723f000000009be8a1be000080bf226d9ebe226d1ebfa7d438bf226d9ebe226d1ebfa7d438bfa601df3e0440933e174d6b3f00000000cbafc9be000080bff15ebcbef27521bf71ea2ebff15ebcbef27521bf71ea2ebf02c0d73ea1c6903e8e66613f0000000038bdf2be000080bf4951dabef7bc23bff7bc23bf4951dabef7bc23bff7bc23bfd215d03e15e68e3e4001553f00000000d5000ebf000080bf44baf7bed82625bf9b6317bf44baf7bed82625bf9b6317bf2a1fc83e7bb98d3e1022463f00000000df1b22bf000080bfa4060abf92a125bfa4060abfa4060abf92a125bfa4060abf0000c03e1f538d3ef404353f00000000f40435bf000080bf9b6317bfd82625bf44baf7be9b6317bfd82625bf44baf7bed5e0b73e7bb98d3edf1b223f00000000102246bf000080bff7bc23bff7bc23bf4a51dabef7bc23bff7bc23bf4a51dabe2eeaaf3e15e68e3ed5000e3f00000000400155bf000080bf71ea2ebff27521bff05ebcbe71ea2ebff27521bff05ebcbefe3fa83ea1c6903e36bdf23e000000008e6661bf000080bfa7d438bf226d1ebf226d9ebea7d438bf226d1ebf226d9ebe59fea03e0440933ecbafc93e00000000174d6bbf000080bfd77441bfdfc31abf8ff880bed77441bfdfc31abf8ff880bef6379a3e4b32963e9be8a13e00000000e8dc72bf000080bfabd248bf009e16bfabd248beabd248bf009e16bfabd248be71f6933e8d7c993e435b783e00000000435b78bf000080bfe7004fbfc11e12bfc11e12bee7004fbfc11e12bfc11e12becb3b8e3ef3ff9c3ec8f4313e00000000c61a7cbf000080bfb31954bf77660dbf9f88bcbdb31954bf77660dbf9f88bcbd6504893ea4a1a03eec29e23d000000002a6f7ebf000080bf2e3b58bf2b9108bfe41636bd2e3b58bf2b9108bfe41636bdec48843ea44ba43eef47573d000000006ba57fbf000080bfa9845bbfffb503bf00000000a9845bbfffb503bf000000000000803ee1eca73e0000008000000000000080bf000080bf2e3b58bf2b9108bfe616363d2e3b58bf2b9108bfe616363d276e773ea44ba43ef14757bd000000006ba57fbf000080bfb31954bf77660dbfa288bc3db31954bf77660dbfa288bc3d35f76d3ea4a1a03ef029e2bd000000002a6f7ebf000080bfe7004fbfc11e12bfc01e123ee7004fbfc11e12bfc01e123e6988633ef3ff9c3ec7f431be00000000c61a7cbf000080bfabd248bf009e16bfaad2483eabd248bf009e16bfaad2483e1f13583e8d7c993e415b78be00000000435b78bf000080bfd77441bfdfc31abf8ff8803ed77441bfdfc31abf8ff8803e14904b3e4b32963e9be8a1be00000000e8dc72bf000080bfa7d438bf226d1ebf226d9e3ea7d438bf226d1ebf226d9e3e4d033e3e0440933ecbafc9be00000000174d6bbf000080bf71ea2ebff27521bff15ebc3e71ea2ebff27521bff15ebc3e04802f3ea1c6903e38bdf2be000000008e6661bf000080bff7bc23bff7bc23bf4951da3ef7bc23bff7bc23bf4951da3ea42b203e15e68e3ed5000ebf00000000400155bf000080bf9b6317bfd82625bf44baf73e9b6317bfd82625bf44baf73e533e103e7bb98d3edf1b22bf00000000102246bf000080bfa4060abf92a125bfa4060a3fa4060abf92a125bfa4060a3f0000003e1f538d3ef40435bf00000000f40435bf000080bf44baf7bed82625bf9b63173f44baf7bed82625bf9b63173f5883df3d7bb98d3e102246bf00000000df1b22bf000080bf4a51dabef7bc23bff7bc233f4a51dabef7bc23bff7bc233fb8a8bf3d15e68e3e400155bf00000000d5000ebf000080bff05ebcbef27521bf71ea2e3ff05ebcbef27521bf71ea2e3ff6ffa03da1c6903e8e6661bf0000000036bdf2be000080bf226d9ebe226d1ebfa7d4383f226d9ebe226d1ebfa7d4383f66f9833d0440933e174d6bbf00000000cbafc9be000080bf8ff880bedfc31abfd774413f8ff880bedfc31abfd774413faebf513d4b32963ee8dc72bf000000009be8a1be000080bfabd248be009e16bfabd2483fabd248be009e16bfabd2483f86b31f3d8d7c993e435b78bf00000000435b78be000080bfc11e12bec11e12bfe7004f3fc11e12bec11e12bfe7004f3fb5bce33cf3ff9c3ec61a7cbf00000000c8f431be000080bf9f88bcbd77660dbfb319543f9f88bcbd77660dbfb319543f4b46903ca4a1a03e2a6f7ebf00000000ec29e2bd000080bfe41636bd2b9108bf2e3b583fe41636bd2b9108bf2e3b583f851d093ca44ba43e6ba57fbf00000000ef4757bd000080bf00000000ffb503bfa9845b3f00000000ffb503bfa9845b3f00000080e1eca73e000080bf0000000000000000000080bfed4633bd8681f6bea818603fed4633bd8681f6bea818603f7045023c9b22ae3e3bae7fbf00000000638b4cbd000080bf000000005392edbedbc5623f000000005392edbedbc5623f00000080d15cb13e000080bf0000000000000000000080bf5fccb9bd0379ffbeb1a25c3f5fccb9bd0379ffbeb1a25c3fffbc883c44dcaa3ee8977ebf00000000f964d6bd000080bf162d10be532904bfa043583f162d10be532904bfa043583f0652d73c3597a73e50847cbf00000000365828be000080bfad7346be876f08bfe8da523fad7346be876f08bfe8da523fcfa5163df464a43ede3179bf0000000049896abe000080bfc55c7fbe06730cbf374a4c3fc55c7fbe06730cbf374a4c3f4373453d475ba13ecd5874bf0000000080b798be000080bf5d2d9dbe3f1410bfb378443f5d2d9dbe3f1410bfb378443f360d783db6939e3ea6b06dbf00000000ec26bebe000080bfb456bbbed63113bfb4563b3fb456bbbed63113bfb4563b3f2920973d4a2a9c3e2ef964bf000000002ef9e4be000080bf2fb3d9be31ab15bf96e1303f2fb3d9be31ab15bf96e1303fc3cfb33d663b9a3e47065abf000000003f2b06bf000080bf44baf7be9b6317bfd826253f44baf7be9b6317bfd826253faebfd13dc4e0983ecdcc4cbf000000009a9919bf000080bfcf6d0abf974518bf9745183fcf6d0abf974518bf9745183f867df03d152e983eb76c3dbf0000000049342cbf000080bf984518bf974518bfce6d0a3f984518bf974518bfce6d0a3f3ec1073e152e983e48342cbf00000000b86c3dbf000080bfd92625bf9b6317bf42baf73ed92625bf9b6317bf42baf73e2a20173ec4e0983e989919bf00000000cecc4cbf000080bf96e130bf31ab15bf2eb3d93e96e130bf31ab15bf2eb3d93e1e18263e663b9a3e3f2b06bf0000000048065abf000080bfb4563bbfd63113bfb356bb3eb4563bbfd63113bfb356bb3eec6f343e4a2a9c3e2df9e4be000000002ef964bf000080bfb37844bf3f1410bf5b2d9d3eb37844bf3f1410bf5b2d9d3eb3fc413eb6939e3eea26bebe00000000a6b06dbf000080bf374a4cbf06730cbfc45c7f3e374a4cbf06730cbfc45c7f3e2fa34e3e475ba13e80b798be00000000cd5874bf000080bfe8da52bf876f08bfac73463ee8da52bf876f08bfac73463e8c565a3ef464a43e48896abe00000000de3179bf000080bfa04358bf532904bf142d103ea04358bf532904bf142d103ebf15653e3597a73e345828be0000000050847cbf000080bfb1a25cbf0379ffbe5fccb93db1a25cbf0379ffbe5fccb93d60e86e3e44dcaa3ef964d6bd00000000e8977ebf000080bfa81860bf8681f6beec46333da81860bf8681f6beec46333da8db773e9b22ae3e628b4cbd000000003bae7fbf000080bfdbc562bf5392edbe00000000dbc562bf5392edbe000000000000803ed15cb13e0000008000000000000080bf000080bfa81860bf8681f6beed4633bda81860bf8681f6beed4633bd2b12843e9b22ae3e638b4c3d000000003bae7fbf000080bfb1a25cbf0379ffbe5fccb9bdb1a25cbf0379ffbe5fccb9bdd08b883e44dcaa3ef964d63d00000000e8977ebf000080bfa04358bf532904bf162d10bea04358bf532904bf162d10be20758d3e3597a73e3658283e0000000050847cbf000080bfe8da52bf876f08bfad7346bee8da52bf876f08bfad7346bebad4923ef464a43e49896a3e00000000de3179bf000080bf374a4cbf06730cbfc55c7fbe374a4cbf06730cbfc55c7fbe68ae983e475ba13e80b7983e00000000cd5874bf000080bfb37844bf3f1410bf5d2d9dbeb37844bf3f1410bf5d2d9dbea7019f3eb6939e3eec26be3e00000000a6b06dbf000080bfb4563bbfd63113bfb456bbbeb4563bbfd63113bfb456bbbe09c8a53e4a2a9c3e2ef9e43e000000002ef964bf000080bf96e130bf31ab15bf2fb3d9be96e130bf31ab15bf2fb3d9bef0f3ac3e663b9a3e3f2b063f0000000047065abf000080bfd82625bf9b6317bf44baf7bed82625bf9b6317bf44baf7beec6fb43ec4e0983e9a99193f00000000cdcc4cbf000080bf974518bf974518bfcf6d0abf974518bf974518bfcf6d0abf611fbc3e152e983e49342c3f00000000b76c3dbf000080bfce6d0abf974518bf984518bfce6d0abf974518bf984518bf9ee0c33e152e983eb86c3d3f0000000048342cbf000080bf42baf7be9b6317bfd92625bf42baf7be9b6317bfd92625bf1590cb3ec4e0983ececc4c3f00000000989919bf000080bf2eb3d9be31ab15bf96e130bf2eb3d9be31ab15bf96e130bf0f0cd33e663b9a3e48065a3f000000003f2b06bf000080bfb356bbbed63113bfb4563bbfb356bbbed63113bfb4563bbff637da3e4a2a9c3e2ef9643f000000002df9e4be000080bf5b2d9dbe3f1410bfb37844bf5b2d9dbe3f1410bfb37844bf59fee03eb6939e3ea6b06d3f00000000ea26bebe000080bfc45c7fbe06730cbf374a4cbfc45c7fbe06730cbf374a4cbf9751e73e475ba13ecd58743f0000000080b798be000080bfac7346be876f08bfe8da52bfac7346be876f08bfe8da52bf462bed3ef464a43ede31793f0000000048896abe000080bf142d10be532904bfa04358bf142d10be532904bfa04358bfdf8af23e3597a73e50847c3f00000000345828be000080bf5fccb9bd0379ffbeb1a25cbf5fccb9bd0379ffbeb1a25cbf3074f73e44dcaa3ee8977e3f00000000f964d6bd000080bfec4633bd8681f6bea81860bfec4633bd8681f6bea81860bfd4edfb3e9b22ae3e3bae7f3f00000000628b4cbd000080bf000000005392edbedbc562bf000000005392edbedbc562bf0000003fd15cb13e0000803f0000000000000000000080bfed46333d8681f6bea81860bfed46333d8681f6bea81860bf1609023f9b22ae3e3bae7f3f00000000638b4c3d000080bf5fccb93d0379ffbeb1a25cbf5fccb93d0379ffbeb1a25cbfe845043f44dcaa3ee8977e3f00000000f964d63d000080bf162d103e532904bfa04358bf162d103e532904bfa04358bf90ba063f3597a73e50847c3f000000003658283e000080bfad73463e876f08bfe8da52bfad73463e876f08bfe8da52bf5d6a093ff464a43ede31793f0000000049896a3e000080bf66b30dbe012becbe0e5c60bf66b30dbe012becbe0e5c60bf2a3df33ed4ddb13e09de7c3f00000000a6b41fbe000080bf4673b6bd1c10e4be1c1064bf4673b6bd1c10e4be1c1064bfd6e0f73ed3c2b43ec2ba7e3f0000000097c8cbbd000080bf36f02fbd3fecdbbe42eb66bf36f02fbd3fecdbbe42eb66bf611ffc3e7ea4b73ed3b57f3f00000000b1d342bd000080bf00000000fbddd3bec70d69bf00000000fbddd3bec70d69bf0000003f7578ba3e0000803f0000000000000000000080bf32f02f3d3fecdbbe42eb66bf32f02f3d3fecdbbe42eb66bf50f0013f7ea4b73ed3b57f3f00000000add3423d000080bf4a73b63d1c10e4be1c1064bf4a73b63d1c10e4be1c1064bf950f043fd3c2b43ec2ba7e3f000000009bc8cb3d000080bf67b30d3e012becbe0e5c60bf67b30d3e012becbe0e5c60bf6b61063fd4ddb13e09de7c3f00000000a7b41f3e000080bfe644433e2016f4be83ad5bbfe644433e2016f4be83ad5bbfcce8083f3903af3e65e7793f0000000004235e3e000080bf5fa27b3e5fa2fbbe9ee355bf5fa27b3e5fa2fbbe9ee355bfa0a70b3f4d44ac3efa98753f000000001a78903e000080bfd0289b3eae4c01bf16e14ebfd0289b3eae4c01bf16e14ebf1e9e0e3fb2b5a93e45b36f3f0000000073c6b33e000080bf0153b93edc5f04bfca8f46bf0153b93edc5f04bfca8f46bf30ca113fa86ea73e9efb673f000000007184d83e000080bfcfe0d73e82ec06bfb5e43cbfcfe0d73e82ec06bfb5e43cbfe426153f8187a53e2f455e3f00000000ed05fe3e000080bfd74ef63e77d608bf9be331bfd74ef63e77d608bf9be331bf10ac183f7617a43e307b523f00000000bfb7113f000080bfa4060a3fa4060abf92a125bfa4060a3fa4060abf92a125bf624e1c3ff031a33e27aa443f0000000020e3233f000080bf9745183fcf6d0abf974518bf9745183fcf6d0abf974518bf0000203fe8e3a23ef304353f00000000f304353f000080bf92a1253fa4060abfa4060abf92a1253fa4060abfa4060abf9eb1233ff031a33e20e3233f0000000027aa443f000080bf9ae3313f77d608bfd94ef6be9ae3313f77d608bfd94ef6bef053273f7617a43ec0b7113f000000002e7b523f000080bfb5e43c3f82ec06bfcfe0d7beb5e43c3f82ec06bfcfe0d7be1cd92a3f8187a53eed05fe3e000000002f455e3f000080bfca8f463fdc5f04bf0153b9beca8f463fdc5f04bf0153b9bed0352e3fa86ea73e7184d83e000000009efb673f000080bf16e14e3fae4c01bfcf289bbe16e14e3fae4c01bfcf289bbee361313fb2b5a93e72c6b33e0000000045b36f3f000080bf9ee3553f5fa2fbbe61a27bbe9ee3553f5fa2fbbe61a27bbe6058343f4d44ac3e1c78903e00000000fa98753f000080bfd826253f44baf7be9b6317bfd826253f44baf7be9b6317bf36c5213ff1b0ad3e4afc2c3f0000000023b63c3f000080bf9b63173f44baf7bed82625bf9b63173f44baf7bed82625bfcb3a1e3ff1b0ad3e23b63c3f000000004afc2c3f000080bf9be3313fd74ef6be77d608bf9be3313fd74ef6be77d608bfd948253f0335ae3e01161c3f0000000068e94a3f000080bf986b3d3f568af3be588af3be986b3d3f568af3be588af3bebcb8283fd435af3e186f0a3f000000007857573f000080bfd2a1473ffb8eefbedef0d4bed2a1473ffb8eefbedef0d4be90092c3fd4a5b03ef0f0f03e00000000e3e1613f000080bf1d7b503f808aeabeb86bb6be1d7b503f808aeabeb86bb6be68322f3f1d73b23e1f38cd3e000000004a896a3f000080bf74fc573ff3b0e4bef77598be74fc573ff3b0e4bef77598be0d2d323f9f89b43e6667aa3e00000000d167713f000080bfae375e3fae37debe89e876beae375e3fae37debe89e876beecf5343f30d5b63e9e08893e000000001ba9763f000080bfa147633f5551d7bebf643fbea147633f5551d7bebf643fbebc8b373f1143b93e6bf4523e000000003d827a3f000080bf4b4c673f102bd0be62c70abe4b4c673f102bd0be62c70abe06ef393ff4c2bb3e91e6173e00000000ef2a7d3f000080bf9d676a3f19ebc8be1398b2bd9d676a3f19ebc8be1398b2bd9e213c3f6547be3e422bc23d00000000cbd87e3f000080bf0abb6c3f4eb0c1beed2a2cbd0abb6c3f4eb0c1beed2a2cbd38263e3fd7c5c03e5ffd393d0000000067bc7f3f000080bfee656e3f8e92babe00000000ee656e3f8e92babe000000000000403f6336c33e00000080000000000000803f000080bf0abb6c3f4eb0c1bef02a2c3d0abb6c3f4eb0c1bef02a2c3dc8d9413fd7c5c03e62fd39bd0000000067bc7f3f000080bf9d676a3f19ebc8be1698b23d9d676a3f19ebc8be1698b23d62de433f6547be3e452bc2bd00000000cbd87e3f000080bf4b4c673f102bd0be60c70a3e4b4c673f102bd0be60c70a3efb10463ff4c2bb3e8fe617be00000000ef2a7d3f000080bfa147633f5551d7bebd643f3ea147633f5551d7bebd643f3e4474483f1143b93e69f452be000000003d827a3f000080bfae375e3fae37debe89e8763eae375e3fae37debe89e8763e140a4b3f30d5b63e9e0889be000000001ba9763f000080bf74fc573ff3b0e4bef775983e74fc573ff3b0e4bef775983ef3d24d3f9f89b43e6667aabe00000000d167713f000080bf1d7b503f808aeabeb86bb63e1d7b503f808aeabeb86bb63e99cd503f1d73b23e1f38cdbe000000004a896a3f000080bf6a96713f980fa8be980f283d6a96713f980fa8be980f283d36c5413f7e7ec93e3ceb31bd0000000026c27f3f000080bfbeb66f3f5c56aebe5c56ae3dbeb66f3f5c56aebe5c56ae3d9eb1433fcd5fc73ecf6ab9bd00000000dcf27e3f000080bf0d206d3fb4aab4be0780073e0d206d3fb4aab4be0780073e0ac8453fec39c53ec2d010be00000000546d7d3f000080bfe8b1693fbaf4babebaf43a3ee8b1693fbaf4babebaf43a3ee90a483fd314c33eacd248be0000000056077b3f000080bf894a653f5916c1beef5b713e894a653f5916c1beef5b713efc7b4a3fc4fac03ef24c82be000000003392773f000080bfc5c85f3f5aebc6be8330953ec5c85f3f5aebc6be8330953efb1b4d3f56f8be3e9be8a1be00000000e9dc723f000080bfdb0e593f374accbef0c0b23edb0e593f374accbef0c0b23e2eea4f3f3d1cbd3ea3f1c2be00000000b5b76c3f000080bfeb05513feb05d1beeb05d13eeb05513feb05d1beeb05d13e05e4523fac76bb3e2ef9e4be000000002ef9643f000080bfd1a1473fdff0d4befb8eef3ed1a1473fdff0d4befb8eef3ec804563f4a18ba3effb503bf00000000a9845b3f000080bfc210743fc48f94bee0c8a93dc210743fc48f94bee0c8a93db788433f7705d03ede6ab1bd00000000a0097f3f000080bf45ea713f2cf299be26f4033e45ea713f2cf299be26f4033e9b85453f343ace3e1e5b0abe000000000ca77d3f000080bf0bfe6e3f07549fbee416363e0bfe6e3f07549fbee416363e39ab473f876dcc3e529a3fbe000000008b7a7b3f000080bf5d2b6b3f5a9ea4be5d2b6b3e5d2b6b3f5a9ea4be5d2b6b3e38fb493f17a7ca3e425b78be00000000425b783f000080bf2c51663f13b5a9bea376913e2c51663f13b5a9bea376913e6f764c3f61f0c83ee52d9abe00000000ff1d743f000080bf5e50603f6577aebe6577ae3e5e50603f6577aebe6577ae3e8a1c4f3f9e54c73e8e92b9be00000000db976e3f000080bfdb0e593ff0c0b2be374acc3edb0e593ff0c0b2be374acc3ebaeb513f6ae0c53e1202dabe0000000033a2673f000080bf1d7b503fb96bb6be808aea3e1d7b503fb96bb6be808aea3e6be0543f10a1c43e8503fbbe00000000931f5f3f000080bfca8f463f0153b9bedc5f043fca8f463f0153b9bedc5f043f17f5573f8fa3c33ed5000ebf000000004001553f000080bfa7c2753f093980be0939003ea7c2753f093980be0939003ed948453f0cbfd63e7d7104be0000000086d97d3f000080bfee43733fb0b084be96eb303eee43733fb0b084be96eb303ef153473f9646d53ebf2d37be00000000e6de7b3f000080bf4ff16f3f2d1c89be4b84643e4ff16f3f2d1c89be4b84643e0886493f3ad1d33eee2d6dbe00000000d409793f000080bfc7aa6b3f77668dbe77668d3ec7aa6b3f77668dbe77668d3e01e04b3fef65d23e431f93be000000001b34753f000080bf2c51663fa37691be14b5a93e2c51663fa37691be14b5a93ed3614e3f060dd13e4c00b1be000000004137703f000080bfc5c85f3f833095be5aebc63ec5c85f3f833095be5aebc63e3d0a513ffdcfcf3e62f1cfbe000000008eef693f000080bf74fc573ff77598bef3b0e43e74fc573ff77598bef3b0e43e8bd6533f0ab9ce3efa8eefbe00000000ec3f623f000080bf16e14e3fd0289bbeae4c013f16e14e3fd0289bbeae4c013f67c2563f7cd2cd3e03ae07bf000000006a16593f000080bfb378443f5c2d9dbe3f14103fb378443f5c2d9dbe3f14103fd0c7593fd625cd3e9c6317bf000000008f704e3f000080bf069f763f057456be04902b3e069f763f057456be04902b3e0404473f3a9ddd3e0f742fbe00000000d6367c3f000080bf71b8733f67905dbe67905d3e71b8733f67905dbe67905d3ef21a493fb474dc3ea4f062be000000004ea2793f000080bf4ff16f3f4b8464be2d1c893e4ff16f3f4b8464be2d1c893ec5564b3f5352db3e3fa88cbe000000006f26763f000080bf5d2b6b3f5d2b6bbe5a9ea43e5d2b6b3f5d2b6bbe5a9ea43ea5b74d3f0c3cda3eb023a9be00000000b3a0713f000080bf894a653fef5b71be5916c13e894a653fef5b71be5916c13ebe3c503fbc38d93e69afc6be000000004cf06b3f000080bfae375e3f89e876beae37de3eae375e3f89e876beae37de3e05e4523fed4fd83e2ef9e4be000000002ef9643f000080bf9ee3553f5fa27bbe5fa2fb3e9ee3553f5fa27bbe5fa2fb3e15aa553f6789d73e12cc01bf00000000b9a75c3f000080bf374a4c3fc55c7fbe06730c3f374a4c3fc55c7fbe06730c3f168a583fa0ecd63e090811bf000000006af4523f000080bfd774413f8ff880bedfc31a3fd774413f8ff880bedfc31a3fce7d5b3f1080d63e03ec1fbf0000000004e7473f000080bf069f763f04902bbe0574563e069f763f04902bbe0574563ebcb8483fca90e43e288759be000000003b287a3f000080bfee43733f96eb30beb0b0843eee43733f96eb30beb0b0843e1cd94a3f44b3e33e53b786be00000000c3fa763f000080bf0bfe6e3fe41636be07549f3e0bfe6e3fe41636be07549f3efb1b4d3f58dde23e9be8a1be00000000e9dc723f000080bfe8b1693fbaf43abebaf4ba3ee8b1693fbaf43abebaf4ba3ed3804f3fc313e23eec26bebe00000000a6b06d3f000080bfa147633fbd643fbe5551d73ea147633fbd643fbe5551d73e2206523fcb5be13e222edbbe000000005d5b673f000080bf83ad5b3fe64443be2016f43e83ad5b3fe64443be2016f43e3ba9543fffbae03e31a6f8be00000000c5c85f3f000080bfe8da523fad7346be876f083fe8da523fad7346be876f083f3866573fdb36e03e84120bbf0000000012ee563f000080bfabd2483fabd248be009e163fabd2483fabd248be009e163ff6375a3f5cd4df3e999919bf00000000cdcc4c3f000080bfe2a43d3f7a494abeb35b243fe2a43d3f7a494abeb35b243f3c185d3f8497df3e87a927bf00000000d774413f000080bfa7c2753f093900be0939803ea7c2753f093900be0939803ea6654a3ffc89eb3e713d81be00000000c4b5773f000080bf45ea713f26f403be2cf2993e45ea713f26f403be2cf2993e1c8d4c3fbbf0ea3e823d9bbe00000000f1f2733f000080bf0d206d3f078007beb4aab43e0d206d3f078007beb4aab43e70d44e3ffd5eea3e0545b6be00000000973a6f3f000080bf4b4c673f60c70abe102bd03e4b4c673f60c70abe102bd03e873a513f30d8e93e521bd2be00000000b073693f000080bf0e5c603f67b30dbe012bec3e0e5c603f67b30dbe012bec3e4abd533f0160e93e5076eebe00000000008a623f000080bfa043583f152d10be5329043fa043583f152d10be5329043f9459563f27fae83ebf7d05bf00000000ae705a3f000080bfe7004f3fc11e12bec11e123fe7004f3fc11e12bec11e123f2b0b593f23aae83e83a113bf00000000cf24513f000080bf429d443ff27513bec6bf1f3f429d443ff27513bec6bf1f3fd2cc5b3ff372e83e856e21bf0000000068af463f000080bf662e393f1f2514bef9d52c3f662e393f1f2514bef9d52c3f7a985e3fc656e83e69ac2ebf0000000070263b3f000080bfc210743fe0c8a9bdc48f943ec210743fe0c8a9bdc48f943e90094c3f3379f23e221395be0000000094e8743f000080bfbeb66f3f5c56aebd5c56ae3ebeb66f3f5c56aebd5c56ae3ed0354e3f201cf23ef3f8aebe000000004e96703f000080bf9d676a3f1698b2bd19ebc83e9d676a3f1698b2bd19ebc83e2d7f503f16c5f13ecaafc9be00000000164d6b3f000080bf1c10643f4a73b6bd1c10e43e1c10643f4a73b6bd1c10e43e05e4523f3876f13e2ef9e4be000000002ef9643f000080bfb1a25c3f5fccb9bd0379ff3eb1a25c3f5fccb9bd0379ff3ed261553fbc31f13eea4300bf00000000948c5d3f000080bfb319543f9f88bcbd77660d3fb319543f9f88bcbd77660d3f17f5573fc7f9f03ed5000ebf000000004001553f000080bf2f794a3f2c90bebd24d51a3f2f794a3f2c90bebd24d51a3f70995a3f41d0f03eda811bbf00000000095b4b3f000080bf12d03f3f12d0bfbd10d6273f12d03f3f12d0bfbd10d6273fab495d3fb0b6f03ec29328bf00000000dea8403f000080bf5a38343f1c3cc0bd5a38343f5a38343f1c3cc0bd5a38343f0000603f0daef03ef40435bf00000000f404353f000080bf6a96713f980f28bd980fa83e6a96713f980f28bd980fa83e6fa34d3faa4ff93edb33a8be000000008bca713f000080bf0abb6c3ff02a2cbd4eb0c13e0abb6c3ff02a2cbd4eb0c13e50d24f3fcc25f93e2adcc1be00000000a5f06c3f000080bf42eb663f32f02fbd3fecdb3e42eb663f32f02fbd3fecdb3e761b523f5bfff83e4120dcbe00000000de21673f000080bfa818603fed4633bd8681f63ea818603fed4633bd8681f63ed87c543f51ddf83e0fbef6be00000000b04f603f000080bf2e3b583fe41636bd2b91083f2e3b583fe41636bd2b91083f9af3563fa4c0f83ec4b308bf00000000f671583f000080bfe0524f3faa4938bddabb153fe0524f3faa4938bddabb153f0c7c593f3aaaf83eb5e215bf00000000ad884f3f000080bf2569453f5fcc39bdd392223f2569453f5fcc39bdd392223fbe115c3fd39af83eb6bd22bf00000000389d453f000080bf54913a3f54913abd3fe82e3f54913a3f54913abd3fe82e3fa7af5e3ffb92f83ec4162fbf00000000f3c23a3f000080bf3fe82e3f54913abd54913a3f3fe82e3f54913abd54913a3f5950613ffb92f83ef3c23abf00000000c4162f3f000080bfee656e3f000000008e92ba3eee656e3f000000008e92ba3e67324f3f0000003f8e92babe00000000ee656e3f000080bfc70d693f00000000fbddd33ec70d693f00000000fbddd33ee361513f0000003ffbddd3be00000000c70d693f000080bfdbc5623f000000005392ed3edbc5623f000000005392ed3ecca8533f0000003f5392edbe00000000dbc5623f000080bfa9845b3f00000000ffb5033fa9845b3f00000000ffb5033fc804563f0000003fffb503bf00000000a9845b3f000080bf5647533f00000000208f103f5647533f00000000208f103fc072583f0000003f208f10bf000000005647533f000080bffd124a3f00000000362b1d3ffd124a3f00000000362b1d3feeee5a3f0000003f362b1dbf00000000fd124a3f000080bf60f53f3f000000000960293f60f53f3f000000000960293ff3745d3f0000003f096029bf0000000060f53f3f000080bff304353f00000000f304353ff304353f00000000f304353f0000603f0000003ff40435bf00000000f404353f000080bf0960293f0000000060f53f3f0960293f0000000060f53f3f0e8b623f0000003f60f53fbf000000000960293f000080bf0abb6c3ff02a2c3d4eb0c13e0abb6c3ff02a2c3d4eb0c13e50d24f3f1a6d033f2adcc1be00000000a5f06c3f000080bf42eb663f32f02f3d3fecdb3e42eb663f32f02f3d3fecdb3e761b523f5280033f4120dcbe00000000de21673f000080bfa818603fed46333d8681f63ea818603fed46333d8681f63ed87c543f5891033f0fbef6be00000000b04f603f000080bf2e3b583fe416363d2b91083f2e3b583fe416363d2b91083f9af3563fae9f033fc4b308bf00000000f671583f000080bfe0524f3faa49383ddabb153fe0524f3faa49383ddabb153f0c7c593fe3aa033fb5e215bf00000000ad884f3f000080bf2569453f5fcc393dd392223f2569453f5fcc393dd392223fbe115c3f97b2033fb6bd22bf00000000389d453f000080bf54913a3f54913a3d3fe82e3f54913a3f54913a3d3fe82e3fa7af5e3f83b6033fc4162fbf00000000f3c23a3f000080bf3fe82e3f54913a3d54913a3f3fe82e3f54913a3d54913a3f5950613f83b6033ff3c23abf00000000c4162f3f000080bfd392223f5fcc393d2569453fd392223f5fcc393d2569453f42ee633f97b2033f389d45bf00000000b6bd223f000080bf362b1d3f00000000fd124a3f362b1d3f00000000fd124a3f1211653f0000003ffd124abf00000000362b1d3f000080bfd392223f5fcc39bd2569453fd392223f5fcc39bd2569453f42ee633fd39af83e389d45bf00000000b6bd223f000080bf0fd6273f12d0bfbd12d03f3f0fd6273f12d0bfbd12d03f3f55b6623fb0b6f03edea840bf00000000c293283f000080bffad52c3f1f2514be662e393ffad52c3f1f2514be662e393f8667613fc656e83e6f263bbf0000000069ac2e3f000080bf386f313f40c84abe386f313f386f313f40c84abe386f313f0000603fef82df3ef30435bf00000000f304353f000080bf9f7b353f72a181be1485283f9f7b353f72a181be1485283fde7d5e3f8148d63e0b322ebf000000005a983b3f000080bfa7d4383f226d9ebe226d1e3fa7d4383f226d9ebe226d1e3f3edf5c3fd7bacc3e449a26bf00000000a45e423f000080bfb4563b3fb456bbbed631133fb4563b3fb456bbbed631133f50225b3f52f3c23e8d291ebf00000000294c493f000080bfb5e43c3fcfe0d7be82ec063fb5e43c3fcfe0d7be82ec063f7045593fb710b93e07cc14bf00000000d650503f000080bf96e1303f2fb3d9be31ab153f96e1303f2fb3d9be31ab153fce9c5c3fda6cb83e795c25bf00000000486d433f000080bff7bc233f4a51dabef7bc233ff7bc233f4a51dabef7bc233f0000603f3b35b83ef30435bf00000000f304353f000080bf31ab153f2fb3d9be96e1303f31ab153f2fb3d9be96e1303f3263633fda6cb83e486d43bf00000000795c253f000080bf82ec063fcfe0d7beb5e43c3f82ec063fcfe0d7beb5e43c3f90ba663fb710b93ed65050bf0000000007cc143f000080bffb8eef3edff0d4bed1a1473ffb8eef3edff0d4bed1a1473f38fb693f4a18ba3ea9845bbf00000000ffb5033f000080bfea05d13eeb05d1beeb05513fea05d13eeb05d1beeb05513ffb1b6d3fac76bb3e2ef964bf000000002df9e43e000080bff1c0b23e374accbedb0e593ff1c0b23e374accbedb0e593fd215703f3d1cbd3eb5b76cbf00000000a4f1c23e000080bf71ea2e3ff05ebcbef275213f71ea2e3ff05ebcbef275213f025f5e3fe898c23ec4a32dbf00000000151c3c3f000080bff275213ff05ebcbe71ea2e3ff275213ff05ebcbe71ea2e3ffea0613fe898c23e151c3cbf00000000c4a32d3f000080bfd631133fb456bbbeb4563b3fd631133fb456bbbeb4563b3fb0dd643f52f3c23e294c49bf000000008d291e3f000080bfdb5f043f0153b9becb8f463fdb5f043f0153b9becb8f463fe90a683f8fa3c33e400155bf00000000d3000e3f000080bf808aea3eb96bb6be1d7b503f808aea3eb96bb6be1d7b503f961f6b3f10a1c43e931f5fbf000000008503fb3e000080bf374acc3ef0c0b2bedb0e593f374acc3ef0c0b2bedb0e593f46146e3f6ae0c53e33a267bf000000001202da3e000080bf6477ae3e6577aebe5e50603f6477ae3e6577aebe5e50603f77e3703f9e54c73edb976ebf000000008d92b93e000080bfa376913e13b5a9be2c51663fa376913e13b5a9be2c51663f9189733f61f0c83eff1d74bf00000000e52d9a3e000080bf5b2b6b3e5a9ea4be5d2b6b3f5b2b6b3e5a9ea4be5d2b6b3fc804763f17a7ca3e425b78bf00000000405b783e000080bfbbf43a3ebaf4babee8b1693fbbf43a3ebaf4babee8b1693f17f5773fd314c33e55077bbf00000000acd2483e000080bf0780073eb4aab4be0d206d3f0780073eb4aab4be0d206d3ff6377a3fec39c53e546d7dbf00000000c2d0103e000080bf5956ae3d5c56aebebeb66f3f5956ae3d5c56aebebeb66f3f624e7c3fcd5fc73edcf27ebf00000000cc6ab93d000080bf9d0f283d980fa8be6a96713f9d0f283d980fa8be6a96713fca3a7e3f7e7ec93e26c27fbf0000000041eb313d000080bf000000009be8a1bee8dc723f000000009be8a1bee8dc723f0000803f1590cb3e000080bf0000000000000000000080bfe516363e07549fbe0bfe6e3fe516363e07549fbe0bfe6e3fc754783f876dcc3e8a7a7bbf00000000529a3f3e000080bf26f4033e2cf299be45ea713f26f4033e2cf299be45ea713f657a7a3f343ace3e0ca77dbf000000001e5b0a3e000080bfddc8a93dc48f94bec210743fddc8a93dc48f94bec210743f49777c3f7705d03ea0097fbf00000000db6ab13d000080bf8bb5233dd53e8fbe4990753f8bb5233dd53e8fbe4990753fa74d7e3f67c9d13e2fc77fbf00000000cf842a3d000080bf00000000ef0c8abed084763f00000000ef0c8abed084763f0000803faa81d33e000080bf0000000000000000000080bf4d84643e2d1c89be4ff16f3f4d84643e2d1c89be4ff16f3ff879763f3ad1d33ed40979bf00000000f02d6d3e000080bf95eb303eb0b084beee43733f95eb303eb0b084beee43733f0fac783f9646d53ee6de7bbf00000000be2d373e000080bf0b39003e093980bea7c2753f0b39003e093980bea7c2753f27b77a3f0cbfd63e86d97dbf000000008071043e000080bf5408a53d7f8c77be7f8c773f5408a53d7f8c77be7f8c773fce9c7c3f0935d83e9f1d7fbf00000000bf13aa3d000080bf18321f3d18cb6ebe39be783f18321f3d18cb6ebe39be783f025f7e3f46a4d93ea2cb7fbf000000008fb5233d000080bf00000000924166beb371793f00000000924166beb371793f0000803f9c09db3e000080bf0000000000000000000080bf67905d3e67905dbe71b8733f67905d3e67905dbe71b8733f0ee5763fb474dc3e4ea279bf00000000a4f0623e000080bf2c1c893e4b8464be4ff16f3f2c1c893e4b8464be4ff16f3f3ba9743f5352db3e6f2676bf000000003ea88c3e000080bf77668d3e77668dbec7aa6b3f77668d3e77668dbec7aa6b3fff1f743fef65d23e1b3475bf00000000431f933e000080bf14b5a93ea37691be2c51663f14b5a93ea37691be2c51663f2d9e713f060dd13e413770bf000000004c00b13e000080bf59ebc63e833095bec5c85f3f59ebc63e833095bec5c85f3fc3f56e3ffdcfcf3e8eef69bf0000000061f1cf3e000080bff3b0e43ef77598be74fc573ff3b0e43ef77598be74fc573f75296c3f0ab9ce3eec3f62bf00000000fa8eef3e000080bfae4c013fd1289bbe17e14e3fae4c013fd1289bbe17e14e3f993d693f7cd2cd3e6b1659bf0000000003ae073f000080bf3f14103f5c2d9dbeb378443f3f14103f5c2d9dbeb378443f3138663fd625cd3e8f704ebf000000009c63173f000080bf216d1e3f226d9ebea8d4383f216d1e3f226d9ebea8d4383fc320633fd7bacc3ea55e42bf00000000439a263f000080bf38162c3f6fd99ebe38162c3f38162c3f6fd99ebe38162c3f0000603f9596cc3ef30435bf00000000f304353f000080bf1485283f72a181be9f7b353f1485283f72a181be9f7b353f2282613f8148d63e5a983bbf000000000b322e3f000080bfdec31a3f8ff880bed774413fdec31a3f8ff880bed774413f3282643f1080d63e05e747bf0000000003ec1f3f000080bf06730c3fc55c7fbe374a4c3f06730c3fc55c7fbe374a4c3fea75673fa0ecd63e6af452bf000000000908113f000080bf5fa2fb3e5fa27bbe9ee3553f5fa2fb3e5fa27bbe9ee3553feb556a3f6789d73eb9a75cbf0000000012cc013f000080bfad37de3e89e876beae375e3fad37de3e89e876beae375e3ffb1b6d3fed4fd83e2ef964bf000000002df9e43e000080bf5916c13eef5b71be894a653f5916c13eef5b71be894a653f42c36f3fbc38d93e4cf06bbf0000000069afc63e000080bf5b9ea43e5d2b6bbe5d2b6b3f5b9ea43e5d2b6bbe5d2b6b3f5b48723f0c3cda3eb3a071bf00000000b123a93e000080bfb35b243f7a494abee2a43d3fb35b243f7a494abee2a43d3fc4e7623f8497df3ed77441bf0000000087a9273f000080bfff9d163fabd248beabd2483fff9d163fabd248beabd2483f0ac8653f5cd4df3ecdcc4cbf000000009999193f000080bf876f083fad7346bee8da523f876f083fad7346bee8da523fc999683fdb36e03e12ee56bf0000000084120b3f000080bf2016f43ee64443be83ad5b3f2016f43ee64443be83ad5b3fc5566b3fffbae03ec5c85fbf0000000031a6f83e000080bf5551d73ebc643fbe9f47633f5551d73ebc643fbe9f47633fdef96d3fcc5be13e5c5b67bf00000000232edb3e000080bfb9f4ba3ebaf43abee8b1693fb9f4ba3ebaf43abee8b1693f2d7f703fc313e23ea6b06dbf00000000eb26be3e000080bf07549f3ee41636be0bfe6e3f07549f3ee41636be0bfe6e3f05e4723f58dde23ee9dc72bf000000009be8a13e000080bfb1b0843e96eb30beee43733fb1b0843e96eb30beee43733fe426753f44b3e33ec3fa76bf0000000054b7863e000080bf0374563e04902bbe069f763f0374563e04902bbe069f763f4447773fca90e43e3b287abf000000002687593e000080bf02902b3e057456be069f763f02902b3e057456be069f763ffcfb783f3a9ddd3ed6367cbf000000000d742f3e000080bf66c3f83d814d4fbe67c3783f66c3f83d814d4fbe67c3783feeee7a3ff1c6de3eec057ebf00000000eb05fe3d000080bf942aa03d353548be83427a3f942aa03d353548be83427a3f58bf7c3feaeddf3e492f7fbf000000007951a33d000080bfed971a3df03d41beeb367b3fed971a3df03d41beeb367b3f086f7e3f1e0fe13e94cf7fbf00000000066c1d3d000080bf000000009b753abe5eb87b3f000000009b753abe5eb87b3f0000803f5728e23e000080bf0000000000000000000080bf5f1d263e5f1d26be0f2c793f5f1d263e5f1d26be0f2c793f7045793fd671e53e50847cbf000000003558283e000080bfcefcf03d89a820be55077b3fcefcf03d89a820be55077b3f50227b3f0953e63e2d2d7ebf000000006a02f43d000080bf30429b3d2c421bbe874b7c3f30429b3d2c421bbe874b7c3f3ddf7c3fb631e73ef73e7fbf0000000012139d3d000080bf14f7153d19f715befa107d3f14f7153d19f715befa107d3fde7d7e3fd00be83e19d37fbf000000008599173d000080bf00000000c3d010be546d7d3f00000000c3d010be546d7d3f0000803fd7dfe83e000080bf0000000000000000000080bf7e4d4f3e67c3f8bd67c3783f7e4d4f3e67c3f8bd67c3783fa6a1773fb127ec3e769e7abf0000000060d9503e000080bf8aa8203ecdfcf0bd55077b3f8aa8203ecdfcf0bd55077b3f2a89793f3ec7ec3ee8c87cbf0000000044c8213e000080bf1a39e93d1a39e9bd87a87c3f1a39e93d1a39e9bd87a87c3fcb517b3f7d66ed3e0c507ebf000000000bc0ea3d000080bf6c5e963da78de1bd5cbf7d3f6c5e963da78de1bd5cbf7d3fcafc7c3fba03ee3ef04c7fbf00000000064a973d000080bf975c113ddb0adabdff617e3f975c113ddb0adabdff617e3fa58b7e3fa49dee3e3ed67fbf000000004d31123d000080bf00000000cabcd2bd1fa47e3f00000000cabcd2bd1fa47e3f0000803f4833ef3e000080bf0000000000000000000080bf3735483e912aa0bd83427a3f3735483e912aa0bd83427a3f17f5773fc93df33e56077bbf00000000add2483e000080bf7e8c773e5508a5bd7f8c773f7e8c773e5508a5bd7f8c773fc804763f56daf23e425b78bf00000000415b783e000080bf0939803e093900bea7c2753f0939803e093900bea7c2753f5a9a753ffc89eb3ec4b577bf00000000713d813e000080bf2df2993e26f403be45ea713f2df2993e26f403be45ea713fe572733fbbf0ea3ef1f273bf00000000833d9b3e000080bfb6aab43e078007be0d206d3fb6aab43e078007be0d206d3f902b713ffd5eea3e963a6fbf000000000645b63e000080bf102bd03e60c70abe4b4c673f102bd03e60c70abe4b4c673f79c56e3f30d8e93eb07369bf00000000521bd23e000080bf012bec3e67b30dbe0e5c603f012bec3e67b30dbe0e5c603fb6426c3f0160e93e008a62bf000000005076ee3e000080bf5429043f152d10bea043583f5429043f152d10bea043583f6ca6693f27fae83eae705abf00000000c07d053f000080bfc11e123fc11e12bee7004f3fc11e123fc11e12bee7004f3fd5f4663f23aae83ecf2451bf0000000083a1133f000080bfc6bf1f3ff27513be429d443fc6bf1f3ff27513be429d443f2e33643ff372e83e68af46bf00000000856e213f000080bf24d51a3f2c90bebd2f794a3f24d51a3f2c90bebd2f794a3f9066653f41d0f03e095b4bbf00000000da811b3f000080bf77660d3f9f88bcbdb319543f77660d3f9f88bcbdb319543fe90a683fc7f9f03e400155bf00000000d5000e3f000080bf0379ff3e5fccb9bdb1a25c3f0379ff3e5fccb9bdb1a25c3f2e9e6a3fbc31f13e948c5dbf00000000ea43003f000080bf1b10e43e4a73b6bd1c10643f1b10e43e4a73b6bd1c10643ffb1b6d3f3876f13e2ef964bf000000002df9e43e000080bf19ebc83e1698b2bd9d676a3f19ebc83e1698b2bd9d676a3fd3806f3f16c5f13e164d6bbf00000000caafc93e000080bf5b56ae3e5c56aebdbeb66f3f5b56ae3e5c56aebdbeb66f3f30ca713f201cf23e4e9670bf00000000f2f8ae3e000080bfc58f943ee0c8a9bdc210743fc58f943ee0c8a9bdc210743f71f6733f3379f23e94e874bf000000002313953e000080bfdabb153fa94938bdde524f3fdabb153fa94938bdde524f3ff483663f3aaaf83eac884fbf00000000b6e2153f000080bf2b91083fe41636bd2e3b583f2b91083fe41636bd2e3b583f660c693fa4c0f83ef67158bf00000000c4b3083f000080bf8781f63eed4633bda818603f8781f63eed4633bda818603f28836b3f51ddf83eaf4f60bf000000000fbef63e000080bf3fecdb3e32f02fbd42eb663f3fecdb3e32f02fbd42eb663f8ae46d3f5bfff83ede2167bf000000004120dc3e000080bf4fb0c13ef02a2cbd0abb6c3f4fb0c13ef02a2cbd0abb6c3fb02d703fcc25f93ea5f06cbf000000002bdcc13e000080bf980fa83e980f28bd6a96713f980fa83e980f28bd6a96713f915c723faa4ff93e8bca71bf00000000db33a83e000080bfd73e8f3e86b523bd4990753fd73e8f3e86b523bd4990753feb6f743f077cf93e8fc275bf000000002a5c8f3e000080bf18cb6e3e10321fbd39be783f18cb6e3e10321fbd39be783f2d67763f0aaaf93e60ee78bf0000000052f96e3e000080bff23d413ef3971abdeb367b3ff23d413ef3971abdeb367b3f5a42783ff3d8f93ec6647bbf000000003861413e000080bf2b421b3e2c429bbd874b7c3f2b421b3e2c429bbd874b7c3fcfc7793f10a2f33eee057dbf00000000e0b41b3e000080bfab8de13d6f5e96bd5cbf7d3fab8de13d6f5e96bd5cbf7d3fce7d7b3ff405f43e2a6f7ebf00000000f029e23d000080bf868b913d878b91bd2cb47e3f868b913d878b91bd2cb47e3f3c187d3f7b68f43e74597fbf00000000f8e9913d000080bfd1d20c3dc9d28cbd0d3e7f3fd1d20c3dc9d28cbd0d3e7f3f79987e3fe7c8f43e12d97fbf0000000058280d3d000080bf000000001e3b88bdd96e7f3f000000001e3b88bdd96e7f3f0000803fad26f53e000080bf0000000000000000000080bf19f7153e19f715bdfa107d3f19f7153e19f715bdfa107d3feb017a3f2008fa3e713c7dbf00000000db10163e000080bfe00ada3d925c11bdff617e3fe00ada3d925c11bdff617e3fb5a67b3f0c37fa3e0b8b7ebf000000000f2eda3d000080bfc9d28c3dc9d20cbd0d3e7f3fc9d28c3dc9d20cbd0d3e7f3fcd317d3f4d65fa3eb3647fbf000000001ce88c3d000080bfcb61083dc36108bd4db77f3fcb61083dc36108bd4db77f3f73a47e3f9292fa3e9fdb7fbf000000002a75083d000080bf00000000720f04bdeedd7f3f00000000720f04bdeedd7f3f0000803f9dbefa3e000080bf0000000000000000000080bf9b753a3e000000005eb87b3f9b753a3e000000005eb87b3f168a783f0000003f5fb87bbf000000009c753a3e000080bfc3d0103e00000000546d7d3fc3d0103e00000000546d7d3ff6377a3f0000003f556d7dbf00000000c4d0103e000080bfcabcd23d000000001fa47e3fcabcd23d000000001fa47e3fd2cc7b3f0000003f1fa47ebf00000000cabcd23d000080bf1e3b883d00000000d96e7f3f1e3b883d00000000d96e7f3fab497d3f0000003fd96e7fbf000000001e3b883d000080bf720f043d00000000eedd7f3f720f043d00000000eedd7f3fa7af7e3f0000003feedd7fbf00000000720f043d000080bf00000000000000000000803f00000000000000000000803f0000803f0000003f000080bf0000000000000000000080bf19f7153e19f7153dfa107d3f19f7153e19f7153dfa107d3feb017a3ff0fb023f713c7dbf00000000db10163e000080bff23d413ef3971a3deb367b3ff23d413ef3971a3deb367b3f5a42783f8713033fc6647bbf000000003861413e000080bf9241663e00000000b371793f9241663e00000000b371793f67c2763f0000003fb47179bf000000009341663e000080bfef0c8a3e00000000d084763fef0c8a3e00000000d084763f6ae0743f0000003fd08476bf00000000ef0c8a3e000080bf9be8a13e00000000e8dc723f9be8a13e00000000e8dc723f05e4723f0000003fe9dc72bf000000009ce8a13e000080bf8e92ba3e00000000ee656e3f8e92ba3e00000000ee656e3f99cd703f0000003fee656ebf000000008e92ba3e000080bffbddd33e00000000c70d693ffbddd33e00000000c70d693f1d9e6e3f0000003fc70d69bf00000000fbddd33e000080bf5392ed3e00000000dbc5623f5392ed3e00000000dbc5623f34576c3f0000003fdbc562bf000000005392ed3e000080bfffb5033f00000000a9845b3fffb5033f00000000a9845b3f38fb693f0000003fa9845bbf00000000ffb5033f000080bf208f103f000000005647533f208f103f000000005647533f408d673f0000003f564753bf00000000208f103f000080bfdabb153fa949383dde524f3fdabb153fa949383dde524f3ff483663fe3aa033fac884fbf00000000b6e2153f000080bf2b91083fe416363d2e3b583f2b91083fe416363d2e3b583f660c693fae9f033ff67158bf00000000c4b3083f000080bf8781f63eed46333da818603f8781f63eed46333da818603f28836b3f5891033faf4f60bf000000000fbef63e000080bf3fecdb3e32f02f3d42eb663f3fecdb3e32f02f3d42eb663f8ae46d3f5280033fde2167bf000000004120dc3e000080bf4fb0c13ef02a2c3d0abb6c3f4fb0c13ef02a2c3d0abb6c3fb02d703f1a6d033fa5f06cbf000000002bdcc13e000080bf980fa83e980f283d6a96713f980fa83e980f283d6a96713f915c723f2b58033f8bca71bf00000000db33a83e000080bfd73e8f3e86b5233d4990753fd73e8f3e86b5233d4990753feb6f743ffc41033f8fc275bf000000002a5c8f3e000080bf18cb6e3e10321f3d39be783f18cb6e3e10321f3d39be783f2d67763ffb2a033f60ee78bf0000000052f96e3e000080bf24d51a3f2c90be3d2f794a3f24d51a3f2c90be3d2f794a3f9066653fdf97073f095b4bbf00000000da811b3f000080bf0fd6273f12d0bf3d12d03f3f0fd6273f12d0bf3d12d03f3f55b6623fa8a4073fdea840bf00000000c293283f000080bf5a38343f1c3cc03d5a38343f5a38343f1c3cc03d5a38343f0000603ff9a8073ff40435bf00000000f404353f000080bf12d03f3f12d0bf3d10d6273f12d03f3f12d0bf3d10d6273fab495d3fa8a4073fc29328bf00000000dea8403f000080bf2f794a3f2c90be3d24d51a3f2f794a3f2c90be3d24d51a3f70995a3fdf97073fda811bbf00000000095b4b3f000080bfb319543f9f88bc3d77660d3fb319543f9f88bc3d77660d3f17f5573f1c83073fd5000ebf000000004001553f000080bfb1a25c3f5fccb93d0379ff3eb1a25c3f5fccb93d0379ff3ed261553f2267073fea4300bf00000000948c5d3f000080bf1c10643f4a73b63d1c10e43e1c10643f4a73b63d1c10e43e05e4523fe444073f2ef9e4be000000002ef9643f000080bf9d676a3f1698b23d19ebc83e9d676a3f1698b23d19ebc83e2d7f503f751d073fcaafc9be00000000164d6b3f000080bfbeb66f3f5c56ae3d5c56ae3ebeb66f3f5c56ae3d5c56ae3ed0354e3ff0f1063ff3f8aebe000000004e96703f000080bf6a96713f980f283d980fa83e6a96713f980f283d980fa83e6fa34d3f2b58033fdb33a8be000000008bca713f000080bfe8dc723f000000009be8a13ee8dc723f000000009be8a13efb1b4d3f0000003f9ce8a1be00000000e9dc723f000080bf4990753f86b523bdd53e8f3e4990753f86b523bdd53e8f3e14904b3f077cf93e295c8fbe0000000090c2753f000080bf7f8c773f5508a5bd7f8c773e7f8c773f5508a5bd7f8c773e38fb493f56daf23e425b78be00000000425b783f000080bf67c3783f67c3f8bd814d4f3e67c3783f67c3f8bd814d4f3e5a5e483fb127ec3e63d950be00000000769e7a3f000080bf0f2c793f5f1d26be5f1d263e0f2c793f5f1d26be5f1d263e90ba463fd671e53e355828be0000000050847c3f000080bf67c3783f814d4fbe67c3f83d67c3783f814d4fbe67c3f83d1211453ff1c6de3eec05febd00000000ec057e3f000080bf7f8c773f7f8c77be5508a53d7f8c773f7f8c77be5508a53d3263433f0935d83ec013aabd000000009f1d7f3f000080bf4990753fd53e8fbe86b5233d4990753fd53e8fbe86b5233d59b2413f67c9d13eca842abd000000002fc77f3f000080bfe8dc723f9be8a1be00000000e8dc723f9be8a1be000000000000403f1590cb3e00000080000000000000803f000080bf6a96713f980fa8be9d0f28bd6a96713f980fa8be9d0f28bdca3a3e3f7e7ec93e41eb313d0000000026c27f3f000080bfbeb66f3f5c56aebe5956aebdbeb66f3f5c56aebe5956aebd624e3c3fcd5fc73ecc6ab93d00000000dcf27e3f000080bf0d206d3fb4aab4be078007be0d206d3fb4aab4be078007bef6373a3fec39c53ec2d0103e00000000546d7d3f000080bfe8b1693fbaf4babebbf43abee8b1693fbaf4babebbf43abe17f5373fd314c33eacd2483e0000000055077b3f000080bf894a653f5916c1beed5b71be894a653f5916c1beed5b71be0484353fc4fac03ef14c823e000000003392773f000080bfc5c85f3f5aebc6be833095bec5c85f3f5aebc6be833095be05e4323f56f8be3e9be8a13e00000000e9dc723f000080bfdb0e593f374accbef1c0b2bedb0e593f374accbef1c0b2bed215303f3d1cbd3ea4f1c23e00000000b5b76c3f000080bfeb05513feb05d1beea05d1beeb05513feb05d1beea05d1befc1b2d3fac76bb3e2df9e43e000000002ef9643f000080bfd1a1473fdff0d4befb8eefbed1a1473fdff0d4befb8eefbe38fb293f4a18ba3effb5033f00000000a9845b3f000080bfb5e43c3fcfe0d7be82ec06bfb5e43c3fcfe0d7be82ec06bf90ba263fb710b93e07cc143f00000000d650503f000080bf96e1303f2fb3d9be31ab15bf96e1303f2fb3d9be31ab15bf3263233fda6cb83e795c253f00000000486d433f000080bff7bc233f4a51dabef7bc23bff7bc233f4a51dabef7bc23bf0000203f3b35b83ef304353f00000000f304353f000080bf31ab153f2fb3d9be96e130bf31ab153f2fb3d9be96e130bfcf9c1c3fda6cb83e486d433f00000000795c253f000080bf77d6083fd74ef6be9be331bf77d6083fd74ef6be9be331bf28b71a3f0335ae3e68e94a3f0000000001161c3f000080bf568af33e568af3be986b3dbf568af33e568af3be986b3dbf4447173fd435af3e7957573f00000000176f0a3f000080bfdff0d43efb8eefbed1a147bfdff0d43efb8eefbed1a147bf70f6133fd4a5b03ee2e1613f00000000f1f0f03e000080bfb86bb63e808aeabe1d7b50bfb86bb63e808aeabe1d7b50bf99cd103f1d73b23e4a896a3f000000001f38cd3e000080bff775983ef3b0e4be74fc57bff775983ef3b0e4be74fc57bff4d20d3f9f89b43ed167713f000000006667aa3e000080bf89e8763eae37debeae375ebf89e8763eae37debeae375ebf140a0b3f30d5b63e1ba9763f000000009e08893e000080bfbd643f3e5551d7bea14763bfbd643f3e5551d7bea14763bf4474083f1143b93e3d827a3f0000000069f4523e000080bf60c70a3e102bd0be4b4c67bf60c70a3e102bd0be4b4c67bffa10063ff4c2bb3eef2a7d3f000000008fe6173e000080bf1698b23d19ebc8be9d676abf1698b23d19ebc8be9d676abf62de033f6547be3ecbd87e3f00000000452bc23d000080bff02a2c3d4eb0c1be0abb6cbff02a2c3d4eb0c1be0abb6cbfc8d9013fd7c5c03e67bc7f3f0000000062fd393d000080bf000000008e92babeee656ebf000000008e92babeee656ebf0000003f6336c33e0000803f0000000000000000000080bfed2a2cbd4eb0c1be0abb6cbfed2a2cbd4eb0c1be0abb6cbf704cfc3ed7c5c03e67bc7f3f000000005ffd39bd000080bf1398b2bd19ebc8be9d676abf1398b2bd19ebc8be9d676abf3b43f83e6547be3ecbd87e3f00000000422bc2bd000080bf62c70abe102bd0be4b4c67bf62c70abe102bd0be4b4c67bf0bdef33ef4c2bb3eef2a7d3f0000000091e617be000080bfbf643fbe5551d7bea14763bfbf643fbe5551d7bea14763bf7817ef3e1143b93e3d827a3f000000006bf452be000080bfe64443be2016f4be83ad5bbfe64443be2016f4be83ad5bbf672eee3e3903af3e65e7793f0000000004235ebe000080bf61a27bbe5fa2fbbe9ee355bf61a27bbe5fa2fbbe9ee355bfc0b0e83e4d44ac3efa98753f000000001c7890be000080bfcf289bbeae4c01bf16e14ebfcf289bbeae4c01bf16e14ebfc6c3e23eb2b5a93e45b36f3f0000000072c6b3be000080bf0153b9bedc5f04bfca8f46bf0153b9bedc5f04bfca8f46bfa16bdc3ea86ea73e9efb673f000000007184d8be000080bfcfe0d7be82ec06bfb5e43cbfcfe0d7be82ec06bfb5e43cbf38b2d53e8187a53e2f455e3f00000000ed05febe000080bfd94ef6be77d608bf9ae331bfd94ef6be77d608bf9ae331bfe1a7ce3e7617a43e2e7b523f00000000c0b711bf000080bfa4060abfa4060abf92a125bfa4060abfa4060abf92a125bf3b63c73ef031a33e27aa443f0000000020e323bf000080bf974518bfcf6d0abf974518bf974518bfcf6d0abf974518bf0000c03ee8e3a23ef304353f00000000f30435bf000080bf92a125bfa4060abfa4060abf92a125bfa4060abfa4060abfc49cb83ef031a33e20e3233f0000000027aa44bf000080bf9be331bf77d608bfd74ef6be9be331bf77d608bfd74ef6be1f58b13e7617a43ebfb7113f00000000307b52bf000080bfb5e43cbf82ec06bfcfe0d7beb5e43cbf82ec06bfcfe0d7bec84daa3e8187a53eed05fe3e000000002f455ebf000080bfca8f46bfdc5f04bf0153b9beca8f46bfdc5f04bf0153b9be5f94a33ea86ea73e7184d83e000000009efb67bf000080bf16e14ebfae4c01bfd0289bbe16e14ebfae4c01bfd0289bbe3a3c9d3eb2b5a93e73c6b33e0000000045b36fbf000080bf9ee355bf5fa2fbbe5fa27bbe9ee355bf5fa2fbbe5fa27bbe404f973e4d44ac3e1a78903e00000000fa9875bf000080bf83ad5bbf2016f4bee64443be83ad5bbf2016f4bee64443be99d1913e3903af3e04235e3e0000000065e779bf000080bf0e5c60bf012becbe67b30dbe0e5c60bf012becbe67b30dbed5c28c3ed4ddb13ea7b41f3e0000000009de7cbf000080bf1c1064bf1c10e4be4a73b6bd1c1064bf1c10e4be4a73b6bd2a1f883ed3c2b43e9bc8cb3d00000000c2ba7ebf000080bf42eb66bf3fecdbbe32f02fbd42eb66bf3fecdbbe32f02fbd9fe0833e7ea4b73eadd3423d00000000d3b57fbf000080bfc70d69bffbddd3be00000000c70d69bffbddd3be000000000000803e7578ba3e0000008000000000000080bf000080bf42eb66bf3fecdbbe36f02f3d42eb66bf3fecdbbe36f02f3dc33e783e7ea4b73eb1d342bd00000000d3b57fbf000080bf1c1064bf1c10e4be4673b63d1c1064bf1c10e4be4673b63dadc16f3ed3c2b43e97c8cbbd00000000c2ba7ebf000080bf0e5c60bf012becbe66b30d3e0e5c60bf012becbe66b30d3e557a663ed4ddb13ea6b41fbe0000000009de7cbf000080bf83ad5bbf2016f4bee644433e83ad5bbf2016f4bee644433ecd5c5c3e3903af3e04235ebe0000000065e779bf000080bf9ee355bf5fa2fbbe61a27b3e9ee355bf5fa2fbbe61a27b3e8061513e4d44ac3e1c7890be00000000fa9875bf000080bf16e14ebfae4c01bfcf289b3e16e14ebfae4c01bfcf289b3e8c87453eb2b5a93e72c6b3be0000000045b36fbf000080bfca8f46bfdc5f04bf0153b93eca8f46bfdc5f04bf0153b93e40d7383ea86ea73e7184d8be000000009efb67bf000080bfb5e43cbf82ec06bfcfe0d73eb5e43cbf82ec06bfcfe0d73e6f642b3e8187a53eed05febe000000002f455ebf000080bf9ae331bf77d608bfd94ef63e9ae331bf77d608bfd94ef63ec14f1d3e7617a43ec0b711bf000000002e7b52bf000080bf92a125bfa4060abfa4060a3f92a125bfa4060abfa4060a3f77c60e3ef031a33e20e323bf0000000027aa44bf000080bf974518bfcf6d0abf9745183f974518bfcf6d0abf9745183f0000003ee8e3a23ef30435bf00000000f30435bf000080bfa4060abfa4060abf92a1253fa4060abfa4060abf92a1253f1073e23df031a33e27aa44bf0000000020e323bf000080bfd74ef6be77d608bf9be3313fd74ef6be77d608bf9be3313f7b60c53d7617a43e307b52bf00000000bfb711bf000080bfcfe0d7be82ec06bfb5e43c3fcfe0d7be82ec06bfb5e43c3f2037a93d8187a53e2f455ebf00000000ed05febe000080bf0153b9bedc5f04bfca8f463f0153b9bedc5f04bfca8f463f7e518e3da86ea73e9efb67bf000000007184d8be000080bfd0289bbeae4c01bf16e14e3fd0289bbeae4c01bf16e14e3fd2e1693db2b5a93e45b36fbf0000000073c6b3be000080bf5fa27bbe5fa2fbbe9ee3553f5fa27bbe5fa2fbbe9ee3553ffe793a3d4d44ac3efa9875bf000000001a7890be000080bfe64443be2016f4be83ad5b3fe64443be2016f4be83ad5b3fcc8c0e3d3903af3e65e779bf0000000004235ebe000080bf67b30dbe012becbe0e5c603f67b30dbe012becbe0e5c603f562dcc3cd4ddb13e09de7cbf00000000a7b41fbe000080bf4a73b6bd1c10e4be1c10643f4a73b6bd1c10e4be1c10643f9ef2813cd3c2b43ec2ba7ebf000000009bc8cbbd000080bf32f02fbd3fecdbbe42eb663f32f02fbd3fecdbbe42eb663fa627f83b7ea4b73ed3b57fbf00000000add342bd000080bf00000000fbddd3bec70d693f00000000fbddd3bec70d693f000000807578ba3e000080bf0000000000000000000080bff02a2cbd4eb0c1be0abb6c3ff02a2cbd4eb0c1be0abb6c3f18e4ec3bd7c5c03e67bc7fbf0000000062fd39bd000080bf000000008e92babeee656e3f000000008e92babeee656e3f000000806336c33e000080bf0000000000000000000080bf1698b2bd19ebc8be9d676a3f1698b2bd19ebc8be9d676a3f7698773c6547be3ecbd87ebf00000000452bc2bd000080bf60c70abe102bd0be4b4c673f60c70abe102bd0be4b4c673f4f1fc23cf4c2bb3eef2a7dbf000000008fe617be000080bfbd643fbe5551d7bea147633fbd643fbe5551d7bea147633f3a44073d1143b93e3d827abf0000000069f452be000080bf89e876beae37debeae375e3f89e876beae37debeae375e3f40a1303d30d5b63e1ba976bf000000009e0889be000080bff77598bef3b0e4be74fc573ff77598bef3b0e4be74fc573f332f5d3d9f89b43ed16771bf000000006667aabe000080bfb86bb6be808aeabe1d7b503fb86bb6be808aeabe1d7b503fc66c863d1d73b23e4a896abf000000001f38cdbe000080bfdff0d4befb8eefbed1a1473fdff0d4befb8eefbed1a1473f86b39f3dd4a5b03ee2e161bf00000000f1f0f0be000080bf568af3be568af3be986b3d3f568af3be568af3be986b3d3f203aba3dd435af3e795757bf00000000176f0abf000080bf77d608bfd74ef6be9be3313f77d608bfd74ef6be9be3313f3ab9d53d0335ae3e68e94abf0000000001161cbf000080bf9b6317bf44baf7bed826253f9b6317bf44baf7bed826253f52d6f13df1b0ad3e23b63cbf000000004afc2cbf000080bfd82625bf44baf7be9b63173fd82625bf44baf7be9b63173fd614073ef1b0ad3e4afc2cbf0000000023b63cbf000080bf9be331bfd74ef6be77d6083f9be331bfd74ef6be77d6083f6323153e0335ae3e01161cbf0000000068e94abf000080bf986b3dbf568af3be588af33e986b3dbf568af3be588af33eefe2223ed435af3e186f0abf00000000785757bf000080bfd2a147bffb8eefbedef0d43ed2a147bffb8eefbedef0d43e3d26303ed4a5b03ef0f0f0be00000000e3e161bf000080bf1d7b50bf808aeabeb86bb63e1d7b50bf808aeabeb86bb63e9cc93c3e1d73b23e1f38cdbe000000004a896abf000080bf74fc57bff3b0e4bef775983e74fc57bff3b0e4bef775983e33b4483e9f89b43e6667aabe00000000d16771bf000080bfae375ebfae37debe89e8763eae375ebfae37debe89e8763eb0d7533e30d5b63e9e0889be000000001ba976bf000080bfa14763bf5551d7bebf643f3ea14763bf5551d7bebf643f3ef12e5e3e1143b93e6bf452be000000003d827abf000080bf4b4c67bf102bd0be62c70a3e4b4c67bf102bd0be62c70a3e15bc673ef4c2bb3e91e617be00000000ef2a7dbf000080bf9d676abf19ebc8be1398b23d9d676abf19ebc8be1398b23d7886703e6547be3e422bc2bd00000000cbd87ebf000080bf0abb6cbf4eb0c1beed2a2c3d0abb6cbf4eb0c1beed2a2c3ddf98783ed7c5c03e5ffd39bd0000000067bc7fbf000080bfee656ebf8e92babe00000000ee656ebf8e92babe000000000000803e6336c33e0000008000000000000080bf000080bf0abb6cbf4eb0c1bef02a2cbd0abb6cbf4eb0c1bef02a2cbd90b3833ed7c5c03e62fd393d0000000067bc7fbf000080bf9d676abf19ebc8be1698b2bd9d676abf19ebc8be1698b2bdc3bc873e6547be3e452bc23d00000000cbd87ebf000080bf4b4c67bf102bd0be60c70abe4b4c67bf102bd0be60c70abef5218c3ef4c2bb3e8fe6173e00000000ef2a7dbf000080bfa14763bf5551d7bebd643fbea14763bf5551d7bebd643fbe87e8903e1143b93e69f4523e000000003d827abf000080bfae375ebfae37debe89e876beae375ebfae37debe89e876be2814963e30d5b63e9e08893e000000001ba976bf000080bf74fc57bff3b0e4bef77598be74fc57bff3b0e4bef77598bee6a59b3e9f89b43e6667aa3e00000000d16771bf000080bf1d7b50bf808aeabeb86bb6be1d7b50bf808aeabeb86bb6be319ba13e1d73b23e1f38cd3e000000004a896abf000080bfd1a147bffb8eefbedff0d4bed1a147bffb8eefbedff0d4bee1eca73ed4a5b03ef1f0f03e00000000e2e161bf000080bf986b3dbf568af3be568af3be986b3dbf568af3be568af3be878eae3ed435af3e176f0a3f00000000795757bf000080bf9be331bfd74ef6be77d608bf9be331bfd74ef6be77d608bf4e6eb53e0335ae3e01161c3f0000000068e94abf000080bfd82625bf44baf7be9b6317bfd82625bf44baf7be9b6317bf9575bc3ef1b0ad3e4afc2c3f0000000023b63cbf000080bf9b6317bf44baf7bed82625bf9b6317bf44baf7bed82625bf6a8ac33ef1b0ad3e23b63c3f000000004afc2cbf000080bf77d608bfd74ef6be9be331bf77d608bfd74ef6be9be331bfb191ca3e0335ae3e68e94a3f0000000001161cbf000080bf588af3be568af3be986b3dbf588af3be568af3be986b3dbf7771d13ed435af3e7857573f00000000186f0abf000080bfdef0d4befb8eefbed2a147bfdef0d4befb8eefbed2a147bf1f13d83ed4a5b03ee3e1613f00000000f0f0f0be000080bfb86bb6be808aeabe1d7b50bfb86bb6be808aeabe1d7b50bfce64de3e1d73b23e4a896a3f000000001f38cdbe000080bff77598bef3b0e4be74fc57bff77598bef3b0e4be74fc57bf195ae43e9f89b43ed167713f000000006667aabe000080bf89e876beae37debeae375ebf89e876beae37debeae375ebfd7ebe93e30d5b63e1ba9763f000000009e0889be000080bf31ab15bf2fb3d9be96e130bf31ab15bf2fb3d9be96e130bf62c6c63eda6cb83e486d433f00000000795c25bf000080bff7bc23bf4a51dabef7bc23bff7bc23bf4a51dabef7bc23bf0000c03e3b35b83ef304353f00000000f30435bf000080bf82ec06bfcfe0d7beb5e43cbf82ec06bfcfe0d7beb5e43cbf2075cd3eb710b93ed650503f0000000007cc14bf000080bffb8eefbedff0d4bed1a147bffb8eefbedff0d4bed1a147bf70f6d33e4a18ba3ea9845b3f00000000ffb503bf000080bfea05d1beeb05d1beeb0551bfea05d1beeb05d1beeb0551bff637da3eac76bb3e2ef9643f000000002df9e4be000080bff1c0b2be374accbedb0e59bff1c0b2be374accbedb0e59bfa42be03e3d1cbd3eb5b76c3f00000000a4f1c2be000080bf833095be5aebc6bec5c85fbf833095be5aebc6bec5c85fbf0ac8e53e56f8be3ee9dc723f000000009be8a1be000080bfed5b71be5916c1be894a65bfed5b71be5916c1be894a65bf0808eb3ec4fac03e3392773f00000000f14c82be000080bfbbf43abebaf4babee8b169bfbbf43abebaf4babee8b169bf2eeaef3ed314c33e55077b3f00000000acd248be000080bf078007beb4aab4be0d206dbf078007beb4aab4be0d206dbfeb6ff43eec39c53e546d7d3f00000000c2d010be000080bf5956aebd5c56aebebeb66fbf5956aebd5c56aebebeb66fbfc49cf83ecd5fc73edcf27e3f00000000cc6ab9bd000080bf9d0f28bd980fa8be6a9671bf9d0f28bd980fa8be6a9671bf9475fc3e7e7ec93e26c27f3f0000000041eb31bd000080bf000000009be8a1bee8dc72bf000000009be8a1bee8dc72bf0000003f1590cb3e0000803f0000000000000000000080bf980f283d980fa8be6a9671bf980f283d980fa8be6a9671bf36c5013f7e7ec93e26c27f3f000000003ceb313d000080bf5c56ae3d5c56aebebeb66fbf5c56ae3d5c56aebebeb66fbf9eb1033fcd5fc73edcf27e3f00000000cf6ab93d000080bf0780073eb4aab4be0d206dbf0780073eb4aab4be0d206dbf0ac8053fec39c53e546d7d3f00000000c2d0103e000080bfbaf43a3ebaf4babee8b169bfbaf43a3ebaf4babee8b169bfe90a083fd314c33e56077b3f00000000acd2483e000080bfef5b713e5916c1be894a65bfef5b713e5916c1be894a65bffc7b0a3fc4fac03e3392773f00000000f24c823e000080bf8330953e5aebc6bec5c85fbf8330953e5aebc6bec5c85fbffb1b0d3f56f8be3ee9dc723f000000009be8a13e000080bff0c0b23e374accbedb0e59bff0c0b23e374accbedb0e59bf2eea0f3f3d1cbd3eb5b76c3f00000000a3f1c23e000080bfeb05d13eeb05d1beeb0551bfeb05d13eeb05d1beeb0551bf05e4123fac76bb3e2ef9643f000000002ef9e43e000080bffb8eef3edff0d4bed1a147bffb8eef3edff0d4bed1a147bfc804163f4a18ba3ea9845b3f00000000ffb5033f000080bf82ec063fcfe0d7beb5e43cbf82ec063fcfe0d7beb5e43cbf7045193fb710b93ed650503f0000000007cc143f000080bf5d2b6b3e5a9ea4be5d2b6bbf5d2b6b3e5a9ea4be5d2b6bbf38fb093f17a7ca3e425b783f00000000425b783e000080bfe416363e07549fbe0bfe6ebfe416363e07549fbe0bfe6ebf39ab073f876dcc3e8b7a7b3f00000000529a3f3e000080bfa376913e13b5a9be2c5166bfa376913e13b5a9be2c5166bf6e760c3f61f0c83eff1d743f00000000e52d9a3e000080bf6577ae3e6577aebe5e5060bf6577ae3e6577aebe5e5060bf8a1c0f3f9e54c73edb976e3f000000008e92b93e000080bf374acc3ef0c0b2bedb0e59bf374acc3ef0c0b2bedb0e59bfbaeb113f6ae0c53e33a2673f000000001202da3e000080bf808aea3eb96bb6be1d7b50bf808aea3eb96bb6be1d7b50bf6ae0143f10a1c43e931f5f3f000000008503fb3e000080bfdc5f043f0153b9beca8f46bfdc5f043f0153b9beca8f46bf17f5173f8fa3c33e4001553f00000000d5000e3f000080bfd631133fb456bbbeb4563bbfd631133fb456bbbeb4563bbf50221b3f52f3c23e294c493f000000008d291e3f000080bff275213ff05ebcbe71ea2ebff275213ff05ebcbe71ea2ebf025f1e3fe898c23e151c3c3f00000000c4a32d3f000080bf71ea2e3ff05ebcbef27521bf71ea2e3ff05ebcbef27521bffea0213fe898c23ec4a32d3f00000000151c3c3f000080bfb4563b3fb456bbbed63113bfb4563b3fb456bbbed63113bfb0dd243f52f3c23e8d291e3f00000000294c493f000080bfcb8f463f0153b9bedb5f04bfcb8f463f0153b9bedb5f04bfe90a283f8fa3c33ed3000e3f000000004001553f000080bf1d7b503fb96bb6be808aeabe1d7b503fb96bb6be808aeabe961f2b3f10a1c43e8503fb3e00000000931f5f3f000080bfdb0e593ff0c0b2be374accbedb0e593ff0c0b2be374accbe46142e3f6ae0c53e1202da3e0000000033a2673f000080bf5e50603f6577aebe6477aebe5e50603f6577aebe6477aebe77e3303f9e54c73e8d92b93e00000000db976e3f000080bf2c51663f13b5a9bea37691be2c51663f13b5a9bea37691be9289333f61f0c83ee52d9a3e00000000ff1d743f000080bf5d2b6b3f5a9ea4be5b2b6bbe5d2b6b3f5a9ea4be5b2b6bbec804363f17a7ca3e405b783e00000000425b783f000080bf0bfe6e3f07549fbee51636be0bfe6e3f07549fbee51636bec854383f876dcc3e529a3f3e000000008a7a7b3f000080bf45ea713f2cf299be26f403be45ea713f2cf299be26f403be657a3a3f343ace3e1e5b0a3e000000000ca77d3f000080bfc210743fc48f94beddc8a9bdc210743fc48f94beddc8a9bd4a773c3f7705d03edb6ab13d00000000a0097f3f000080bf4990753fd53e8fbe8bb523bd4990753fd53e8fbe8bb523bda74d3e3f67c9d13ecf842a3d000000002fc77f3f000080bfd084763fef0c8abe00000000d084763fef0c8abe000000000000403faa81d33e00000080000000000000803f000080bf2c51663fa37691be14b5a9be2c51663fa37691be14b5a9be2e9e313f060dd13e4c00b13e000000004137703f000080bfc7aa6b3f77668dbe77668dbec7aa6b3f77668dbe77668dbeff1f343fef65d23e431f933e000000001b34753f000080bf4ff16f3f2d1c89be4d8464be4ff16f3f2d1c89be4d8464bef879363f3ad1d33ef02d6d3e00000000d409793f000080bfee43733fb0b084be95eb30beee43733fb0b084be95eb30be10ac383f9646d53ebe2d373e00000000e6de7b3f000080bfa7c2753f093980be0b3900bea7c2753f093980be0b3900be27b73a3f0cbfd63e8071043e0000000086d97d3f000080bf7f8c773f7f8c77be5408a5bd7f8c773f7f8c77be5408a5bdce9c3c3f0935d83ebf13aa3d000000009f1d7f3f000080bf39be783f18cb6ebe18321fbd39be783f18cb6ebe18321fbd025f3e3f46a4d93e8fb5233d00000000a2cb7f3f000080bfb371793f924166be00000000b371793f924166be000000000000403f9c09db3e00000080000000000000803f000080bf39be783f18cb6ebe10321f3d39be783f18cb6ebe10321f3dfea0413f46a4d93e87b523bd00000000a2cb7f3f000080bf5d2b6b3f5d2b6bbe5b9ea4be5d2b6b3f5d2b6bbe5b9ea4be5a48323f0c3cda3eb123a93e00000000b3a0713f000080bf894a653fef5b71be5916c1be894a653fef5b71be5916c1be43c32f3fbc38d93e69afc63e000000004cf06b3f000080bfc5c85f3f833095be59ebc6bec5c85f3f833095be59ebc6bec4f52e3ffdcfcf3e61f1cf3e000000008eef693f000080bf74fc573ff77598bef3b0e4be74fc573ff77598bef3b0e4be75292c3f0ab9ce3efa8eef3e00000000ec3f623f000080bf17e14e3fd1289bbeae4c01bf17e14e3fd1289bbeae4c01bf993d293f7cd2cd3e03ae073f000000006b16593f000080bfb378443f5c2d9dbe3f1410bfb378443f5c2d9dbe3f1410bf3138263fd625cd3e9c63173f000000008f704e3f000080bfa8d4383f226d9ebe216d1ebfa8d4383f226d9ebe216d1ebfc320233fd7bacc3e439a263f00000000a55e423f000080bf38162c3f6fd99ebe38162cbf38162c3f6fd99ebe38162cbf0000203f9596cc3ef304353f00000000f304353f000080bf226d1e3f226d9ebea7d438bf226d1e3f226d9ebea7d438bf3edf1c3fd7bacc3ea45e423f00000000449a263f000080bf3f14103f5c2d9dbeb37844bf3f14103f5c2d9dbeb37844bfd0c7193fd625cd3e8f704e3f000000009c63173f000080bfae4c013fd0289bbe16e14ebfae4c013fd0289bbe16e14ebf68c2163f7cd2cd3e6a16593f0000000003ae073f000080bff3b0e43ef77598be74fc57bff3b0e43ef77598be74fc57bf8cd6133f0ab9ce3eec3f623f00000000fa8eef3e000080bf5aebc63e833095bec5c85fbf5aebc63e833095bec5c85fbf3d0a113ffdcfcf3e8eef693f0000000062f1cf3e000080bf14b5a93ea37691be2c5166bf14b5a93ea37691be2c5166bfd2610e3f060dd13e4137703f000000004c00b13e000080bf77668d3e77668dbec7aa6bbf77668d3e77668dbec7aa6bbf02e00b3fef65d23e1b34753f00000000431f933e000080bf4b84643e2d1c89be4ff16fbf4b84643e2d1c89be4ff16fbf0886093f3ad1d33ed409793f00000000ee2d6d3e000080bf96eb303eb0b084beee4373bf96eb303eb0b084beee4373bff153073f9646d53ee6de7b3f00000000bf2d373e000080bf26f4033e2cf299be45ea71bf26f4033e2cf299be45ea71bf9c85053f343ace3e0ca77d3f000000001e5b0a3e000080bfe0c8a93dc48f94bec21074bfe0c8a93dc48f94bec21074bfb688033f7705d03ea0097f3f00000000de6ab13d000080bf86b5233dd53e8fbe499075bf86b5233dd53e8fbe499075bf5ab2013f67c9d13e2fc77f3f00000000ca842a3d000080bf00000000ef0c8abed08476bf00000000ef0c8abed08476bf0000003faa81d33e0000803f0000000000000000000080bf8bb523bdd53e8fbe499075bf8bb523bdd53e8fbe499075bf4d9bfc3e67c9d13e2fc77f3f00000000cf842abd000080bfddc8a9bdc48f94bec21074bfddc8a9bdc48f94bec21074bf93eef83e7705d03ea0097f3f00000000db6ab1bd000080bf26f403be2cf299be45ea71bf26f403be2cf299be45ea71bfc9f4f43e343ace3e0ca77d3f000000001e5b0abe000080bfe51636be07549fbe0bfe6ebfe51636be07549fbe0bfe6ebf8ea9f03e876dcc3e8a7a7b3f00000000529a3fbe000080bf5b2b6bbe5a9ea4be5d2b6bbf5b2b6bbe5a9ea4be5d2b6bbf8f09ec3e17a7ca3e425b783f00000000405b78be000080bfa37691be13b5a9be2c5166bfa37691be13b5a9be2c5166bf2313e73e61f0c83eff1d743f00000000e52d9abe000080bf6477aebe6577aebe5e5060bf6477aebe6577aebe5e5060bfedc6e13e9e54c73edb976e3f000000008d92b9be000080bf374accbef0c0b2bedb0e59bf374accbef0c0b2bedb0e59bf8c28dc3e6ae0c53e33a2673f000000001202dabe000080bf808aeabeb96bb6be1d7b50bf808aeabeb96bb6be1d7b50bf2b3fd63e10a1c43e931f5f3f000000008503fbbe000080bfdb5f04bf0153b9becb8f46bfdb5f04bf0153b9becb8f46bfd215d03e8fa3c33e4001553f00000000d3000ebf000080bfd63113bfb456bbbeb4563bbfd63113bfb456bbbeb4563bbf60bbc93e52f3c23e294c493f000000008d291ebf000080bff27521bff05ebcbe71ea2ebff27521bff05ebcbe71ea2ebffc41c33ee898c23e151c3c3f00000000c4a32dbf000080bf71ea2ebff05ebcbef27521bf71ea2ebff05ebcbef27521bf03bebc3ee898c23ec4a32d3f00000000151c3cbf000080bf96e130bf2fb3d9be31ab15bf96e130bf2fb3d9be31ab15bf9d39b93eda6cb83e795c253f00000000486d43bf000080bfb5e43cbfcfe0d7be82ec06bfb5e43cbfcfe0d7be82ec06bfdf8ab23eb710b93e07cc143f00000000d65050bf000080bfd1a147bfdff0d4befb8eefbed1a147bfdff0d4befb8eefbe8f09ac3e4a18ba3effb5033f00000000a9845bbf000080bfeb0551bfeb05d1beeb05d1beeb0551bfeb05d1beeb05d1be09c8a53eac76bb3e2ef9e43e000000002ef964bf000080bfdb0e59bf374accbef0c0b2bedb0e59bf374accbef0c0b2be5bd49f3e3d1cbd3ea3f1c23e00000000b5b76cbf000080bfc5c85fbf5aebc6be833095bec5c85fbf5aebc6be833095bef6379a3e56f8be3e9be8a13e00000000e9dc72bf000080bf894a65bf5916c1beef5b71be894a65bf5916c1beef5b71bef7f7943ec4fac03ef24c823e00000000339277bf000080bfe8b169bfbaf4babebaf43abee8b169bfbaf4babebaf43abed215903ed314c33eacd2483e0000000056077bbf000080bf0d206dbfb4aab4be078007be0d206dbfb4aab4be078007be14908b3eec39c53ec2d0103e00000000546d7dbf000080bfbeb66fbf5c56aebe5c56aebdbeb66fbf5c56aebe5c56aebd3c63873ecd5fc73ecf6ab93d00000000dcf27ebf000080bf6a9671bf980fa8be980f28bd6a9671bf980fa8be980f28bd6b8a833e7e7ec93e3ceb313d0000000026c27fbf000080bfe8dc72bf9be8a1be00000000e8dc72bf9be8a1be000000000000803e1590cb3e0000008000000000000080bf000080bf6a9671bf980fa8be9d0f283d6a9671bf980fa8be9d0f283d29eb783e7e7ec93e41eb31bd0000000026c27fbf000080bfbeb66fbf5c56aebe5956ae3dbeb66fbf5c56aebe5956ae3d8939713ecd5fc73ecc6ab9bd00000000dcf27ebf000080bf0d206dbfb4aab4be0780073e0d206dbfb4aab4be0780073ed7df683eec39c53ec2d010be00000000546d7dbf000080bfe8b169bfbaf4babebbf43a3ee8b169bfbaf4babebbf43a3e5bd45f3ed314c33eacd248be0000000055077bbf000080bf894a65bf5916c1beed5b713e894a65bf5916c1beed5b713e1010563ec4fac03ef14c82be00000000339277bf000080bfc5c85fbf5aebc6be8330953ec5c85fbf5aebc6be8330953e14904b3e56f8be3e9be8a1be00000000e9dc72bf000080bfdb0e59bf374accbef1c0b23edb0e59bf374accbef1c0b23e4857403e3d1cbd3ea4f1c2be00000000b5b76cbf000080bfeb0551bfeb05d1beea05d13eeb0551bfeb05d1beea05d13eec6f343eac76bb3e2df9e4be000000002ef964bf000080bfd1a147bfdff0d4befb8eef3ed1a147bfdff0d4befb8eef3ee1ec273e4a18ba3effb503bf00000000a9845bbf000080bfb5e43cbfcfe0d7be82ec063fb5e43cbfcfe0d7be82ec063f40ea1a3eb710b93e07cc14bf00000000d65050bf000080bf96e130bf2fb3d9be31ab153f96e130bf2fb3d9be31ab153fc68c0d3eda6cb83e795c25bf00000000486d43bf000080bff7bc23bf4a51dabef7bc233ff7bc23bf4a51dabef7bc233f0000003e3b35b83ef30435bf00000000f30435bf000080bf31ab15bf2fb3d9be96e1303f31ab15bf2fb3d9be96e1303f72e6e43dda6cb83e486d43bf00000000795c25bf000080bf82ec06bfcfe0d7beb5e43c3f82ec06bfcfe0d7beb5e43c3f7f2bca3db710b93ed65050bf0000000007cc14bf000080bffb8eefbedff0d4bed1a1473ffb8eefbedff0d4bed1a1473f3d26b03d4a18ba3ea9845bbf00000000ffb503bf000080bfeb05d1beeb05d1beeb05513feb05d1beeb05d1beeb05513f2920973dac76bb3e2ef964bf000000002ef9e4be000080bff0c0b2be374accbedb0e593ff0c0b2be374accbedb0e593fdda27e3d3d1cbd3eb5b76cbf00000000a3f1c2be000080bf833095be5aebc6bec5c85f3f833095be5aebc6bec5c85f3faebf513d56f8be3ee9dc72bf000000009be8a1be000080bfef5b71be5916c1be894a653fef5b71be5916c1be894a653fbdbf273dc4fac03e339277bf00000000f24c82be000080bfbaf43abebaf4babee8b1693fbaf43abebaf4babee8b1693f91ae003dd314c33e56077bbf00000000acd248be000080bf078007beb4aab4be0d206d3f078007beb4aab4be0d206d3f4701b93cec39c53e546d7dbf00000000c2d010be000080bf5c56aebd5c56aebebeb66f3f5c56aebd5c56aebebeb66f3f7b676c3ccd5fc73edcf27ebf00000000cf6ab9bd000080bf980f28bd980fa8be6a96713f980f28bd980fa8be6a96713fc99ae23b7e7ec93e26c27fbf000000003ceb31bd000080bf000000009be8a1bee8dc723f000000009be8a1bee8dc723f000000801590cb3e000080bf0000000000000000000080bf86b523bdd53e8fbe4990753f86b523bdd53e8fbe4990753f872cd93b67c9d13e2fc77fbf00000000ca842abd000080bf00000000ef0c8abed084763f00000000ef0c8abed084763f00000080aa81d33e000080bf0000000000000000000080bfe0c8a9bdc48f94bec210743fe0c8a9bdc48f94bec210743fad2d623c7705d03ea0097fbf00000000de6ab1bd000080bf26f403be2cf299be45ea713f26f403be2cf299be45ea713f5fb3b03c343ace3e0ca77dbf000000001e5b0abe000080bfe41636be07549fbe0bfe6e3fe41636be07549fbe0bfe6e3f1767f53c876dcc3e8b7a7bbf00000000529a3fbe000080bf5d2b6bbe5a9ea4be5d2b6b3f5d2b6bbe5a9ea4be5d2b6b3f86b31f3d17a7ca3e425b78bf00000000425b78be000080bfa37691be13b5a9be2c51663fa37691be13b5a9be2c51663feb66473d61f0c83eff1d74bf00000000e52d9abe000080bf6577aebe6577aebe5e50603f6577aebe6577aebe5e50603f94c8713d9e54c73edb976ebf000000008e92b9be000080bf374accbef0c0b2bedb0e593f374accbef0c0b2bedb0e593fcc5d8f3d6ae0c53e33a267bf000000001202dabe000080bf808aeabeb96bb6be1d7b503f808aeabeb96bb6be1d7b503f5303a73d10a1c43e931f5fbf000000008503fbbe000080bfdc5f04bf0153b9beca8f463fdc5f04bf0153b9beca8f463fb8a8bf3d8fa3c33e400155bf00000000d5000ebf000080bfd63113bfb456bbbeb4563b3fd63113bfb456bbbeb4563b3f7c12d93d52f3c23e294c49bf000000008d291ebf000080bff27521bff05ebcbe71ea2e3ff27521bff05ebcbe71ea2e3f0ef8f23de898c23e151c3cbf00000000c4a32dbf000080bf71ea2ebff05ebcbef275213f71ea2ebff05ebcbef275213ff983063ee898c23ec4a32dbf00000000151c3cbf000080bfb4563bbfb456bbbed631133fb4563bbfb456bbbed631133fc176133e52f3c23e8d291ebf00000000294c49bf000080bfcb8f46bf0153b9bedb5f043fcb8f46bf0153b9bedb5f043fa52b203e8fa3c33ed3000ebf00000000400155bf000080bf1d7b50bfb96bb6be808aea3e1d7b50bfb96bb6be808aea3e557e2c3e10a1c43e8503fbbe00000000931f5fbf000080bfdb0e59bff0c0b2be374acc3edb0e59bff0c0b2be374acc3e1a51383e6ae0c53e1202dabe0000000033a267bf000080bf5e5060bf6577aebe6477ae3e5e5060bf6577aebe6477ae3eda8d433e9e54c73e8d92b9be00000000db976ebf000080bf2c5166bf13b5a9bea376913e2c5166bf13b5a9bea376913e45264e3e61f0c83ee52d9abe00000000ff1d74bf000080bf5d2b6bbf5a9ea4be5b2b6b3e5d2b6bbf5a9ea4be5b2b6b3e1f13583e17a7ca3e405b78be00000000425b78bf000080bf0bfe6ebf07549fbee516363e0bfe6ebf07549fbee516363e1c53613e876dcc3e529a3fbe000000008a7a7bbf000080bf45ea71bf2cf299be26f4033e45ea71bf2cf299be26f4033e94e9693e343ace3e1e5b0abe000000000ca77dbf000080bfc21074bfc48f94beddc8a93dc21074bfc48f94beddc8a93d25dd713e7705d03edb6ab1bd00000000a0097fbf000080bf499075bfd53e8fbe8bb5233d499075bfd53e8fbe8bb5233d9b36793e67c9d13ecf842abd000000002fc77fbf000080bfd08476bfef0c8abe00000000d08476bfef0c8abe000000000000803eaa81d33e0000008000000000000080bf000080bf499075bfd53e8fbe86b523bd499075bfd53e8fbe86b523bdb264833e67c9d13eca842a3d000000002fc77fbf000080bfc21074bfc48f94bee0c8a9bdc21074bfc48f94bee0c8a9bd6d11873e7705d03ede6ab13d00000000a0097fbf000080bf45ea71bf2cf299be26f403be45ea71bf2cf299be26f403be360b8b3e343ace3e1e5b0a3e000000000ca77dbf000080bf0bfe6ebf07549fbee41636be0bfe6ebf07549fbee41636be71568f3e876dcc3e529a3f3e000000008b7a7bbf000080bf5d2b6bbf5a9ea4be5d2b6bbe5d2b6bbf5a9ea4be5d2b6bbe71f6933e17a7ca3e425b783e00000000425b78bf000080bf2c5166bf13b5a9bea37691be2c5166bf13b5a9bea37691beddec983e61f0c83ee52d9a3e00000000ff1d74bf000080bf5e5060bf6577aebe6577aebe5e5060bf6577aebe6577aebe12399e3e9e54c73e8e92b93e00000000db976ebf000080bfdb0e59bff0c0b2be374accbedb0e59bff0c0b2be374accbe73d7a33e6ae0c53e1202da3e0000000033a267bf000080bf1d7b50bfb96bb6be808aeabe1d7b50bfb96bb6be808aeabed4c0a93e10a1c43e8503fb3e00000000931f5fbf000080bfca8f46bf0153b9bedc5f04bfca8f46bf0153b9bedc5f04bf2eeaaf3e8fa3c33ed5000e3f00000000400155bf000080bfb4563bbfb456bbbed63113bfb4563bbfb456bbbed63113bf9f44b63e52f3c23e8d291e3f00000000294c49bf000080bfc7aa6bbf77668dbe77668dbec7aa6bbf77668dbe77668dbe02c0973eef65d23e431f933e000000001b3475bf000080bf4ff16fbf2d1c89be4b8464be4ff16fbf2d1c89be4b8464be0f0c933e3ad1d33eee2d6d3e00000000d40979bf000080bf2c5166bfa37691be14b5a9be2c5166bfa37691be14b5a9bea5c39c3e060dd13e4c00b13e00000000413770bf000080bfc5c85fbf833095be5aebc6bec5c85fbf833095be5aebc6be7a14a23efdcfcf3e62f1cf3e000000008eef69bf000080bf74fc57bff77598bef3b0e4be74fc57bff77598bef3b0e4be16ada73e0ab9ce3efa8eef3e00000000ec3f62bf000080bf16e14ebfd0289bbeae4c01bf16e14ebfd0289bbeae4c01bfce84ad3e7cd2cd3e03ae073f000000006a1659bf000080bfb37844bf5c2d9dbe3f1410bfb37844bf5c2d9dbe3f1410bf9e8fb33ed625cd3e9c63173f000000008f704ebf000080bfa7d438bf226d9ebe226d1ebfa7d438bf226d9ebe226d1ebf7abeb93ed7bacc3e449a263f00000000a45e42bf000080bf38162cbf6fd99ebe38162cbf38162cbf6fd99ebe38162cbf0000c03e9596cc3ef304353f00000000f30435bf000080bf216d1ebf226d9ebea8d438bf216d1ebf226d9ebea8d438bf8541c63ed7bacc3ea55e423f00000000439a26bf000080bf3f1410bf5c2d9dbeb37844bf3f1410bf5c2d9dbeb37844bf6170cc3ed625cd3e8f704e3f000000009c6317bf000080bfae4c01bfd1289bbe17e14ebfae4c01bfd1289bbe17e14ebf317bd23e7cd2cd3e6b16593f0000000003ae07bf000080bff3b0e4bef77598be74fc57bff3b0e4bef77598be74fc57bfe952d83e0ab9ce3eec3f623f00000000fa8eefbe000080bf59ebc6be833095bec5c85fbf59ebc6be833095bec5c85fbf86ebdd3efdcfcf3e8eef693f0000000061f1cfbe000080bf14b5a9bea37691be2c5166bf14b5a9bea37691be2c5166bf5b3ce33e060dd13e4137703f000000004c00b1be000080bf77668dbe77668dbec7aa6bbf77668dbe77668dbec7aa6bbffd3fe83eef65d23e1b34753f00000000431f93be000080bf4d8464be2d1c89be4ff16fbf4d8464be2d1c89be4ff16fbff1f3ec3e3ad1d33ed409793f00000000f02d6dbe000080bf95eb30beb0b084beee4373bf95eb30beb0b084beee4373bf1e58f13e9646d53ee6de7b3f00000000be2d37be000080bf0b3900be093980bea7c275bf0b3900be093980bea7c275bf4e6ef53e0cbfd63e86d97d3f00000000807104be000080bf5408a5bd7f8c77be7f8c77bf5408a5bd7f8c77be7f8c77bf9c39f93e0935d83e9f1d7f3f00000000bf13aabd000080bf18321fbd18cb6ebe39be78bf18321fbd18cb6ebe39be78bf03befc3e46a4d93ea2cb7f3f000000008fb523bd000080bf00000000924166beb37179bf00000000924166beb37179bf0000003f9c09db3e0000803f0000000000000000000080bf10321f3d18cb6ebe39be78bf10321f3d18cb6ebe39be78bffea0013f46a4d93ea2cb7f3f0000000087b5233d000080bf5508a53d7f8c77be7f8c77bf5508a53d7f8c77be7f8c77bf3263033f0935d83e9f1d7f3f00000000c013aa3d000080bf0939003e093980bea7c275bf0939003e093980bea7c275bfd948053f0cbfd63e86d97d3f000000007d71043e000080bf02902bbe057456be069f76bf02902bbe057456be069f76bff8f7f13e3a9ddd3ed6367c3f000000000d742fbe000080bf66c3f8bd814d4fbe67c378bf66c3f8bd814d4fbe67c378bfdcddf53ef1c6de3eec057e3f00000000eb05febd000080bf942aa0bd353548be83427abf942aa0bd353548be83427abfaf7ef93eeaeddf3e492f7f3f000000007951a3bd000080bfed971abdf03d41beeb367bbfed971abdf03d41beeb367bbf0fdefc3e1e0fe13e94cf7f3f00000000066c1dbd000080bf000000009b753abe5eb87bbf000000009b753abe5eb87bbf0000003f5728e23e0000803f0000000000000000000080bff3971a3df03d41beeb367bbff3971a3df03d41beeb367bbff890013f1e0fe13e94cf7f3f000000000c6c1d3d000080bf912aa03d353548be83427abf912aa03d353548be83427abfa840033feaeddf3e492f7f3f000000007651a33d000080bf67c3f83d814d4fbe67c378bf67c3f83d814d4fbe67c378bf1211053ff1c6de3eec057e3f00000000ec05fe3d000080bf04902b3e057456be069f76bf04902b3e057456be069f76bf0404073f3a9ddd3ed6367c3f000000000f742f3e000080bf67905d3e67905dbe71b873bf67905d3e67905dbe71b873bff21a093fb474dc3e4ea2793f00000000a4f0623e000080bf2d1c893e4b8464be4ff16fbf2d1c893e4b8464be4ff16fbfc6560b3f5352db3e6f26763f000000003fa88c3e000080bf5a9ea43e5d2b6bbe5d2b6bbf5a9ea43e5d2b6bbe5d2b6bbfa6b70d3f0c3cda3eb3a0713f00000000b023a93e000080bf5916c13eef5b71be894a65bf5916c13eef5b71be894a65bfbe3c103fbc38d93e4cf06b3f0000000069afc63e000080bfae37de3e89e876beae375ebfae37de3e89e876beae375ebf05e4123fed4fd83e2ef9643f000000002ef9e43e000080bf5fa2fb3e5fa27bbe9ee355bf5fa2fb3e5fa27bbe9ee355bf16aa153f6789d73eb9a75c3f0000000012cc013f000080bf06730c3fc55c7fbe374a4cbf06730c3fc55c7fbe374a4cbf168a183fa0ecd63e6af4523f000000000908113f000080bfdfc31a3f8ff880bed77441bfdfc31a3f8ff880bed77441bfce7d1b3f1080d63e04e7473f0000000003ec1f3f000080bf1485283f72a181be9f7b35bf1485283f72a181be9f7b35bfde7d1e3f8148d63e5a983b3f000000000b322e3f000080bf9f7b353f72a181be148528bf9f7b353f72a181be148528bf2282213f8148d63e0b322e3f000000005a983b3f000080bfd774413f8ff880bedec31abfd774413f8ff880bedec31abf3282243f1080d63e03ec1f3f0000000005e7473f000080bf374a4c3fc55c7fbe06730cbf374a4c3fc55c7fbe06730cbfea75273fa0ecd63e0908113f000000006af4523f000080bf9ee3553f5fa27bbe5fa2fbbe9ee3553f5fa27bbe5fa2fbbeea552a3f6789d73e12cc013f00000000b9a75c3f000080bfae375e3f89e876bead37debeae375e3f89e876bead37debefc1b2d3fed4fd83e2df9e43e000000002ef9643f000080bfb35b243f7a494abee2a43dbfb35b243f7a494abee2a43dbf3c181d3f8497df3ed774413f0000000087a9273f000080bf009e163fabd248beabd248bf009e163fabd248beabd248bff6371a3f5cd4df3ecdcc4c3f000000009999193f000080bf386f313f40c84abe386f31bf386f313f40c84abe386f31bf0000203fef82df3ef304353f00000000f304353f000080bfe2a43d3f7a494abeb35b24bfe2a43d3f7a494abeb35b24bfc4e7223f8497df3e87a9273f00000000d774413f000080bfabd2483fabd248beff9d16bfabd2483fabd248beff9d16bf0bc8253f5cd4df3e9999193f00000000cdcc4c3f000080bfe8da523fad7346be876f08bfe8da523fad7346be876f08bfc999283fdb36e03e84120b3f0000000012ee563f000080bf83ad5b3fe64443be2016f4be83ad5b3fe64443be2016f4bec5562b3fffbae03e31a6f83e00000000c5c85f3f000080bf9f47633fbc643fbe5551d7be9f47633fbc643fbe5551d7bedff92d3fcc5be13e232edb3e000000005c5b673f000080bfe8b1693fbaf43abeb9f4babee8b1693fbaf43abeb9f4babe2d7f303fc313e23eeb26be3e00000000a6b06d3f000080bf0bfe6e3fe41636be07549fbe0bfe6e3fe41636be07549fbe05e4323f58dde23e9be8a13e00000000e9dc723f000080bf4ff16f3f4b8464be2c1c89be4ff16f3f4b8464be2c1c89be3ba9343f5352db3e3ea88c3e000000006f26763f000080bf71b8733f67905dbe67905dbe71b8733f67905dbe67905dbe0ee5363fb474dc3ea4f0623e000000004ea2793f000080bf069f763f057456be02902bbe069f763f057456be02902bbefcfb383f3a9ddd3e0d742f3e00000000d6367c3f000080bf67c3783f814d4fbe66c3f8bd67c3783f814d4fbe66c3f8bdeeee3a3ff1c6de3eeb05fe3d00000000ec057e3f000080bf83427a3f353548be942aa0bd83427a3f353548be942aa0bd58bf3c3feaeddf3e7951a33d00000000492f7f3f000080bfeb367b3ff03d41beed971abdeb367b3ff03d41beed971abd086f3e3f1e0fe13e066c1d3d0000000094cf7f3f000080bf5eb87b3f9b753abe000000005eb87b3f9b753abe000000000000403f5728e23e00000080000000000000803f000080bfeb367b3ff03d41bef3971a3deb367b3ff03d41bef3971a3df890413f1e0fe13e0c6c1dbd0000000094cf7f3f000080bf83427a3f353548be912aa03d83427a3f353548be912aa03da840433feaeddf3e7651a3bd00000000492f7f3f000080bf069f763f04902bbe037456be069f763f04902bbe037456be4447373fca90e43e2687593e000000003b287a3f000080bf0f2c793f5f1d26be5f1d26be0f2c793f5f1d26be5f1d26be7045393fd671e53e3558283e0000000050847c3f000080bf55077b3f89a820becefcf0bd55077b3f89a820becefcf0bd50223b3f0953e63e6a02f43d000000002d2d7e3f000080bf874b7c3f2c421bbe30429bbd874b7c3f2c421bbe30429bbd3edf3c3fb631e73e12139d3d00000000f73e7f3f000080bffa107d3f19f715be14f715bdfa107d3f19f715be14f715bdde7d3e3fd00be83e8599173d0000000019d37f3f000080bf546d7d3fc3d010be00000000546d7d3fc3d010be000000000000403fd7dfe83e00000080000000000000803f000080bffa107d3f19f715be19f7153dfa107d3f19f715be19f7153d2282413fd00be83e8a9917bd0000000019d37f3f000080bf874b7c3f2c421bbe2c429b3d874b7c3f2c421bbe2c429b3dc320433fb631e73e0e139dbd00000000f73e7f3f000080bf55077b3f89a820becdfcf03d55077b3f89a820becdfcf03db0dd443f0953e63e6902f4bd000000002d2d7e3f000080bf67c3783f67c3f8bd7e4d4fbe67c3783f67c3f8bd7e4d4fbea6a1373fb127ec3e60d9503e00000000769e7a3f000080bfa7c2753f093900be093980bea7c2753f093900be093980be5a9a353ffc89eb3e713d813e00000000c4b5773f000080bfee43733f96eb30beb1b084beee43733f96eb30beb1b084bee426353f44b3e33e54b7863e00000000c3fa763f000080bf45ea713f26f403be2df299be45ea713f26f403be2df299bee472333fbbf0ea3e833d9b3e00000000f1f2733f000080bf0d206d3f078007beb6aab4be0d206d3f078007beb6aab4be902b313ffd5eea3e0645b63e00000000963a6f3f000080bf4b4c673f60c70abe102bd0be4b4c673f60c70abe102bd0be7ac52e3f30d8e93e521bd23e00000000b073693f000080bf0e5c603f67b30dbe012becbe0e5c603f67b30dbe012becbeb6422c3f0160e93e5076ee3e00000000008a623f000080bfa043583f152d10be542904bfa043583f152d10be542904bf6ca6293f27fae83ec07d053f00000000ae705a3f000080bfe7004f3fc11e12bec11e12bfe7004f3fc11e12bec11e12bfd5f4263f23aae83e83a1133f00000000cf24513f000080bf429d443ff27513bec6bf1fbf429d443ff27513bec6bf1fbf2e33243ff372e83e856e213f0000000068af463f000080bf662e393f1f2514befad52cbf662e393f1f2514befad52cbf8767213fc656e83e69ac2e3f000000006f263b3f000080bff9d52c3f1f2514be662e39bff9d52c3f1f2514be662e39bf7a981e3fc656e83e70263b3f0000000069ac2e3f000080bfc6bf1f3ff27513be429d44bfc6bf1f3ff27513be429d44bfd2cc1b3ff372e83e68af463f00000000856e213f000080bfc11e123fc11e12bee7004fbfc11e123fc11e12bee7004fbf2b0b193f23aae83ecf24513f0000000083a1133f000080bf876f083fad7346bee8da52bf876f083fad7346bee8da52bf3866173fdb36e03e12ee563f0000000084120b3f000080bf2016f43ee64443be83ad5bbf2016f43ee64443be83ad5bbf3ba9143fffbae03ec5c85f3f0000000031a6f83e000080bf5551d73ebd643fbea14763bf5551d73ebd643fbea14763bf2206123fcb5be13e5d5b673f00000000222edb3e000080bfbaf4ba3ebaf43abee8b169bfbaf4ba3ebaf43abee8b169bfd4800f3fc313e23ea6b06d3f00000000ec26be3e000080bf07549f3ee41636be0bfe6ebf07549f3ee41636be0bfe6ebffb1b0d3f58dde23ee9dc723f000000009be8a13e000080bfb0b0843e96eb30beee4373bfb0b0843e96eb30beee4373bf1cd90a3f44b3e33ec3fa763f0000000053b7863e000080bf0574563e04902bbe069f76bf0574563e04902bbe069f76bfbcb8083fca90e43e3b287a3f000000002887593e000080bf5f1d263e5f1d26be0f2c79bf5f1d263e5f1d26be0f2c79bf90ba063fd671e53e50847c3f000000003558283e000080bfcdfcf03d89a820be55077bbfcdfcf03d89a820be55077bbfb1dd043f0953e63e2d2d7e3f000000006902f43d000080bf2c429b3d2c421bbe874b7cbf2c429b3d2c421bbe874b7cbfc220033fb631e73ef73e7f3f000000000e139d3d000080bf19f7153d19f715befa107dbf19f7153d19f715befa107dbf2282013fd00be83e19d37f3f000000008a99173d000080bf00000000c3d010be546d7dbf00000000c3d010be546d7dbf0000003fd7dfe83e0000803f0000000000000000000080bf14f715bd19f715befa107dbf14f715bd19f715befa107dbfbbfbfc3ed00be83e19d37f3f00000000859917bd000080bf30429bbd2c421bbe874b7cbf30429bbd2c421bbe874b7cbf7bbef93eb631e73ef73e7f3f0000000012139dbd000080bfcefcf0bd89a820be55077bbfcefcf0bd89a820be55077bbf9e44f63e0953e63e2d2d7e3f000000006a02f4bd000080bf5f1d26be5f1d26be0f2c79bf5f1d26be5f1d26be0f2c79bfdf8af23ed671e53e50847c3f00000000355828be000080bf037456be04902bbe069f76bf037456be04902bbe069f76bf888eee3eca90e43e3b287a3f00000000268759be000080bf67905dbe67905dbe71b873bf67905dbe67905dbe71b873bf1ccaed3eb474dc3e4ea2793f00000000a4f062be000080bf2c1c89be4b8464be4ff16fbf2c1c89be4b8464be4ff16fbf7552e93e5352db3e6f26763f000000003ea88cbe000080bf5b9ea4be5d2b6bbe5d2b6bbf5b9ea4be5d2b6bbe5d2b6bbfb590e43e0c3cda3eb3a0713f00000000b123a9be000080bf5916c1beef5b71be894a65bf5916c1beef5b71be894a65bf8486df3ebc38d93e4cf06b3f0000000069afc6be000080bfad37debe89e876beae375ebfad37debe89e876beae375ebff637da3eed4fd83e2ef9643f000000002df9e4be000080bf5fa2fbbe5fa27bbe9ee355bf5fa2fbbe5fa27bbe9ee355bfd5abd43e6789d73eb9a75c3f0000000012cc01bf000080bf06730cbfc55c7fbe374a4cbf06730cbfc55c7fbe374a4cbfd4ebce3ea0ecd63e6af4523f00000000090811bf000080bfdec31abf8ff880bed77441bfdec31abf8ff880bed77441bf6404c93e1080d63e05e7473f0000000003ec1fbf000080bf148528bf72a181be9f7b35bf148528bf72a181be9f7b35bf4504c33e8148d63e5a983b3f000000000b322ebf000080bf9f7b35bf72a181be148528bf9f7b35bf72a181be148528bfbbfbbc3e8148d63e0b322e3f000000005a983bbf000080bfd77441bf8ff880bedfc31abfd77441bf8ff880bedfc31abf9bfbb63e1080d63e03ec1f3f0000000004e747bf000080bf374a4cbfc55c7fbe06730cbf374a4cbfc55c7fbe06730cbf2c14b13ea0ecd63e0908113f000000006af452bf000080bf9ee355bf5fa27bbe5fa2fbbe9ee355bf5fa27bbe5fa2fbbe2b54ab3e6789d73e12cc013f00000000b9a75cbf000080bfae375ebf89e876beae37debeae375ebf89e876beae37debe09c8a53eed4fd83e2ef9e43e000000002ef964bf000080bf894a65bfef5b71be5916c1be894a65bfef5b71be5916c1be7a79a03ebc38d93e69afc63e000000004cf06bbf000080bf5d2b6bbf5d2b6bbe5a9ea4be5d2b6bbf5d2b6bbe5a9ea4be4b6f9b3e0c3cda3eb023a93e00000000b3a071bf000080bf4ff16fbf4b8464be2d1c89be4ff16fbf4b8464be2d1c89be8aad963e5352db3e3fa88c3e000000006f2676bf000080bf71b873bf67905dbe67905dbe71b873bf67905dbe67905dbee435923eb474dc3ea4f0623e000000004ea279bf000080bfee4373bfb0b084be96eb30beee4373bfb0b084be96eb30bee1a78e3e9646d53ebf2d373e00000000e6de7bbf000080bfa7c275bf093980be093900bea7c275bf093980be093900beb1918a3e0cbfd63e7d71043e0000000086d97dbf000080bf7f8c77bf7f8c77be5508a5bd7f8c77bf7f8c77be5508a5bd63c6863e0935d83ec013aa3d000000009f1d7fbf000080bf39be78bf18cb6ebe10321fbd39be78bf18cb6ebe10321fbdfc41833e46a4d93e87b5233d00000000a2cb7fbf000080bfb37179bf924166be00000000b37179bf924166be000000000000803e9c09db3e0000008000000000000080bf000080bf39be78bf18cb6ebe18321f3d39be78bf18cb6ebe18321f3d077c793e46a4d93e8fb523bd00000000a2cb7fbf000080bf7f8c77bf7f8c77be5408a53d7f8c77bf7f8c77be5408a53d3873723e0935d83ebf13aabd000000009f1d7fbf000080bfa7c275bf093980be0b39003ea7c275bf093980be0b39003e9ddc6a3e0cbfd63e807104be0000000086d97dbf000080bfee4373bfb0b084be95eb303eee4373bfb0b084be95eb303e3db0623e9646d53ebe2d37be00000000e6de7bbf000080bf4ff16fbf2d1c89be4d84643e4ff16fbf2d1c89be4d84643ee0e7593e3ad1d33ef02d6dbe00000000d40979bf000080bfc7aa6bbf77668dbe77668d3ec7aa6bbf77668dbe77668d3efb7f503eef65d23e431f93be000000001b3475bf000080bf2c5166bfa37691be14b5a93e2c5166bfa37691be14b5a93eb478463e060dd13e4c00b1be00000000413770bf000080bfc5c85fbf833095be59ebc63ec5c85fbf833095be59ebc63e0cd73b3efdcfcf3e61f1cfbe000000008eef69bf000080bf74fc57bff77598bef3b0e43e74fc57bff77598bef3b0e43ed4a5303e0ab9ce3efa8eefbe00000000ec3f62bf000080bf17e14ebfd1289bbeae4c013f17e14ebfd1289bbeae4c013f64f6243e7cd2cd3e03ae07bf000000006b1659bf000080bfb37844bf5c2d9dbe3f14103fb37844bf5c2d9dbe3f14103fc2e0183ed625cd3e9c6317bf000000008f704ebf000080bfa8d438bf226d9ebe216d1e3fa8d438bf226d9ebe216d1e3f0a830c3ed7bacc3e439a26bf00000000a55e42bf000080bf38162cbf6fd99ebe38162c3f38162cbf6fd99ebe38162c3f0000003e9596cc3ef30435bf00000000f30435bf000080bf226d1ebf226d9ebea7d4383f226d1ebf226d9ebea7d4383febf9e63dd7bacc3ea45e42bf00000000449a26bf000080bf3f1410bf5c2d9dbeb378443f3f1410bf5c2d9dbeb378443f7a3ece3dd625cd3e8f704ebf000000009c6317bf000080bfae4c01bfd0289bbe16e14e3fae4c01bfd0289bbe16e14e3f3813b63d7cd2cd3e6a1659bf0000000003ae07bf000080bff3b0e4bef77598be74fc573ff3b0e4bef77598be74fc573f58b49e3d0ab9ce3eec3f62bf00000000fa8eefbe000080bf5aebc6be833095bec5c85f3f5aebc6be833095bec5c85f3fe751883dfdcfcf3e8eef69bf0000000062f1cfbe000080bf14b5a9bea37691be2c51663f14b5a9bea37691be2c51663f2d1d663d060dd13e413770bf000000004c00b1be000080bf77668dbe77668dbec7aa6b3f77668dbe77668dbec7aa6b3f12003e3def65d23e1b3475bf00000000431f93be000080bf4b8464be2d1c89be4ff16f3f4b8464be2d1c89be4ff16f3f7a60183d3ad1d33ed40979bf00000000ee2d6dbe000080bf96eb30beb0b084beee43733f96eb30beb0b084beee43733f147eea3c9646d53ee6de7bbf00000000bf2d37be000080bf093900be093980bea7c2753f093900be093980bea7c2753f171ba93c0cbfd63e86d97dbf000000007d7104be000080bf5508a5bd7f8c77be7f8c773f5508a5bd7f8c77be7f8c773f73cc583c0935d83e9f1d7fbf00000000c013aabd000080bf10321fbd18cb6ebe39be783f10321fbd18cb6ebe39be783f157fd03b46a4d93ea2cb7fbf0000000087b523bd000080bf00000000924166beb371793f00000000924166beb371793f000000809c09db3e000080bf0000000000000000000080bff3971abdf03d41beeb367b3ff3971abdf03d41beeb367b3f417cc83b1e0fe13e94cf7fbf000000000c6c1dbd000080bf000000009b753abe5eb87b3f000000009b753abe5eb87b3f000000805728e23e000080bf0000000000000000000080bf912aa0bd353548be83427a3f912aa0bd353548be83427a3f0b2a503ceaeddf3e492f7fbf000000007651a3bd000080bf67c3f8bd814d4fbe67c3783f67c3f8bd814d4fbe67c3783f3a22a23cf1c6de3eec057ebf00000000ec05febd000080bf04902bbe057456be069f763f04902bbe057456be069f763f7d80e03c3a9ddd3ed6367cbf000000000f742fbe000080bf67905dbe67905dbe71b8733f67905dbe67905dbe71b8733f21af113db474dc3e4ea279bf00000000a4f062be000080bf2d1c89be4b8464be4ff16f3f2d1c89be4b8464be4ff16f3f556c353d5352db3e6f2676bf000000003fa88cbe000080bf5a9ea4be5d2b6bbe5d2b6b3f5a9ea4be5d2b6bbe5d2b6b3f547a5b3d0c3cda3eb3a071bf00000000b023a9be000080bf5916c1beef5b71be894a653f5916c1beef5b71be894a653fece5813dbc38d93e4cf06bbf0000000069afc6be000080bfae37debe89e876beae375e3fae37debe89e876beae375e3f2920973ded4fd83e2ef964bf000000002ef9e4be000080bf5fa2fbbe5fa27bbe9ee3553f5fa2fbbe5fa27bbe9ee3553fa950ad3d6789d73eb9a75cbf0000000012cc01bf000080bf06730cbfc55c7fbe374a4c3f06730cbfc55c7fbe374a4c3fae50c43da0ecd63e6af452bf00000000090811bf000080bfdfc31abf8ff880bed774413fdfc31abf8ff880bed774413f6ceedb3d1080d63e04e747bf0000000003ec1fbf000080bf148528bf72a181be9f7b353f148528bf72a181be9f7b353fedeef33d8148d63e5a983bbf000000000b322ebf000080bf9f7b35bf72a181be1485283f9f7b35bf72a181be1485283f8908063e8148d63e0b322ebf000000005a983bbf000080bfd77441bf8ff880bedec31a3fd77441bf8ff880bedec31a3fca08123e1080d63e03ec1fbf0000000005e747bf000080bf374a4cbfc55c7fbe06730c3f374a4cbfc55c7fbe06730c3fa9d71d3ea0ecd63e090811bf000000006af452bf000080bf9ee355bf5fa27bbe5fa2fb3e9ee355bf5fa27bbe5fa2fb3eab57293e6789d73e12cc01bf00000000b9a75cbf000080bfae375ebf89e876bead37de3eae375ebf89e876bead37de3eec6f343eed4fd83e2df9e4be000000002ef964bf000080bf894a65bfef5b71be5916c13e894a65bfef5b71be5916c13e0a0d3f3ebc38d93e69afc6be000000004cf06bbf000080bf5d2b6bbf5d2b6bbe5b9ea43e5d2b6bbf5d2b6bbe5b9ea43e6a21493e0c3cda3eb123a9be00000000b3a071bf000080bf4ff16fbf4b8464be2c1c893e4ff16fbf4b8464be2c1c893eeba4523e5352db3e3ea88cbe000000006f2676bf000080bf71b873bf67905dbe67905d3e71b873bf67905dbe67905d3e37945b3eb474dc3ea4f062be000000004ea279bf000080bf069f76bf057456be02902b3e069f76bf057456be02902b3ef1ef633e3a9ddd3e0d742fbe00000000d6367cbf000080bf67c378bf814d4fbe66c3f83d67c378bf814d4fbe66c3f83db8bb6b3ef1c6de3eeb05febd00000000ec057ebf000080bf83427abf353548be942aa03d83427abf353548be942aa03d5ffd723eeaeddf3e7951a3bd00000000492f7fbf000080bfeb367bbff03d41beed971a3deb367bbff03d41beed971a3d1ebc793e1e0fe13e066c1dbd0000000094cf7fbf000080bf5eb87bbf9b753abe000000005eb87bbf9b753abe000000000000803e5728e23e0000008000000000000080bf000080bfeb367bbff03d41bef3971abdeb367bbff03d41bef3971abdf121833e1e0fe13e0c6c1d3d0000000094cf7fbf000080bf83427abf353548be912aa0bd83427abf353548be912aa0bd5081863eeaeddf3e7651a33d00000000492f7fbf000080bf67c378bf814d4fbe67c3f8bd67c378bf814d4fbe67c3f8bd23228a3ef1c6de3eec05fe3d00000000ec057ebf000080bf069f76bf057456be04902bbe069f76bf057456be04902bbe08088e3e3a9ddd3e0f742f3e00000000d6367cbf000080bf55077bbf89a820becefcf03d55077bbf89a820becefcf03d3e896c3e0953e63e6a02f4bd000000002d2d7ebf000080bf874b7cbf2c421bbe30429b3d874b7cbf2c421bbe30429b3df57c733eb631e73e12139dbd00000000f73e7fbf000080bffa107dbf19f715be14f7153dfa107dbf19f715be14f7153d77f7793ed00be83e859917bd0000000019d37fbf000080bf546d7dbfc3d010be00000000546d7dbfc3d010be000000000000803ed7dfe83e0000008000000000000080bf000080bffa107dbf19f715be19f715bdfa107dbf19f715be19f715bd4404833ed00be83e8a99173d0000000019d37fbf000080bf874b7cbf2c421bbe2c429bbd874b7cbf2c421bbe2c429bbd8541863eb631e73e0e139d3d00000000f73e7fbf000080bf55077bbf89a820becdfcf0bd55077bbf89a820becdfcf0bd60bb893e0953e63e6902f43d000000002d2d7ebf000080bf0f2c79bf5f1d26be5f1d26be0f2c79bf5f1d26be5f1d26be20758d3ed671e53e3558283e0000000050847cbf000080bf069f76bf04902bbe057456be069f76bf04902bbe057456be7871913eca90e43e2887593e000000003b287abf000080bfee4373bf96eb30beb0b084beee4373bf96eb30beb0b084be38b2953e44b3e33e53b7863e00000000c3fa76bf000080bf0bfe6ebfe41636be07549fbe0bfe6ebfe41636be07549fbef6379a3e58dde23e9be8a13e00000000e9dc72bf000080bfe8b169bfbaf43abebaf4babee8b169bfbaf43abebaf4babea7019f3ec313e23eec26be3e00000000a6b06dbf000080bfa14763bfbd643fbe5551d7bea14763bfbd643fbe5551d7be420ca43ecb5be13e222edb3e000000005d5b67bf000080bf83ad5bbfe64443be2016f4be83ad5bbfe64443be2016f4be7652a93effbae03e31a6f83e00000000c5c85fbf000080bfe8da52bfad7346be876f08bfe8da52bfad7346be876f08bf6eccae3edb36e03e84120b3f0000000012ee56bf000080bfabd248bfabd248be009e16bfabd248bfabd248be009e16bfec6fb43e5cd4df3e9999193f00000000cdcc4cbf000080bfe2a43dbf7a494abeb35b24bfe2a43dbf7a494abeb35b24bf7930ba3e8497df3e87a9273f00000000d77441bf000080bf386f31bf40c84abe386f31bf386f31bf40c84abe386f31bf0000c03eef82df3ef304353f00000000f30435bf000080bfb35b24bf7a494abee2a43dbfb35b24bf7a494abee2a43dbf87cfc53e8497df3ed774413f0000000087a927bf000080bfff9d16bfabd248beabd248bfff9d16bfabd248beabd248bf1590cb3e5cd4df3ecdcc4c3f00000000999919bf000080bf876f08bfad7346bee8da52bf876f08bfad7346bee8da52bf9133d13edb36e03e12ee563f0000000084120bbf000080bf2016f4bee64443be83ad5bbf2016f4bee64443be83ad5bbf8aadd63effbae03ec5c85f3f0000000031a6f8be000080bf5551d7bebc643fbe9f4763bf5551d7bebc643fbe9f4763bfbcf3db3ecc5be13e5c5b673f00000000232edbbe000080bfb9f4babebaf43abee8b169bfb9f4babebaf43abee8b169bf59fee03ec313e23ea6b06d3f00000000eb26bebe000080bf07549fbee41636be0bfe6ebf07549fbee41636be0bfe6ebf0ac8e53e58dde23ee9dc723f000000009be8a1be000080bfb1b084be96eb30beee4373bfb1b084be96eb30beee4373bfc84dea3e44b3e33ec3fa763f0000000054b786be000080bfc11e12bfc11e12bee7004fbfc11e12bfc11e12bee7004fbfaae9cd3e23aae83ecf24513f0000000083a113bf000080bfc6bf1fbff27513be429d44bfc6bf1fbff27513be429d44bf5c66c83ef372e83e68af463f00000000856e21bf000080bf542904bf152d10bea04358bf542904bf152d10bea04358bfd84cd33e27fae83eae705a3f00000000c07d05bf000080bf012becbe67b30dbe0e5c60bf012becbe67b30dbe0e5c60bf6c85d83e0160e93e008a623f000000005076eebe000080bf102bd0be60c70abe4b4c67bf102bd0be60c70abe4b4c67bff28add3e30d8e93eb073693f00000000521bd2be000080bfb6aab4be078007be0d206dbfb6aab4be078007be0d206dbf1f57e23efd5eea3e963a6f3f000000000645b6be000080bf2df299be26f403be45ea71bf2df299be26f403be45ea71bfc8e5e63ebbf0ea3ef1f2733f00000000833d9bbe000080bf093980be093900bea7c275bf093980be093900bea7c275bfb334eb3efc89eb3ec4b5773f00000000713d81be000080bf7e4d4fbe67c3f8bd67c378bf7e4d4fbe67c3f8bd67c378bf4c43ef3eb127ec3e769e7a3f0000000060d950be000080bf8aa820becdfcf0bd55077bbf8aa820becdfcf0bd55077bbf5412f33e3ec7ec3ee8c87c3f0000000044c821be000080bf1a39e9bd1a39e9bd87a87cbf1a39e9bd1a39e9bd87a87cbf96a3f63e7d66ed3e0c507e3f000000000bc0eabd000080bf6c5e96bda78de1bd5cbf7dbf6c5e96bda78de1bd5cbf7dbf93f9f93eba03ee3ef04c7f3f00000000064a97bd000080bf975c11bddb0adabdff617ebf975c11bddb0adabdff617ebf4a17fd3ea49dee3e3ed67f3f000000004d3112bd000080bf00000000cabcd2bd1fa47ebf00000000cabcd2bd1fa47ebf0000003f4833ef3e0000803f0000000000000000000080bf925c113ddb0adabdff617ebf925c113ddb0adabdff617ebf5b74013fa49dee3e3ed67f3f000000004831123d000080bf6f5e963da78de1bd5cbf7dbf6f5e963da78de1bd5cbf7dbf3603033fba03ee3ef04c7f3f00000000094a973d000080bf1a39e93d1a39e9bd87a87cbf1a39e93d1a39e9bd87a87cbf35ae043f7d66ed3e0c507e3f000000000bc0ea3d000080bf89a8203ecdfcf0bd55077bbf89a8203ecdfcf0bd55077bbfd676063f3ec7ec3ee8c87c3f0000000043c8213e000080bf814d4f3e67c3f8bd67c378bf814d4f3e67c3f8bd67c378bf5a5e083fb127ec3e769e7a3f0000000063d9503e000080bf0939803e093900bea7c275bf0939803e093900bea7c275bfa6650a3ffc89eb3ec4b5773f00000000713d813e000080bf2cf2993e26f403be45ea71bf2cf2993e26f403be45ea71bf1c8d0c3fbbf0ea3ef1f2733f00000000823d9b3e000080bfb4aab43e078007be0d206dbfb4aab43e078007be0d206dbf70d40e3ffd5eea3e973a6f3f000000000545b63e000080bf102bd03e60c70abe4b4c67bf102bd03e60c70abe4b4c67bf873a113f30d8e93eb073693f00000000521bd23e000080bf012bec3e67b30dbe0e5c60bf012bec3e67b30dbe0e5c60bf4abd133f0160e93e008a623f000000005076ee3e000080bf5329043f152d10bea04358bf5329043f152d10bea04358bf9459163f27fae83eae705a3f00000000bf7d053f000080bf7f8c773e5508a5bd7f8c77bf7f8c773e5508a5bd7f8c77bf38fb093f56daf23e425b783f00000000425b783e000080bf3535483e912aa0bd83427abf3535483e912aa0bd83427abfe90a083fc93df33e56077b3f00000000abd2483e000080bfc48f943ee0c8a9bdc21074bfc48f943ee0c8a9bdc21074bf90090c3f3379f23e94e8743f000000002213953e000080bf5c56ae3e5c56aebdbeb66fbf5c56ae3e5c56aebdbeb66fbfd0350e3f201cf23e4e96703f00000000f3f8ae3e000080bf19ebc83e1698b2bd9d676abf19ebc83e1698b2bd9d676abf2d7f103f16c5f13e164d6b3f00000000caafc93e000080bf1c10e43e4a73b6bd1c1064bf1c10e43e4a73b6bd1c1064bf05e4123f3876f13e2ef9643f000000002ef9e43e000080bf0379ff3e5fccb9bdb1a25cbf0379ff3e5fccb9bdb1a25cbfd261153fbc31f13e948c5d3f00000000ea43003f000080bf77660d3f9f88bcbdb31954bf77660d3f9f88bcbdb31954bf17f5173fc7f9f03e4001553f00000000d5000e3f000080bf24d51a3f2c90bebd2f794abf24d51a3f2c90bebd2f794abf70991a3f41d0f03e095b4b3f00000000da811b3f000080bf10d6273f12d0bfbd12d03fbf10d6273f12d0bfbd12d03fbfac491d3fb0b6f03edea8403f00000000c293283f000080bf5a38343f1c3cc0bd5a3834bf5a38343f1c3cc0bd5a3834bf0000203f0daef03ef404353f00000000f404353f000080bf12d03f3f12d0bfbd0fd627bf12d03f3f12d0bfbd0fd627bf55b6223fb0b6f03ec293283f00000000dea8403f000080bf2f794a3f2c90bebd24d51abf2f794a3f2c90bebd24d51abf9066253f41d0f03eda811b3f00000000095b4b3f000080bfb319543f9f88bcbd77660dbfb319543f9f88bcbd77660dbfe90a283fc7f9f03ed5000e3f000000004001553f000080bfb1a25c3f5fccb9bd0379ffbeb1a25c3f5fccb9bd0379ffbe2f9e2a3fbc31f13eea43003f00000000948c5d3f000080bf1c10643f4a73b6bd1b10e4be1c10643f4a73b6bd1b10e4befc1b2d3f3876f13e2df9e43e000000002ef9643f000080bf9d676a3f1698b2bd19ebc8be9d676a3f1698b2bd19ebc8bed4802f3f16c5f13ecaafc93e00000000164d6b3f000080bfbeb66f3f5c56aebd5b56aebebeb66f3f5c56aebd5b56aebe30ca313f201cf23ef2f8ae3e000000004e96703f000080bfc210743fe0c8a9bdc58f94bec210743fe0c8a9bdc58f94be71f6333f3379f23e2313953e0000000094e8743f000080bf7f8c773f5508a5bd7e8c77be7f8c773f5508a5bd7e8c77bec804363f56daf23e415b783e00000000425b783f000080bf83427a3f912aa0bd373548be83427a3f912aa0bd373548be17f5373fc93df33eadd2483e0000000056077b3f000080bf55077b3fcdfcf0bd8aa820be55077b3fcdfcf0bd8aa820be2a89393f3ec7ec3e44c8213e00000000e8c87c3f000080bf87a87c3f1a39e9bd1a39e9bd87a87c3f1a39e9bd1a39e9bdcc513b3f7d66ed3e0bc0ea3d000000000c507e3f000080bf5cbf7d3fa78de1bd6c5e96bd5cbf7d3fa78de1bd6c5e96bdcafc3c3fba03ee3e064a973d00000000f04c7f3f000080bfff617e3fdb0adabd975c11bdff617e3fdb0adabd975c11bda58b3e3fa49dee3e4d31123d000000003ed67f3f000080bf1fa47e3fcabcd2bd000000001fa47e3fcabcd2bd000000000000403f4833ef3e00000080000000000000803f000080bfff617e3fdb0adabd925c113dff617e3fdb0adabd925c113d5b74413fa49dee3e483112bd000000003ed67f3f000080bf5cbf7d3fa78de1bd6f5e963d5cbf7d3fa78de1bd6f5e963d3603433fba03ee3e094a97bd00000000f04c7f3f000080bf87a87c3f1a39e9bd1a39e93d87a87c3f1a39e9bd1a39e93d35ae443f7d66ed3e0bc0eabd000000000c507e3f000080bf55077b3fcdfcf0bd89a8203e55077b3fcdfcf0bd89a8203ed676463f3ec7ec3e43c821be00000000e8c87c3f000080bf5cbf7d3f6f5e96bdab8de1bd5cbf7d3f6f5e96bdab8de1bdce7d3b3ff405f43ef029e23d000000002a6f7e3f000080bf2cb47e3f878b91bd868b91bd2cb47e3f878b91bd868b91bd3c183d3f7b68f43ef8e9913d0000000074597f3f000080bf0d3e7f3fc9d28cbdd1d20cbd0d3e7f3fc9d28cbdd1d20cbd7a983e3fe7c8f43e58280d3d0000000012d97f3f000080bfd96e7f3f1e3b88bd00000000d96e7f3f1e3b88bd000000000000403fad26f53e00000080000000000000803f000080bf0d3e7f3fc9d28cbdc9d20c3d0d3e7f3fc9d28cbdc9d20c3d8767413fe7c8f43e50280dbd0000000012d97f3f000080bf2cb47e3f878b91bd878b913d2cb47e3f878b91bd878b913dc4e7423f7b68f43ef9e991bd0000000074597f3f000080bf5cbf7d3f6f5e96bda78de13d5cbf7d3f6f5e96bda78de13d3282443ff405f43eec29e2bd000000002a6f7e3f000080bf874b7c3f2c429bbd2c421b3e874b7c3f2c429bbd2c421b3e3138463f10a2f33ee1b41bbe00000000ee057d3f000080bf83427a3f912aa0bd3535483e83427a3f912aa0bd3535483ee90a483fc93df33eabd248be0000000056077b3f000080bfff617e3f925c11bde00adabdff617e3f925c11bde00adabdb5a63b3f0c37fa3e0f2eda3d000000000b8b7e3f000080bffa107d3f19f715bd19f715befa107d3f19f715bd19f715beeb013a3f2008fa3edb10163e00000000713c7d3f000080bf874b7c3f2c429bbd2b421bbe874b7c3f2c429bbd2b421bbed0c7393f10a2f33ee0b41b3e00000000ee057d3f000080bfeb367b3ff3971abdf23d41beeb367b3ff3971abdf23d41be5a42383ff3d8f93e3861413e00000000c6647b3f000080bf39be783f10321fbd18cb6ebe39be783f10321fbd18cb6ebe2e67363f0aaaf93e52f96e3e0000000060ee783f000080bf4990753f86b523bdd73e8fbe4990753f86b523bdd73e8fbeec6f343f077cf93e2a5c8f3e000000008fc2753f000080bf6a96713f980f28bd980fa8be6a96713f980f28bd980fa8be925c323faa4ff93edb33a83e000000008bca713f000080bf0abb6c3ff02a2cbd4fb0c1be0abb6c3ff02a2cbd4fb0c1beb02d303fcc25f93e2bdcc13e00000000a5f06c3f000080bf42eb663f32f02fbd3fecdbbe42eb663f32f02fbd3fecdbbe8ae42d3f5bfff83e4120dc3e00000000de21673f000080bfa818603fed4633bd8781f6bea818603fed4633bd8781f6be28832b3f51ddf83e0fbef63e00000000af4f603f000080bf2e3b583fe41636bd2b9108bf2e3b583fe41636bd2b9108bf660c293fa4c0f83ec4b3083f00000000f671583f000080bfde524f3fa94938bddabb15bfde524f3fa94938bddabb15bff483263f3aaaf83eb6e2153f00000000ac884f3f000080bf2569453f5fcc39bdd39222bf2569453f5fcc39bdd39222bf42ee233fd39af83eb6bd223f00000000389d453f000080bf54913a3f54913abd3fe82ebf54913a3f54913abd3fe82ebf5950213ffb92f83ec4162f3f00000000f3c23a3f000080bf3fe82e3f54913abd54913abf3fe82e3f54913abd54913abfa8af1e3ffb92f83ef3c23a3f00000000c4162f3f000080bfd392223f5fcc39bd256945bfd392223f5fcc39bd256945bfbe111c3fd39af83e389d453f00000000b6bd223f000080bfdabb153faa4938bde0524fbfdabb153faa4938bde0524fbf0c7c193f3aaaf83ead884f3f00000000b5e2153f000080bf2b91083fe41636bd2e3b58bf2b91083fe41636bd2e3b58bf9af3163fa4c0f83ef671583f00000000c4b3083f000080bf8681f63eed4633bda81860bf8681f63eed4633bda81860bfd87c143f51ddf83eb04f603f000000000fbef63e000080bf3fecdb3e32f02fbd42eb66bf3fecdb3e32f02fbd42eb66bf761b123f5bfff83ede21673f000000004120dc3e000080bf4eb0c13ef02a2cbd0abb6cbf4eb0c13ef02a2cbd0abb6cbf50d20f3fcc25f93ea5f06c3f000000002adcc13e000080bf980fa83e980f28bd6a9671bf980fa83e980f28bd6a9671bf6ea30d3faa4ff93e8bca713f00000000db33a83e000080bfd53e8f3e86b523bd499075bfd53e8f3e86b523bd499075bf14900b3f077cf93e90c2753f00000000295c8f3e000080bf18cb6e3e10321fbd39be78bf18cb6e3e10321fbd39be78bfd398093f0aaaf93e60ee783f0000000052f96e3e000080bff03d413ef3971abdeb367bbff03d413ef3971abdeb367bbfa6bd073ff3d8f93ec6647b3f000000003661413e000080bf2c421b3e2c429bbd874b7cbf2c421b3e2c429bbd874b7cbf3138063f10a2f33eee057d3f00000000e1b41b3e000080bfa78de13d6f5e96bd5cbf7dbfa78de13d6f5e96bd5cbf7dbf3282043ff405f43e2a6f7e3f00000000ec29e23d000080bf878b913d878b91bd2cb47ebf878b913d878b91bd2cb47ebfc4e7023f7b68f43e74597f3f00000000f9e9913d000080bfc9d20c3dc9d28cbd0d3e7fbfc9d20c3dc9d28cbd0d3e7fbf8667013fe7c8f43e12d97f3f0000000050280d3d000080bf000000001e3b88bdd96e7fbf000000001e3b88bdd96e7fbf0000003fad26f53e0000803f0000000000000000000080bfd1d20cbdc9d28cbd0d3e7fbfd1d20cbdc9d28cbd0d3e7fbff330fd3ee7c8f43e12d97f3f0000000058280dbd000080bf868b91bd878b91bd2cb47ebf868b91bd878b91bd2cb47ebf7830fa3e7b68f43e74597f3f00000000f8e991bd000080bfab8de1bd6f5e96bd5cbf7dbfab8de1bd6f5e96bd5cbf7dbf9afbf63ef405f43e2a6f7e3f00000000f029e2bd000080bf2b421bbe2c429bbd874b7cbf2b421bbe2c429bbd874b7cbf9e8ff33e10a2f33eee057d3f00000000e0b41bbe000080bf373548be912aa0bd83427abf373548be912aa0bd83427abf2eeaef3ec93df33e56077b3f00000000add248be000080bf7e8c77be5508a5bd7f8c77bf7e8c77be5508a5bd7f8c77bf8f09ec3e56daf23e425b783f00000000415b78be000080bfc58f94bee0c8a9bdc21074bfc58f94bee0c8a9bdc21074bfe1ece73e3379f23e94e8743f00000000231395be000080bf5b56aebe5c56aebdbeb66fbf5b56aebe5c56aebdbeb66fbf5f94e33e201cf23e4e96703f00000000f2f8aebe000080bf19ebc8be1698b2bd9d676abf19ebc8be1698b2bd9d676abfa601df3e16c5f13e164d6b3f00000000caafc9be000080bf1b10e4be4a73b6bd1c1064bf1b10e4be4a73b6bd1c1064bff637da3e3876f13e2ef9643f000000002df9e4be000080bf0379ffbe5fccb9bdb1a25cbf0379ffbe5fccb9bdb1a25cbf5d3cd53ebc31f13e948c5d3f00000000ea4300bf000080bf77660dbf9f88bcbdb31954bf77660dbf9f88bcbdb31954bfd215d03ec7f9f03e4001553f00000000d5000ebf000080bf24d51abf2c90bebd2f794abf24d51abf2c90bebd2f794abf1fcdca3e41d0f03e095b4b3f00000000da811bbf000080bf0fd627bf12d0bfbd12d03fbf0fd627bf12d0bfbd12d03fbfa96cc53eb0b6f03edea8403f00000000c29328bf000080bffad52cbf1f2514be662e39bffad52cbf1f2514be662e39bf0dcfc23ec656e83e6f263b3f0000000069ac2ebf000080bf662e39bf1f2514bef9d52cbf662e39bf1f2514bef9d52cbff230bd3ec656e83e69ac2e3f0000000070263bbf000080bf429d44bff27513bec6bf1fbf429d44bff27513bec6bf1fbfa399b73ef372e83e856e213f0000000068af46bf000080bfe7004fbfc11e12bec11e12bfe7004fbfc11e12bec11e12bf5616b23e23aae83e83a1133f00000000cf2451bf000080bfa04358bf152d10be532904bfa04358bf152d10be532904bf27b3ac3e27fae83ebf7d053f00000000ae705abf000080bf0e5c60bf67b30dbe012becbe0e5c60bf67b30dbe012becbe937aa73e0160e93e5076ee3e00000000008a62bf000080bf4b4c67bf60c70abe102bd0be4b4c67bf60c70abe102bd0be0d75a23e30d8e93e521bd23e00000000b07369bf000080bf0d206dbf078007beb4aab4be0d206dbf078007beb4aab4bee0a89d3efd5eea3e0545b63e00000000973a6fbf000080bf45ea71bf26f403be2cf299be45ea71bf26f403be2cf299be371a993ebbf0ea3e823d9b3e00000000f1f273bf000080bfa7c275bf093900be093980bea7c275bf093900be093980be4ccb943efc89eb3e713d813e00000000c4b577bf000080bf67c378bf67c3f8bd814d4fbe67c378bf67c3f8bd814d4fbeb4bc903eb127ec3e63d9503e00000000769e7abf000080bf55077bbfcdfcf0bd89a820be55077bbfcdfcf0bd89a820beabed8c3e3ec7ec3e43c8213e00000000e8c87cbf000080bf87a87cbf1a39e9bd1a39e9bd87a87cbf1a39e9bd1a39e9bd695c893e7d66ed3e0bc0ea3d000000000c507ebf000080bf5cbf7dbfa78de1bd6f5e96bd5cbf7dbfa78de1bd6f5e96bd6c06863eba03ee3e094a973d00000000f04c7fbf000080bfff617ebfdb0adabd925c11bdff617ebfdb0adabd925c11bdb6e8823ea49dee3e4831123d000000003ed67fbf000080bf1fa47ebfcabcd2bd000000001fa47ebfcabcd2bd000000000000803e4833ef3e0000008000000000000080bf000080bfff617ebfdb0adabd975c113dff617ebfdb0adabd975c113d942e7a3ea49dee3e4d3112bd000000003ed67fbf000080bf5cbf7dbfa78de1bd6c5e963d5cbf7dbfa78de1bd6c5e963d26f3733eba03ee3e064a97bd00000000f04c7fbf000080bf87a87cbf1a39e9bd1a39e93d87a87cbf1a39e9bd1a39e93d2c476d3e7d66ed3e0bc0eabd000000000c507ebf000080bf55077bbfcdfcf0bd8aa8203e55077bbfcdfcf0bd8aa8203ea924663e3ec7ec3e44c821be00000000e8c87cbf000080bf0f2c79bf5f1d26be5f1d263e0f2c79bf5f1d26be5f1d263ebf15653ed671e53e355828be0000000050847cbf000080bf069f76bf04902bbe0374563e069f76bf04902bbe0374563e111d5d3eca90e43e268759be000000003b287abf000080bfee4373bf96eb30beb1b0843eee4373bf96eb30beb1b0843e8f9b543e44b3e33e54b786be00000000c3fa76bf000080bf0bfe6ebfe41636be07549f3e0bfe6ebfe41636be07549f3e14904b3e58dde23e9be8a1be00000000e9dc72bf000080bfe8b169bfbaf43abeb9f4ba3ee8b169bfbaf43abeb9f4ba3eb3fc413ec313e23eeb26bebe00000000a6b06dbf000080bf9f4763bfbc643fbe5551d73e9f4763bfbc643fbe5551d73e79e7373ecc5be13e232edbbe000000005c5b67bf000080bf83ad5bbfe64443be2016f43e83ad5bbfe64443be2016f43e155b2d3effbae03e31a6f8be00000000c5c85fbf000080bfe8da52bfad7346be876f083fe8da52bfad7346be876f083f2267223edb36e03e84120bbf0000000012ee56bf000080bfabd248bfabd248beff9d163fabd248bfabd248beff9d163f2920173e5cd4df3e999919bf00000000cdcc4cbf000080bfe2a43dbf7a494abeb35b243fe2a43dbf7a494abeb35b243f0e9f0b3e8497df3e87a927bf00000000d77441bf000080bf386f31bf40c84abe386f313f386f31bf40c84abe386f313f0000003eef82df3ef30435bf00000000f30435bf000080bfb35b24bf7a494abee2a43d3fb35b24bf7a494abee2a43d3fe3c1e83d8497df3ed77441bf0000000087a927bf000080bf009e16bfabd248beabd2483f009e16bfabd248beabd2483faebfd13d5cd4df3ecdcc4cbf00000000999919bf000080bf876f08bfad7346bee8da523f876f08bfad7346bee8da523fbb31bb3ddb36e03e12ee56bf0000000084120bbf000080bf2016f4bee64443be83ad5b3f2016f4bee64443be83ad5b3fd549a53dffbae03ec5c85fbf0000000031a6f8be000080bf5551d7bebd643fbea147633f5551d7bebd643fbea147633f0b31903dcb5be13e5d5b67bf00000000222edbbe000080bfbaf4babebaf43abee8b1693fbaf4babebaf43abee8b1693f360d783dc313e23ea6b06dbf00000000ec26bebe000080bf07549fbee41636be0bfe6e3f07549fbee41636be0bfe6e3faebf513d58dde23ee9dc72bf000000009be8a1be000080bfb0b084be96eb30beee43733fb0b084be96eb30beee43733fc0912d3d44b3e33ec3fa76bf0000000053b786be000080bf057456be04902bbe069f763f057456be04902bbe069f763fbe8b0b3dca90e43e3b287abf00000000288759be000080bf5f1d26be5f1d26be0f2c793f5f1d26be5f1d26be0f2c793f0552d73cd671e53e50847cbf00000000355828be000080bfcdfcf0bd89a820be55077b3fcdfcf0bd89a820be55077b3f0cb69b3c0953e63e2d2d7ebf000000006902f4bd000080bf2c429bbd2c421bbe874b7c3f2c429bbd2c421bbe874b7c3fa230483cb631e73ef73e7fbf000000000e139dbd000080bf19f715bd19f715befa107d3f19f715bd19f715befa107d3f2111c13bd00be83e19d37fbf000000008a9917bd000080bf00000000c3d010be546d7d3f00000000c3d010be546d7d3f00000080d7dfe83e000080bf0000000000000000000080bf925c11bddb0adabdff617e3f925c11bddb0adabdff617e3f792dba3ba49dee3e3ed67fbf00000000483112bd000080bf00000000cabcd2bd1fa47e3f00000000cabcd2bd1fa47e3f000000804833ef3e000080bf0000000000000000000080bf6f5e96bda78de1bd5cbf7d3f6f5e96bda78de1bd5cbf7d3f92cd403cba03ee3ef04c7fbf00000000094a97bd000080bf1a39e9bd1a39e9bd87a87c3f1a39e9bd1a39e9bd87a87c3f9bc6953c7d66ed3e0c507ebf000000000bc0eabd000080bf89a820becdfcf0bd55077b3f89a820becdfcf0bd55077b3fb4dace3c3ec7ec3ee8c87cbf0000000043c821be000080bf814d4fbe67c3f8bd67c3783f814d4fbe67c3f8bd67c3783fa0e5053db127ec3e769e7abf0000000063d950be000080bf093980be093900bea7c2753f093980be093900bea7c2753f615a263dfc89eb3ec4b577bf00000000713d81be000080bf2cf299be26f403be45ea713f2cf299be26f403be45ea713fb6d1483dbbf0ea3ef1f273bf00000000823d9bbe000080bfb4aab4be078007be0d206d3fb4aab4be078007be0d206d3f02476d3dfd5eea3e973a6fbf000000000545b6be000080bf102bd0be60c70abe4b4c673f102bd0be60c70abe4b4c673f36d4893d30d8e93eb07369bf00000000521bd2be000080bf012becbe67b30dbe0e5c603f012becbe67b30dbe0e5c603f4dea9d3d0160e93e008a62bf000000005076eebe000080bf532904bf152d10bea043583f532904bf152d10bea043583f9eccb23d27fae83eae705abf00000000bf7d05bf000080bfc11e12bfc11e12bee7004f3fc11e12bfc11e12bee7004f3f5659c83d23aae83ecf2451bf0000000083a113bf000080bfc6bf1fbff27513be429d443fc6bf1fbff27513be429d443f9066de3df372e83e68af46bf00000000856e21bf000080bff9d52cbf1f2514be662e393ff9d52cbf1f2514be662e393fcbc3f43dc656e83e70263bbf0000000069ac2ebf000080bf662e39bf1f2514befad52c3f662e39bf1f2514befad52c3f199e053ec656e83e69ac2ebf000000006f263bbf000080bf429d44bff27513bec6bf1f3f429d44bff27513bec6bf1f3fb8cc103ef372e83e856e21bf0000000068af46bf000080bfe7004fbfc11e12bec11e123fe7004fbfc11e12bec11e123f54d31b3e23aae83e83a113bf00000000cf2451bf000080bfa04358bf152d10be5429043fa04358bf152d10be5429043fb099263e27fae83ec07d05bf00000000ae705abf000080bf0e5c60bf67b30dbe012bec3e0e5c60bf67b30dbe012bec3ed80a313e0160e93e5076eebe00000000008a62bf000080bf4b4c67bf60c70abe102bd03e4b4c67bf60c70abe102bd03ee5153b3e30d8e93e521bd2be00000000b07369bf000080bf0d206dbf078007beb6aab43e0d206dbf078007beb6aab43e3fae443efd5eea3e0645b6be00000000963a6fbf000080bf45ea71bf26f403be2df2993e45ea71bf26f403be2df2993e91cb4d3ebbf0ea3e833d9bbe00000000f1f273bf000080bfa7c275bf093900be0939803ea7c275bf093900be0939803e6869563efc89eb3e713d81be00000000c4b577bf000080bf67c378bf67c3f8bd7e4d4f3e67c378bf67c3f8bd7e4d4f3e99865e3eb127ec3e60d950be00000000769e7abf000080bfb1a25cbf5fccb9bd0379ff3eb1a25cbf5fccb9bd0379ff3eba782a3ebc31f13eea4300bf00000000948c5dbf000080bfb31954bf9f88bcbd77660d3fb31954bf9f88bcbd77660d3fa42b203ec7f9f03ed5000ebf00000000400155bf000080bf1c1064bf4a73b6bd1b10e43e1c1064bf4a73b6bd1b10e43eec6f343e3876f13e2df9e4be000000002ef964bf000080bf9d676abf1698b2bd19ebc83e9d676abf1698b2bd19ebc83e4d033e3e16c5f13ecaafc9be00000000164d6bbf000080bfbeb66fbf5c56aebd5b56ae3ebeb66fbf5c56aebd5b56ae3ebf28473e201cf23ef2f8aebe000000004e9670bf000080bfc21074bfe0c8a9bdc58f943ec21074bfe0c8a9bdc58f943ec2d94f3e3379f23e231395be0000000094e874bf000080bf7f8c77bf5508a5bd7e8c773e7f8c77bf5508a5bd7e8c773e1f13583e56daf23e415b78be00000000425b78bf000080bf83427abf912aa0bd3735483e83427abf912aa0bd3735483e5bd45f3ec93df33eadd248be0000000056077bbf000080bf874b7cbf2c429bbd2b421b3e874b7cbf2c429bbd2b421b3e3c1f673e10a2f33ee0b41bbe00000000ee057dbf000080bf5cbf7dbf6f5e96bdab8de13d5cbf7dbf6f5e96bdab8de13d35f76d3ef405f43ef029e2bd000000002a6f7ebf000080bf2cb47ebf878b91bd868b913d2cb47ebf878b91bd868b913df160743e7b68f43ef8e991bd0000000074597fbf000080bf0d3e7fbfc9d28cbdd1d20c3d0d3e7fbfc9d28cbdd1d20c3de5617a3ee7c8f43e58280dbd0000000012d97fbf000080bfd96e7fbf1e3b88bd00000000d96e7fbf1e3b88bd000000000000803ead26f53e0000008000000000000080bf000080bf0d3e7fbfc9d28cbdc9d20cbd0d3e7fbfc9d28cbdc9d20cbd0dcf823ee7c8f43e50280d3d0000000012d97fbf000080bf2cb47ebf878b91bd878b91bd2cb47ebf878b91bd878b91bd87cf853e7b68f43ef9e9913d0000000074597fbf000080bf5cbf7dbf6f5e96bda78de1bd5cbf7dbf6f5e96bda78de1bd6504893ef405f43eec29e23d000000002a6f7ebf000080bf874b7cbf2c429bbd2c421bbe874b7cbf2c429bbd2c421bbe61708c3e10a2f33ee1b41b3e00000000ee057dbf000080bf83427abf912aa0bd353548be83427abf912aa0bd353548bed215903ec93df33eabd2483e0000000056077bbf000080bf7f8c77bf5508a5bd7f8c77be7f8c77bf5508a5bd7f8c77be71f6933e56daf23e425b783e00000000425b78bf000080bfc21074bfe0c8a9bdc48f94bec21074bfe0c8a9bdc48f94be1e13983e3379f23e2213953e0000000094e874bf000080bfbeb66fbf5c56aebd5c56aebebeb66fbf5c56aebd5c56aebea06b9c3e201cf23ef3f8ae3e000000004e9670bf000080bf9d676abf1698b2bd19ebc8be9d676abf1698b2bd19ebc8be59fea03e16c5f13ecaafc93e00000000164d6bbf000080bf1c1064bf4a73b6bd1c10e4be1c1064bf4a73b6bd1c10e4be09c8a53e3876f13e2ef9e43e000000002ef964bf000080bfb1a25cbf5fccb9bd0379ffbeb1a25cbf5fccb9bd0379ffbea2c3aa3ebc31f13eea43003f00000000948c5dbf000080bfb31954bf9f88bcbd77660dbfb31954bf9f88bcbd77660dbf2eeaaf3ec7f9f03ed5000e3f00000000400155bf000080bf2f794abf2c90bebd24d51abf2f794abf2c90bebd24d51abfe032b53e41d0f03eda811b3f00000000095b4bbf000080bf12d03fbf12d0bfbd10d627bf12d03fbf12d0bfbd10d627bf5693ba3eb0b6f03ec293283f00000000dea840bf000080bf5a3834bf1c3cc0bd5a3834bf5a3834bf1c3cc0bd5a3834bf0000c03e0daef03ef404353f00000000f40435bf000080bf42eb66bf32f02fbd3fecdbbe42eb66bf32f02fbd3fecdbbeec36a43e5bfff83e4120dc3e00000000de2167bf000080bf0abb6cbff02a2cbd4eb0c1be0abb6cbff02a2cbd4eb0c1be9fa49f3ecc25f93e2adcc13e00000000a5f06cbf000080bfa81860bfed4633bd8681f6bea81860bfed4633bd8681f6beb1f9a83e51ddf83e0fbef63e00000000b04f60bf000080bf2e3b58bfe41636bd2b9108bf2e3b58bfe41636bd2b9108bf34e7ad3ea4c0f83ec4b3083f00000000f67158bf000080bfe0524fbfaa4938bddabb15bfe0524fbfaa4938bddabb15bf17f8b23e3aaaf83eb5e2153f00000000ad884fbf000080bf256945bf5fcc39bdd39222bf256945bf5fcc39bdd39222bf7c23b83ed39af83eb6bd223f00000000389d45bf000080bf54913abf54913abd3fe82ebf54913abf54913abd3fe82ebf4e5fbd3efb92f83ec4162f3f00000000f3c23abf000080bf3fe82ebf54913abd54913abf3fe82ebf54913abd54913abfb1a0c23efb92f83ef3c23a3f00000000c4162fbf000080bfd39222bf5fcc39bd256945bfd39222bf5fcc39bd256945bf83dcc73ed39af83e389d453f00000000b6bd22bf000080bfdabb15bfa94938bdde524fbfdabb15bfa94938bdde524fbfe807cd3e3aaaf83eac884f3f00000000b6e215bf000080bf2b9108bfe41636bd2e3b58bf2b9108bfe41636bd2e3b58bfcc18d23ea4c0f83ef671583f00000000c4b308bf000080bf8781f6beed4633bda81860bf8781f6beed4633bda81860bf4f06d73e51ddf83eaf4f603f000000000fbef6be000080bf3fecdbbe32f02fbd42eb66bf3fecdbbe32f02fbd42eb66bf13c9db3e5bfff83ede21673f000000004120dcbe000080bf4fb0c1bef02a2cbd0abb6cbf4fb0c1bef02a2cbd0abb6cbf605be03ecc25f93ea5f06c3f000000002bdcc1be000080bf980fa8be980f28bd6a9671bf980fa8be980f28bd6a9671bf23b9e43eaa4ff93e8bca713f00000000db33a8be000080bfd73e8fbe86b523bd499075bfd73e8fbe86b523bd499075bfd7dfe83e077cf93e8fc2753f000000002a5c8fbe000080bf18cb6ebe10321fbd39be78bf18cb6ebe10321fbd39be78bf5aceec3e0aaaf93e60ee783f0000000052f96ebe000080bff23d41bef3971abdeb367bbff23d41bef3971abdeb367bbfb384f03ef3d8f93ec6647b3f00000000386141be000080bf19f715be19f715bdfa107dbf19f715be19f715bdfa107dbfd503f43e2008fa3e713c7d3f00000000db1016be000080bfe00adabd925c11bdff617ebfe00adabd925c11bdff617ebf6a4df73e0c37fa3e0b8b7e3f000000000f2edabd000080bfc9d28cbdc9d20cbd0d3e7fbfc9d28cbdc9d20cbd0d3e7fbf9a63fa3e4d65fa3eb3647f3f000000001ce88cbd000080bfcb6108bdc36108bd4db77fbfcb6108bdc36108bd4db77fbfe548fd3e9292fa3e9fdb7f3f000000002a7508bd000080bf00000000720f04bdeedd7fbf00000000720f04bdeedd7fbf0000003f9dbefa3e0000803f0000000000000000000080bfc361083dc36108bd4db77fbfc361083dc36108bd4db77fbf8e5b013f9292fa3e9fdb7f3f000000002275083d000080bfc9d28c3dc9d20cbd0d3e7fbfc9d28c3dc9d20cbd0d3e7fbf33ce023f4d65fa3eb3647f3f000000001ce88c3d000080bfdb0ada3d925c11bdff617ebfdb0ada3d925c11bdff617ebf4b59043f0c37fa3e0c8b7e3f000000000b2eda3d000080bf19f7153e19f715bdfa107dbf19f7153e19f715bdfa107dbf16fe053f2008fa3e713c7d3f00000000db10163e000080bfcabcd2bd000000001fa47ebfcabcd2bd000000001fa47ebfa399f73e0000003f1fa47e3f00000000cabcd2bd000080bf1e3b88bd00000000d96e7fbf1e3b88bd00000000d96e7fbf5793fa3e0000003fd96e7f3f000000001e3b88bd000080bf720f04bd00000000eedd7fbf720f04bd00000000eedd7fbf4d5ffd3e0000003feedd7f3f00000000720f04bd000080bf0000000000000000000080bf0000000000000000000080bf0000003f0000003f0000803f0000000000000000000080bf720f043d00000000eedd7fbf720f043d00000000eedd7fbf5a50013f0000003feedd7f3f00000000720f043d000080bf1e3b883d00000000d96e7fbf1e3b883d00000000d96e7fbf54b6023f0000003fd96e7f3f000000001e3b883d000080bfcabcd23d000000001fa47ebfcabcd23d000000001fa47ebf2e33043f0000003f1fa47e3f00000000cabcd23d000080bfc3d0103e00000000546d7dbfc3d0103e00000000546d7dbf0ac8053f0000003f556d7d3f00000000c4d0103e000080bf9b753a3e000000005eb87bbf9b753a3e000000005eb87bbfea75073f0000003f5fb87b3f000000009c753a3e000080bf9241663e00000000b37179bf9241663e00000000b37179bf9a3d093f0000003fb471793f000000009341663e000080bfef0c8a3e00000000d08476bfef0c8a3e00000000d08476bf961f0b3f0000003fd084763f00000000ef0c8a3e000080bf9be8a13e00000000e8dc72bf9be8a13e00000000e8dc72bffb1b0d3f0000003fe9dc723f000000009ce8a13e000080bf8e92ba3e00000000ee656ebf8e92ba3e00000000ee656ebf67320f3f0000003fee656e3f000000008e92ba3e000080bffbddd33e00000000c70d69bffbddd33e00000000c70d69bfe361113f0000003fc70d693f00000000fbddd33e000080bf5392ed3e00000000dbc562bf5392ed3e00000000dbc562bfcca8133f0000003fdbc5623f000000005392ed3e000080bfffb5033f00000000a9845bbfffb5033f00000000a9845bbfc804163f0000003fa9845b3f00000000ffb5033f000080bf208f103f00000000564753bf208f103f00000000564753bfc072183f0000003f5647533f00000000208f103f000080bf362b1d3f00000000fd124abf362b1d3f00000000fd124abfeeee1a3f0000003ffd124a3f00000000362b1d3f000080bf0960293f0000000060f53fbf0960293f0000000060f53fbff2741d3f0000003f60f53f3f000000000960293f000080bff304353f00000000f30435bff304353f00000000f30435bf0000203f0000003ff404353f00000000f404353f000080bf60f53f3f00000000096029bf60f53f3f00000000096029bf0e8b223f0000003f0960293f0000000060f53f3f000080bffd124a3f00000000362b1dbffd124a3f00000000362b1dbf1211253f0000003f362b1d3f00000000fd124a3f000080bf5647533f00000000208f10bf5647533f00000000208f10bf408d273f0000003f208f103f000000005647533f000080bfa9845b3f00000000ffb503bfa9845b3f00000000ffb503bf38fb293f0000003fffb5033f00000000a9845b3f000080bfdbc5623f000000005392edbedbc5623f000000005392edbe34572c3f0000003f5392ed3e00000000dbc5623f000080bfc70d693f00000000fbddd3bec70d693f00000000fbddd3be1e9e2e3f0000003ffbddd33e00000000c70d693f000080bfee656e3f000000008e92babeee656e3f000000008e92babe99cd303f0000003f8e92ba3e00000000ee656e3f000080bfe8dc723f000000009be8a1bee8dc723f000000009be8a1be05e4323f0000003f9ce8a13e00000000e9dc723f000080bfd084763f00000000ef0c8abed084763f00000000ef0c8abe6ae0343f0000003fef0c8a3e00000000d084763f000080bfb371793f00000000924166beb371793f00000000924166be67c2363f0000003f9341663e00000000b471793f000080bf5eb87b3f000000009b753abe5eb87b3f000000009b753abe168a383f0000003f9c753a3e000000005fb87b3f000080bf546d7d3f00000000c3d010be546d7d3f00000000c3d010bef6373a3f0000003fc4d0103e00000000556d7d3f000080bf1fa47e3f00000000cabcd2bd1fa47e3f00000000cabcd2bdd2cc3b3f0000003fcabcd23d000000001fa47e3f000080bf0d3e7f3fc9d20cbdc9d28cbd0d3e7f3fc9d20cbdc9d28cbdcd313d3f4d65fa3e1ce88c3d00000000b3647f3f000080bf4db77f3fc36108bdcb6108bd4db77f3fc36108bdcb6108bd73a43e3f9292fa3e2a75083d000000009fdb7f3f000080bfeedd7f3f720f04bd00000000eedd7f3f720f04bd000000000000403f9dbefa3e00000080000000000000803f000080bf4db77f3fc36108bdc361083d4db77f3fc36108bdc361083d8d5b413f9292fa3e227508bd000000009fdb7f3f000080bf0d3e7f3fc9d20cbdc9d28c3d0d3e7f3fc9d20cbdc9d28c3d33ce423f4d65fa3e1ce88cbd00000000b3647f3f000080bfff617e3f925c11bddb0ada3dff617e3f925c11bddb0ada3d4b59443f0c37fa3e0b2edabd000000000c8b7e3f000080bffa107d3f19f715bd19f7153efa107d3f19f715bd19f7153e15fe453f2008fa3edb1016be00000000713c7d3f000080bfeb367b3ff3971abdf03d413eeb367b3ff3971abdf03d413ea6bd473ff3d8f93e366141be00000000c6647b3f000080bf39be783f10321fbd18cb6e3e39be783f10321fbd18cb6e3ed398493f0aaaf93e52f96ebe0000000060ee783f000080bfeedd7f3f00000000720f04bdeedd7f3f00000000720f04bda8af3e3f0000003f720f043d00000000eedd7f3f000080bf0000803f00000000000000000000803f00000000000000000000403f0000003f00000080000000000000803f000080bfeedd7f3f00000000720f043deedd7f3f00000000720f043d5950413f0000003f720f04bd00000000eedd7f3f000080bfd96e7f3f000000001e3b883dd96e7f3f000000001e3b883d55b6423f0000003f1e3b88bd00000000d96e7f3f000080bf1fa47e3f00000000cabcd23d1fa47e3f00000000cabcd23d2e33443f0000003fcabcd2bd000000001fa47e3f000080bf546d7d3f00000000c3d0103e546d7d3f00000000c3d0103e0ac8453f0000003fc4d010be00000000556d7d3f000080bf5eb87b3f000000009b753a3e5eb87b3f000000009b753a3eea75473f0000003f9c753abe000000005fb87b3f000080bfb371793f000000009241663eb371793f000000009241663e993d493f0000003f934166be00000000b471793f000080bfd084763f00000000ef0c8a3ed084763f00000000ef0c8a3e961f4b3f0000003fef0c8abe00000000d084763f000080bf4db77f3fc361083dc361083d4db77f3fc361083dc361083d8d5b413fb7b6023f227508bd000000009fdb7f3f000080bf0d3e7f3fc9d20c3dc9d28c3d0d3e7f3fc9d20c3dc9d28c3d33ce423f59cd023f1ce88cbd00000000b3647f3f000080bfff617e3f925c113ddb0ada3dff617e3f925c113ddb0ada3d4b59443f7ae4023f0b2edabd000000000c8b7e3f000080bffa107d3f19f7153d19f7153efa107d3f19f7153d19f7153e15fe453ff0fb023fdb1016be00000000713c7d3f000080bfeb367b3ff3971a3df03d413eeb367b3ff3971a3df03d413ea6bd473f8713033f366141be00000000c6647b3f000080bf39be783f10321f3d18cb6e3e39be783f10321f3d18cb6e3ed398493ffb2a033f52f96ebe0000000060ee783f000080bf4990753f86b5233dd53e8f3e4990753f86b5233dd53e8f3e14904b3ffc41033f295c8fbe0000000090c2753f000080bf0d3e7f3fc9d28c3dc9d20c3d0d3e7f3fc9d28c3dc9d20c3d8767413f8c9b053f50280dbd0000000012d97f3f000080bfd96e7f3f1e3b883d00000000d96e7f3f1e3b883d000000000000403faa6c053f00000080000000000000803f000080bfeedd7f3f720f043d00000000eedd7f3f720f043d000000000000403fb2a0023f00000080000000000000803f000080bf4db77f3fc361083dcb6108bd4db77f3fc361083dcb6108bd73a43e3fb7b6023f2a75083d000000009fdb7f3f000080bfd96e7f3f000000001e3b88bdd96e7f3f000000001e3b88bdac493d3f0000003f1e3b883d00000000d96e7f3f000080bf0d3e7f3fc9d20c3dc9d28cbd0d3e7f3fc9d20c3dc9d28cbdcd313d3f59cd023f1ce88c3d00000000b3647f3f000080bfff617e3f925c113de00adabdff617e3f925c113de00adabdb5a63b3f7ae4023f0f2eda3d000000000b8b7e3f000080bffa107d3f19f7153d19f715befa107d3f19f7153d19f715beeb013a3ff0fb023fdb10163e00000000713c7d3f000080bfeb367b3ff3971a3df23d41beeb367b3ff3971a3df23d41be5a42383f8713033f3861413e00000000c6647b3f000080bf39be783f10321f3d18cb6ebe39be783f10321f3d18cb6ebe2e67363ffb2a033f52f96e3e0000000060ee783f000080bf4990753f86b5233dd73e8fbe4990753f86b5233dd73e8fbeec6f343ffc41033f2a5c8f3e000000008fc2753f000080bf6a96713f980f283d980fa8be6a96713f980f283d980fa8be925c323f2b58033fdb33a83e000000008bca713f000080bf0abb6c3ff02a2c3d4fb0c1be0abb6c3ff02a2c3d4fb0c1beb02d303f1a6d033f2bdcc13e00000000a5f06c3f000080bf42eb663f32f02f3d3fecdbbe42eb663f32f02f3d3fecdbbe8ae42d3f5280033f4120dc3e00000000de21673f000080bfa818603fed46333d8781f6bea818603fed46333d8781f6be28832b3f5891033f0fbef63e00000000af4f603f000080bf2e3b583fe416363d2b9108bf2e3b583fe416363d2b9108bf660c293fae9f033fc4b3083f00000000f671583f000080bfde524f3fa949383ddabb15bfde524f3fa949383ddabb15bff483263fe3aa033fb6e2153f00000000ac884f3f000080bf2569453f5fcc393dd39222bf2569453f5fcc393dd39222bf42ee233f97b2033fb6bd223f00000000389d453f000080bf54913a3f54913a3d3fe82ebf54913a3f54913a3d3fe82ebf5950213f83b6033fc4162f3f00000000f3c23a3f000080bf3fe82e3f54913a3d54913abf3fe82e3f54913a3d54913abfa8af1e3f83b6033ff3c23a3f00000000c4162f3f000080bfd392223f5fcc393d256945bfd392223f5fcc393d256945bfbe111c3f97b2033f389d453f00000000b6bd223f000080bfdabb153faa49383de0524fbfdabb153faa49383de0524fbf0c7c193fe3aa033fad884f3f00000000b5e2153f000080bf2b91083fe416363d2e3b58bf2b91083fe416363d2e3b58bf9af3163fae9f033ff671583f00000000c4b3083f000080bf8681f63eed46333da81860bf8681f63eed46333da81860bfd87c143f5891033fb04f603f000000000fbef63e000080bf3fecdb3e32f02f3d42eb66bf3fecdb3e32f02f3d42eb66bf761b123f5280033fde21673f000000004120dc3e000080bf4eb0c13ef02a2c3d0abb6cbf4eb0c13ef02a2c3d0abb6cbf50d20f3f1a6d033fa5f06c3f000000002adcc13e000080bf980fa83e980f283d6a9671bf980fa83e980f283d6a9671bf6ea30d3f2b58033f8bca713f00000000db33a83e000080bfd53e8f3e86b5233d499075bfd53e8f3e86b5233d499075bf14900b3ffc41033f90c2753f00000000295c8f3e000080bf18cb6e3e10321f3d39be78bf18cb6e3e10321f3d39be78bfd398093ffb2a033f60ee783f0000000052f96e3e000080bff03d413ef3971a3deb367bbff03d413ef3971a3deb367bbfa6bd073f8713033fc6647b3f000000003661413e000080bf19f7153e19f7153dfa107dbf19f7153e19f7153dfa107dbf16fe053ff0fb023f713c7d3f00000000db10163e000080bfdb0ada3d925c113dff617ebfdb0ada3d925c113dff617ebf4b59043f7ae4023f0c8b7e3f000000000b2eda3d000080bfc9d28c3dc9d20c3d0d3e7fbfc9d28c3dc9d20c3d0d3e7fbf33ce023f59cd023fb3647f3f000000001ce88c3d000080bfc361083dc361083d4db77fbfc361083dc361083d4db77fbf8e5b013fb7b6023f9fdb7f3f000000002275083d000080bf00000000720f043deedd7fbf00000000720f043deedd7fbf0000003fb2a0023f0000803f0000000000000000000080bfcb6108bdc361083d4db77fbfcb6108bdc361083d4db77fbfe548fd3eb7b6023f9fdb7f3f000000002a7508bd000080bfc9d28cbdc9d20c3d0d3e7fbfc9d28cbdc9d20c3d0d3e7fbf9a63fa3e59cd023fb3647f3f000000001ce88cbd000080bfe00adabd925c113dff617ebfe00adabd925c113dff617ebf6a4df73e7ae4023f0b8b7e3f000000000f2edabd000080bfc3d010be00000000546d7dbfc3d010be00000000546d7dbfeb6ff43e0000003f556d7d3f00000000c4d010be000080bf9b753abe000000005eb87bbf9b753abe000000005eb87bbf2b14f13e0000003f5fb87b3f000000009c753abe000080bf924166be00000000b37179bf924166be00000000b37179bfcd84ed3e0000003fb471793f00000000934166be000080bfef0c8abe00000000d08476bfef0c8abe00000000d08476bfd4c0e93e0000003fd084763f00000000ef0c8abe000080bf9be8a1be00000000e8dc72bf9be8a1be00000000e8dc72bf0ac8e53e0000003fe9dc723f000000009ce8a1be000080bf8e92babe00000000ee656ebf8e92babe00000000ee656ebf329be13e0000003fee656e3f000000008e92babe000080bffbddd3be00000000c70d69bffbddd3be00000000c70d69bf3a3cdd3e0000003fc70d693f00000000fbddd3be000080bf5392edbe00000000dbc562bf5392edbe00000000dbc562bf68aed83e0000003fdbc5623f000000005392edbe000080bfffb503bf00000000a9845bbfffb503bf00000000a9845bbf70f6d33e0000003fa9845b3f00000000ffb503bf000080bf208f10bf00000000564753bf208f10bf00000000564753bf801acf3e0000003f5647533f00000000208f10bf000080bf362b1dbf00000000fd124abf362b1dbf00000000fd124abf2422ca3e0000003ffd124a3f00000000362b1dbf000080bf096029bf0000000060f53fbf096029bf0000000060f53fbf1b16c53e0000003f60f53f3f00000000096029bf000080bff30435bf00000000f30435bff30435bf00000000f30435bf0000c03e0000003ff404353f00000000f40435bf000080bf60f53fbf00000000096029bf60f53fbf00000000096029bfe4e9ba3e0000003f0960293f0000000060f53fbf000080bffd124abf00000000362b1dbffd124abf00000000362b1dbfdcddb53e0000003f362b1d3f00000000fd124abf000080bf564753bf00000000208f10bf564753bf00000000208f10bf80e5b03e0000003f208f103f00000000564753bf000080bfa9845bbf00000000ffb503bfa9845bbf00000000ffb503bf8f09ac3e0000003fffb5033f00000000a9845bbf000080bfdbc562bf000000005392edbedbc562bf000000005392edbe9851a73e0000003f5392ed3e00000000dbc562bf000080bfc70d69bf00000000fbddd3bec70d69bf00000000fbddd3bec5c3a23e0000003ffbddd33e00000000c70d69bf000080bfee656ebf000000008e92babeee656ebf000000008e92babece649e3e0000003f8e92ba3e00000000ee656ebf000080bf6a9671bf980f28bd980fa8be6a9671bf980f28bd980fa8bedd469b3eaa4ff93edb33a83e000000008bca71bf000080bf499075bf86b523bdd53e8fbe499075bf86b523bdd53e8fbe2920973e077cf93e295c8f3e0000000090c275bf000080bf39be78bf10321fbd18cb6ebe39be78bf10321fbd18cb6ebea531933e0aaaf93e52f96e3e0000000060ee78bf000080bfeb367bbff3971abdf03d41beeb367bbff3971abdf03d41be4c7b8f3ef3d8f93e3661413e00000000c6647bbf000080bffa107dbf19f715bd19f715befa107dbf19f715bd19f715be2afc8b3e2008fa3edb10163e00000000713c7dbf000080bfff617ebf925c11bddb0adabdff617ebf925c11bddb0adabd96b2883e0c37fa3e0b2eda3d000000000c8b7ebf000080bf0d3e7fbfc9d20cbdc9d28cbd0d3e7fbfc9d20cbdc9d28cbd669c853e4d65fa3e1ce88c3d00000000b3647fbf000080bf4db77fbfc36108bdc36108bd4db77fbfc36108bdc36108bd19b7823e9292fa3e2275083d000000009fdb7fbf000080bfeedd7fbf720f04bd00000000eedd7fbf720f04bd000000000000803e9dbefa3e0000008000000000000080bf000080bf4db77fbfc36108bdcb61083d4db77fbfc36108bdcb61083dcc917a3e9292fa3e2a7508bd000000009fdb7fbf000080bf0d3e7fbfc9d20cbdc9d28c3d0d3e7fbfc9d20cbdc9d28c3d34c7743e4d65fa3e1ce88cbd00000000b3647fbf000080bfff617ebf925c11bde00ada3dff617ebf925c11bde00ada3dd39a6e3e0c37fa3e0f2edabd000000000b8b7ebf000080bffa107dbf19f715bd19f7153efa107dbf19f715bd19f7153eab07683e2008fa3edb1016be00000000713c7dbf000080bfeb367bbff3971abdf23d413eeb367bbff3971abdf23d413e6609613ef3d8f93e386141be00000000c6647bbf000080bf39be78bf10321fbd18cb6e3e39be78bf10321fbd18cb6e3eb49c593e0aaaf93e52f96ebe0000000060ee78bf000080bf499075bf86b523bdd73e8f3e499075bf86b523bdd73e8f3eaebf513e077cf93e2a5c8fbe000000008fc275bf000080bf6a9671bf980f28bd980fa83e6a9671bf980f28bd980fa83e4572493eaa4ff93edb33a8be000000008bca71bf000080bf0abb6cbff02a2cbd4fb0c13e0abb6cbff02a2cbd4fb0c13ec1b6403ecc25f93e2bdcc1be00000000a5f06cbf000080bf42eb66bf32f02fbd3fecdb3e42eb66bf32f02fbd3fecdb3e2892373e5bfff83e4120dcbe00000000de2167bf000080bfa81860bfed4633bd8781f63ea81860bfed4633bd8781f63e9e0c2e3e51ddf83e0fbef6be00000000af4f60bf000080bf2e3b58bfe41636bd2b91083f2e3b58bfe41636bd2b91083f9731243ea4c0f83ec4b308bf00000000f67158bf000080bfde524fbfa94938bddabb153fde524fbfa94938bddabb153fd10f1a3e3aaaf83eb6e215bf00000000ac884fbf000080bf2f794abf2c90bebd24d51a3f2f794abf2c90bebd24d51a3f409a153e41d0f03eda811bbf00000000095b4bbf000080bf12d03fbf12d0bfbd0fd6273f12d03fbf12d0bfbd0fd6273f53d90a3eb0b6f03ec29328bf00000000dea840bf000080bf5a3834bf1c3cc0bd5a38343f5a3834bf1c3cc0bd5a38343f0000003e0daef03ef40435bf00000000f40435bf000080bf10d627bf12d0bfbd12d03f3f10d627bf12d0bfbd12d03f3f594dea3db0b6f03edea840bf00000000c29328bf000080bf24d51abf2c90bebd2f794a3f24d51abf2c90bebd2f794a3f7fcbd43d41d0f03e095b4bbf00000000da811bbf000080bf77660dbf9f88bcbdb319543f77660dbf9f88bcbdb319543fb6a8bf3dc7f9f03e400155bf00000000d5000ebf000080bf0379ffbe5fccb9bdb1a25c3f0379ffbe5fccb9bdb1a25c3f8c0eab3dbc31f13e948c5dbf00000000ea4300bf000080bf1c10e4be4a73b6bd1c10643f1c10e4be4a73b6bd1c10643f2920973d3876f13e2ef964bf000000002ef9e4be000080bf19ebc8be1698b2bd9d676a3f19ebc8be1698b2bd9d676a3f65f9833d16c5f13e164d6bbf00000000caafc9be000080bf5c56aebe5c56aebdbeb66f3f5c56aebe5c56aebdbeb66f3f045d633d201cf23e4e9670bf00000000f3f8aebe000080bfc48f94bee0c8a9bdc210743fc48f94bee0c8a9bdc210743ff498403d3379f23e94e874bf00000000221395be000080bf7f8c77be5508a5bd7f8c773f7f8c77be5508a5bd7f8c773f86b31f3d56daf23e425b78bf00000000425b78be000080bf353548be912aa0bd83427a3f353548be912aa0bd83427a3f90ae003dc93df33e56077bbf00000000abd248be000080bf2c421bbe2c429bbd874b7c3f2c421bbe2c429bbd874b7c3f1606c73c10a2f33eee057dbf00000000e1b41bbe000080bfa78de1bd6f5e96bd5cbf7d3fa78de1bd6f5e96bd5cbf7d3f4b46903cf405f43e2a6f7ebf00000000ec29e2bd000080bf878b91bd878b91bd2cb47e3f878b91bd878b91bd2cb47e3fe2f0393c7b68f43e74597fbf00000000f9e991bd000080bfc9d20cbdc9d28cbd0d3e7f3fc9d20cbdc9d28cbd0d3e7f3f4bc3b33be7c8f43e12d97fbf0000000050280dbd000080bf000000001e3b88bdd96e7f3f000000001e3b88bdd96e7f3f00000080ad26f53e000080bf0000000000000000000080bfc36108bdc36108bd4db77f3fc36108bdc36108bd4db77f3f7ac6ad3b9292fa3e9fdb7fbf00000000227508bd000080bf00000000720f04bdeedd7f3f00000000720f04bdeedd7f3f000000809dbefa3e000080bf0000000000000000000080bfc9d28cbdc9d20cbd0d3e7f3fc9d28cbdc9d20cbd0d3e7f3fbf8c333c4d65fa3eb3647fbf000000001ce88cbd000080bfdb0adabd925c11bdff617e3fdb0adabd925c11bdff617e3f64298b3c0c37fa3e0c8b7ebf000000000b2edabd000080bf19f715be19f715bdfa107d3f19f715be19f715bdfa107d3fa6c2bf3c2008fa3e713c7dbf00000000db1016be000080bff03d41bef3971abdeb367b3ff03d41bef3971abdeb367b3fcab4f73cf3d8f93ec6647bbf00000000366141be000080bf18cb6ebe10321fbd39be783f18cb6ebe10321fbd39be783f2c8d193d0aaaf93e60ee78bf0000000052f96ebe000080bfd53e8fbe86b523bd4990753fd53e8fbe86b523bd4990753f4701393d077cf93e90c275bf00000000295c8fbe000080bf980fa8be980f28bd6a96713f980fa8be980f28bd6a96713fe9365a3daa4ff93e8bca71bf00000000db33a8be000080bf4eb0c1bef02a2cbd0abb6c3f4eb0c1bef02a2cbd0abb6c3ffa247d3dcc25f93ea5f06cbf000000002adcc1be000080bf3fecdbbe32f02fbd42eb663f3fecdbbe32f02fbd42eb663fafdb903d5bfff83ede2167bf000000004120dcbe000080bf8681f6beed4633bda818603f8681f6beed4633bda818603fc2e6a33d51ddf83eb04f60bf000000000fbef6be000080bf2b9108bfe41636bd2e3b583f2b9108bfe41636bd2e3b583fd19cb73da4c0f83ef67158bf00000000c4b308bf000080bfdabb15bfaa4938bde0524f3fdabb15bfaa4938bde0524f3f5ce0cb3d3aaaf83ead884fbf00000000b5e215bf000080bfd39222bf5fcc39bd2569453fd39222bf5fcc39bd2569453fef8de03dd39af83e389d45bf00000000b6bd22bf000080bf3fe82ebf54913abd54913a3f3fe82ebf54913abd54913a3f397df53dfb92f83ef3c23abf00000000c4162fbf000080bf54913abf54913abd3fe82e3f54913abf54913abd3fe82e3f6341053efb92f83ec4162fbf00000000f3c23abf000080bf256945bf5fcc39bdd392223f256945bf5fcc39bdd392223f08b90f3ed39af83eb6bd22bf00000000389d45bf000080bfffb503bf00000000a9845b3fffb503bf00000000a9845b3f3d26b03d0000003fa9845bbf00000000ffb503bf000080bf5392edbe00000000dbc5623f5392edbe00000000dbc5623f5e469d3d0000003fdbc562bf000000005392edbe000080bf208f10bf000000005647533f208f10bf000000005647533f0196c33d0000003f564753bf00000000208f10bf000080bf362b1dbf00000000fd124a3f362b1dbf00000000fd124a3f7177d73d0000003ffd124abf00000000362b1dbf000080bf096029bf0000000060f53f3f096029bf0000000060f53f3f94a7eb3d0000003f60f53fbf00000000096029bf000080bff30435bf00000000f304353ff30435bf00000000f304353f0000003e0000003ff40435bf00000000f40435bf000080bf60f53fbf000000000960293f60f53fbf000000000960293f352c0a3e0000003f096029bf0000000060f53fbf000080bffd124abf00000000362b1d3ffd124abf00000000362b1d3f4844143e0000003f362b1dbf00000000fd124abf000080bf564753bf00000000208f103f564753bf00000000208f103fff341e3e0000003f208f10bf00000000564753bf000080bfa9845bbf00000000ffb5033fa9845bbf00000000ffb5033fe1ec273e0000003fffb503bf00000000a9845bbf000080bfdbc562bf000000005392ed3edbc562bf000000005392ed3ed15c313e0000003f5392edbe00000000dbc562bf000080bfc70d69bf00000000fbddd33ec70d69bf00000000fbddd33e74783a3e0000003ffbddd3be00000000c70d69bf000080bfee656ebf000000008e92ba3eee656ebf000000008e92ba3e6336433e0000003f8e92babe00000000ee656ebf000080bfe8dc72bf000000009be8a13ee8dc72bf000000009be8a13e14904b3e0000003f9ce8a1be00000000e9dc72bf000080bfd08476bf00000000ef0c8a3ed08476bf00000000ef0c8a3eaa81533e0000003fef0c8abe00000000d08476bf000080bfb37179bf000000009241663eb37179bf000000009241663e9b095b3e0000003f934166be00000000b47179bf000080bf5eb87bbf000000009b753a3e5eb87bbf000000009b753a3e5728623e0000003f9c753abe000000005fb87bbf000080bf546d7dbf00000000c3d0103e546d7dbf00000000c3d0103ed7df683e0000003fc4d010be00000000556d7dbf000080bf1fa47ebf00000000cabcd23d1fa47ebf00000000cabcd23d47336f3e0000003fcabcd2bd000000001fa47ebf000080bfd96e7fbf000000001e3b883dd96e7fbf000000001e3b883dac26753e0000003f1e3b88bd00000000d96e7fbf000080bfeedd7fbf00000000720f043deedd7fbf00000000720f043d9cbe7a3e0000003f720f04bd00000000eedd7fbf000080bf000080bf0000000000000000000080bf00000000000000000000803e0000003f0000008000000000000080bf000080bfeedd7fbf00000000720f04bdeedd7fbf00000000720f04bdb1a0823e0000003f720f043d00000000eedd7fbf000080bfd96e7fbf000000001e3b88bdd96e7fbf000000001e3b88bda96c853e0000003f1e3b883d00000000d96e7fbf000080bf1fa47ebf00000000cabcd2bd1fa47ebf00000000cabcd2bd5c66883e0000003fcabcd23d000000001fa47ebf000080bf546d7dbf00000000c3d010be546d7dbf00000000c3d010be14908b3e0000003fc4d0103e00000000556d7dbf000080bf5eb87bbf000000009b753abe5eb87bbf000000009b753abed5eb8e3e0000003f9c753a3e000000005fb87bbf000080bfb37179bf00000000924166beb37179bf00000000924166be327b923e0000003f9341663e00000000b47179bf000080bfd08476bf00000000ef0c8abed08476bf00000000ef0c8abe2b3f963e0000003fef0c8a3e00000000d08476bf000080bfe8dc72bf000000009be8a1bee8dc72bf000000009be8a1bef6379a3e0000003f9ce8a13e00000000e9dc72bf000080bf0d3e7fbfc9d20c3dc9d28cbd0d3e7fbfc9d20c3dc9d28cbd669c853e59cd023f1ce88c3d00000000b3647fbf000080bf4db77fbfc361083dc36108bd4db77fbfc361083dc36108bd19b7823eb7b6023f2275083d000000009fdb7fbf000080bfeedd7fbf720f043d00000000eedd7fbf720f043d000000000000803eb2a0023f0000008000000000000080bf000080bf4db77fbfc361083dcb61083d4db77fbfc361083dcb61083dcc917a3eb7b6023f2a7508bd000000009fdb7fbf000080bf0d3e7fbfc9d20c3dc9d28c3d0d3e7fbfc9d20c3dc9d28c3d34c7743e59cd023f1ce88cbd00000000b3647fbf000080bfff617ebf925c113de00ada3dff617ebf925c113de00ada3dd39a6e3e7ae4023f0f2edabd000000000b8b7ebf000080bffa107dbf19f7153d19f7153efa107dbf19f7153d19f7153eab07683ef0fb023fdb1016be00000000713c7dbf000080bfeb367bbff3971a3df23d413eeb367bbff3971a3df23d413e6609613e8713033f386141be00000000c6647bbf000080bf39be78bf10321f3d18cb6e3e39be78bf10321f3d18cb6e3eb49c593efb2a033f52f96ebe0000000060ee78bf000080bf499075bf86b5233dd73e8f3e499075bf86b5233dd73e8f3eaebf513efc41033f2a5c8fbe000000008fc275bf000080bf6a9671bf980f283d980fa83e6a9671bf980f283d980fa83e4572493e2b58033fdb33a8be000000008bca71bf000080bf0abb6cbff02a2c3d4fb0c13e0abb6cbff02a2c3d4fb0c13ec1b6403e1a6d033f2bdcc1be00000000a5f06cbf000080bf42eb66bf32f02f3d3fecdb3e42eb66bf32f02f3d3fecdb3e2892373e5280033f4120dcbe00000000de2167bf000080bfa81860bfed46333d8781f63ea81860bfed46333d8781f63e9e0c2e3e5891033f0fbef6be00000000af4f60bf000080bf2e3b58bfe416363d2b91083f2e3b58bfe416363d2b91083f9731243eae9f033fc4b308bf00000000f67158bf000080bfde524fbfa949383ddabb153fde524fbfa949383ddabb153fd10f1a3ee3aa033fb6e215bf00000000ac884fbf000080bf256945bf5fcc393dd392223f256945bf5fcc393dd392223f08b90f3e97b2033fb6bd22bf00000000389d45bf000080bf54913abf54913a3d3fe82e3f54913abf54913a3d3fe82e3f6341053e83b6033fc4162fbf00000000f3c23abf000080bf3fe82ebf54913a3d54913a3f3fe82ebf54913a3d54913a3f397df53d83b6033ff3c23abf00000000c4162fbf000080bfd39222bf5fcc393d2569453fd39222bf5fcc393d2569453fef8de03d97b2033f389d45bf00000000b6bd22bf000080bfdabb15bfaa49383de0524f3fdabb15bfaa49383de0524f3f5ce0cb3de3aa033fad884fbf00000000b5e215bf000080bf2b9108bfe416363d2e3b583f2b9108bfe416363d2e3b583fd19cb73dae9f033ff67158bf00000000c4b308bf000080bf8681f6beed46333da818603f8681f6beed46333da818603fc2e6a33d5891033fb04f60bf000000000fbef6be000080bf3fecdbbe32f02f3d42eb663f3fecdbbe32f02f3d42eb663fafdb903d5280033fde2167bf000000004120dcbe000080bffbddd3be00000000c70d693ffbddd3be00000000c70d693f160f8b3d0000003fc70d69bf00000000fbddd3be000080bf8e92babe00000000ee656e3f8e92babe00000000ee656e3f7226733d0000003fee656ebf000000008e92babe000080bf9be8a1be00000000e8dc723f9be8a1be00000000e8dc723faebf513d0000003fe9dc72bf000000009ce8a1be000080bfef0c8abe00000000d084763fef0c8abe00000000d084763f58f9313d0000003fd08476bf00000000ef0c8abe000080bf924166be00000000b371793f924166be00000000b371793f90d9133d0000003fb47179bf00000000934166be000080bf9b753abe000000005eb87b3f9b753abe000000005eb87b3f48bdee3c0000003f5fb87bbf000000009c753abe000080bfc3d010be00000000546d7d3fc3d010be00000000546d7d3f4801b93c0000003f556d7dbf00000000c4d010be000080bfcabcd2bd000000001fa47e3fcabcd2bd000000001fa47e3fc465863c0000003f1fa47ebf00000000cabcd2bd000080bf1e3b88bd00000000d96e7f3f1e3b88bd00000000d96e7f3f30952d3c0000003fd96e7fbf000000001e3b88bd000080bf720f04bd00000000eedd7f3f720f04bd00000000eedd7f3f6f2ca83b0000003feedd7fbf00000000720f04bd000080bf00000000000000000000803f00000000000000000000803f000000800000003f000080bf0000000000000000000080bf00000000720f043deedd7f3f00000000720f043deedd7f3f00000080b2a0023f000080bf0000000000000000000080bfc36108bdc361083d4db77f3fc36108bdc361083d4db77f3f7ac6ad3bb7b6023f9fdb7fbf00000000227508bd000080bfc9d28cbdc9d20c3d0d3e7f3fc9d28cbdc9d20c3d0d3e7f3fbf8c333c59cd023fb3647fbf000000001ce88cbd000080bfdb0adabd925c113dff617e3fdb0adabd925c113dff617e3f64298b3c7ae4023f0c8b7ebf000000000b2edabd000080bf19f715be19f7153dfa107d3f19f715be19f7153dfa107d3fa6c2bf3cf0fb023f713c7dbf00000000db1016be000080bff03d41bef3971a3deb367b3ff03d41bef3971a3deb367b3fcab4f73c8713033fc6647bbf00000000366141be000080bf18cb6ebe10321f3d39be783f18cb6ebe10321f3d39be783f2c8d193dfb2a033f60ee78bf0000000052f96ebe000080bfd53e8fbe86b5233d4990753fd53e8fbe86b5233d4990753f4701393dfc41033f90c275bf00000000295c8fbe000080bf980fa8be980f283d6a96713f980fa8be980f283d6a96713fe9365a3d2b58033f8bca71bf00000000db33a8be000080bf4eb0c1bef02a2c3d0abb6c3f4eb0c1bef02a2c3d0abb6c3ffa247d3d1a6d033fa5f06cbf000000002adcc1be000080bfc9d20cbdc9d28c3d0d3e7f3fc9d20cbdc9d28c3d0d3e7f3f4bc3b33b8c9b053f12d97fbf0000000050280dbd000080bf878b91bd878b913d2cb47e3f878b91bd878b913d2cb47e3fe2f0393cc3cb053f74597fbf00000000f9e991bd000080bfa78de1bd6f5e963d5cbf7d3fa78de1bd6f5e963d5cbf7d3f4b46903c06fd053f2a6f7ebf00000000ec29e2bd000080bf2c421bbe2c429b3d874b7c3f2c421bbe2c429b3d874b7c3f1606c73cf82e063fee057dbf00000000e1b41bbe000080bf353548be912aa03d83427a3f353548be912aa03d83427a3f90ae003d1c61063f56077bbf00000000abd248be000080bf7f8c77be5508a53d7f8c773f7f8c77be5508a53d7f8c773f86b31f3dd592063f425b78bf00000000425b78be000080bfc48f94bee0c8a93dc210743fc48f94bee0c8a93dc210743ff498403d66c3063f94e874bf00000000221395be000080bf5c56aebe5c56ae3dbeb66f3f5c56aebe5c56ae3dbeb66f3f045d633df0f1063f4e9670bf00000000f3f8aebe000080bf19ebc8be1698b23d9d676a3f19ebc8be1698b23d9d676a3f65f9833d751d073f164d6bbf00000000caafc9be000080bf1c10e4be4a73b63d1c10643f1c10e4be4a73b63d1c10643f2920973de444073f2ef964bf000000002ef9e4be000080bf0379ffbe5fccb93db1a25c3f0379ffbe5fccb93db1a25c3f8c0eab3d2267073f948c5dbf00000000ea4300bf000080bf77660dbf9f88bc3db319543f77660dbf9f88bc3db319543fb6a8bf3d1c83073f400155bf00000000d5000ebf000080bf24d51abf2c90be3d2f794a3f24d51abf2c90be3d2f794a3f7fcbd43ddf97073f095b4bbf00000000da811bbf000080bf10d627bf12d0bf3d12d03f3f10d627bf12d0bf3d12d03f3f594dea3da8a4073fdea840bf00000000c29328bf000080bf5a3834bf1c3cc03d5a38343f5a3834bf1c3cc03d5a38343f0000003ef9a8073ff40435bf00000000f40435bf000080bf12d03fbf12d0bf3d0fd6273f12d03fbf12d0bf3d0fd6273f53d90a3ea8a4073fc29328bf00000000dea840bf000080bf2f794abf2c90be3d24d51a3f2f794abf2c90be3d24d51a3f409a153edf97073fda811bbf00000000095b4bbf000080bfb31954bf9f88bc3d77660d3fb31954bf9f88bc3d77660d3fa42b203e1c83073fd5000ebf00000000400155bf000080bfb1a25cbf5fccb93d0379ff3eb1a25cbf5fccb93d0379ff3eba782a3e2267073fea4300bf00000000948c5dbf000080bf1c1064bf4a73b63d1b10e43e1c1064bf4a73b63d1b10e43eec6f343ee444073f2df9e4be000000002ef964bf000080bf9d676abf1698b23d19ebc83e9d676abf1698b23d19ebc83e4d033e3e751d073fcaafc9be00000000164d6bbf000080bfbeb66fbf5c56ae3d5b56ae3ebeb66fbf5c56ae3d5b56ae3ebf28473ef0f1063ff2f8aebe000000004e9670bf000080bfc21074bfe0c8a93dc58f943ec21074bfe0c8a93dc58f943ec2d94f3e66c3063f231395be0000000094e874bf000080bf7f8c77bf5508a53d7e8c773e7f8c77bf5508a53d7e8c773e1f13583ed592063f415b78be00000000425b78bf000080bf83427abf912aa03d3735483e83427abf912aa03d3735483e5bd45f3e1c61063fadd248be0000000056077bbf000080bf874b7cbf2c429b3d2b421b3e874b7cbf2c429b3d2b421b3e3c1f673ef82e063fe0b41bbe00000000ee057dbf000080bf5cbf7dbf6f5e963dab8de13d5cbf7dbf6f5e963dab8de13d35f76d3e06fd053ff029e2bd000000002a6f7ebf000080bf2cb47ebf878b913d868b913d2cb47ebf878b913d868b913df160743ec3cb053ff8e991bd0000000074597fbf000080bf0d3e7fbfc9d28c3dd1d20c3d0d3e7fbfc9d28c3dd1d20c3de5617a3e8c9b053f58280dbd0000000012d97fbf000080bfd96e7fbf1e3b883d00000000d96e7fbf1e3b883d000000000000803eaa6c053f0000008000000000000080bf000080bf0d3e7fbfc9d28c3dc9d20cbd0d3e7fbfc9d28c3dc9d20cbd0dcf823e8c9b053f50280d3d0000000012d97fbf000080bf2cb47ebf878b913d878b91bd2cb47ebf878b913d878b91bd87cf853ec3cb053ff9e9913d0000000074597fbf000080bfff617ebf925c113ddb0adabdff617ebf925c113ddb0adabd96b2883e7ae4023f0b2eda3d000000000c8b7ebf000080bffa107dbf19f7153d19f715befa107dbf19f7153d19f715be2afc8b3ef0fb023fdb10163e00000000713c7dbf000080bfeb367bbff3971a3df03d41beeb367bbff3971a3df03d41be4c7b8f3e8713033f3661413e00000000c6647bbf000080bf39be78bf10321f3d18cb6ebe39be78bf10321f3d18cb6ebea531933efb2a033f52f96e3e0000000060ee78bf000080bf499075bf86b5233dd53e8fbe499075bf86b5233dd53e8fbe2920973efc41033f295c8f3e0000000090c275bf000080bf6a9671bf980f283d980fa8be6a9671bf980f283d980fa8bedd469b3e2b58033fdb33a83e000000008bca71bf000080bf0abb6cbff02a2c3d4eb0c1be0abb6cbff02a2c3d4eb0c1be9fa49f3e1a6d033f2adcc13e00000000a5f06cbf000080bf42eb66bf32f02f3d3fecdbbe42eb66bf32f02f3d3fecdbbeec36a43e5280033f4120dc3e00000000de2167bf000080bfa81860bfed46333d8681f6bea81860bfed46333d8681f6beb1f9a83e5891033f0fbef63e00000000b04f60bf000080bf2e3b58bfe416363d2b9108bf2e3b58bfe416363d2b9108bf34e7ad3eae9f033fc4b3083f00000000f67158bf000080bfe0524fbfaa49383ddabb15bfe0524fbfaa49383ddabb15bf17f8b23ee3aa033fb5e2153f00000000ad884fbf000080bf256945bf5fcc393dd39222bf256945bf5fcc393dd39222bf7c23b83e97b2033fb6bd223f00000000389d45bf000080bf54913abf54913a3d3fe82ebf54913abf54913a3d3fe82ebf4e5fbd3e83b6033fc4162f3f00000000f3c23abf000080bf3fe82ebf54913a3d54913abf3fe82ebf54913a3d54913abfb1a0c23e83b6033ff3c23a3f00000000c4162fbf000080bfd39222bf5fcc393d256945bfd39222bf5fcc393d256945bf83dcc73e97b2033f389d453f00000000b6bd22bf000080bfdabb15bfa949383dde524fbfdabb15bfa949383dde524fbfe807cd3ee3aa033fac884f3f00000000b6e215bf000080bf2b9108bfe416363d2e3b58bf2b9108bfe416363d2e3b58bfcc18d23eae9f033ff671583f00000000c4b308bf000080bf8781f6beed46333da81860bf8781f6beed46333da81860bf4f06d73e5891033faf4f603f000000000fbef6be000080bf3fecdbbe32f02f3d42eb66bf3fecdbbe32f02f3d42eb66bf13c9db3e5280033fde21673f000000004120dcbe000080bf4fb0c1bef02a2c3d0abb6cbf4fb0c1bef02a2c3d0abb6cbf605be03e1a6d033fa5f06c3f000000002bdcc1be000080bf980fa8be980f283d6a9671bf980fa8be980f283d6a9671bf23b9e43e2b58033f8bca713f00000000db33a8be000080bfd73e8fbe86b5233d499075bfd73e8fbe86b5233d499075bfd7dfe83efc41033f8fc2753f000000002a5c8fbe000080bf18cb6ebe10321f3d39be78bf18cb6ebe10321f3d39be78bf5aceec3efb2a033f60ee783f0000000052f96ebe000080bff23d41bef3971a3deb367bbff23d41bef3971a3deb367bbfb384f03e8713033fc6647b3f00000000386141be000080bf19f715be19f7153dfa107dbf19f715be19f7153dfa107dbfd503f43ef0fb023f713c7d3f00000000db1016be000080bf19ebc8be1698b23d9d676abf19ebc8be1698b23d9d676abfa601df3e751d073f164d6b3f00000000caafc9be000080bf1b10e4be4a73b63d1c1064bf1b10e4be4a73b63d1c1064bff637da3ee444073f2ef9643f000000002df9e4be000080bf0379ffbe5fccb93db1a25cbf0379ffbe5fccb93db1a25cbf5d3cd53e2267073f948c5d3f00000000ea4300bf000080bf77660dbf9f88bc3db31954bf77660dbf9f88bc3db31954bfd215d03e1c83073f4001553f00000000d5000ebf000080bf24d51abf2c90be3d2f794abf24d51abf2c90be3d2f794abf1fcdca3edf97073f095b4b3f00000000da811bbf000080bf0fd627bf12d0bf3d12d03fbf0fd627bf12d0bf3d12d03fbfa96cc53ea8a4073fdea8403f00000000c29328bf000080bf5a3834bf1c3cc03d5a3834bf5a3834bf1c3cc03d5a3834bf0000c03ef9a8073ff404353f00000000f40435bf000080bf12d03fbf12d0bf3d10d627bf12d03fbf12d0bf3d10d627bf5693ba3ea8a4073fc293283f00000000dea840bf000080bf2f794abf2c90be3d24d51abf2f794abf2c90be3d24d51abfe032b53edf97073fda811b3f00000000095b4bbf000080bfb31954bf9f88bc3d77660dbfb31954bf9f88bc3d77660dbf2eeaaf3e1c83073fd5000e3f00000000400155bf000080bfb1a25cbf5fccb93d0379ffbeb1a25cbf5fccb93d0379ffbea2c3aa3e2267073fea43003f00000000948c5dbf000080bf1c1064bf4a73b63d1c10e4be1c1064bf4a73b63d1c10e4be09c8a53ee444073f2ef9e43e000000002ef964bf000080bf9d676abf1698b23d19ebc8be9d676abf1698b23d19ebc8be59fea03e751d073fcaafc93e00000000164d6bbf000080bfbeb66fbf5c56ae3d5c56aebebeb66fbf5c56ae3d5c56aebea06b9c3ef0f1063ff3f8ae3e000000004e9670bf000080bfc21074bfe0c8a93dc48f94bec21074bfe0c8a93dc48f94be1e13983e66c3063f2213953e0000000094e874bf000080bf7f8c77bf5508a53d7f8c77be7f8c77bf5508a53d7f8c77be71f6933ed592063f425b783e00000000425b78bf000080bf83427abf912aa03d353548be83427abf912aa03d353548bed215903e1c61063fabd2483e0000000056077bbf000080bf874b7cbf2c429b3d2c421bbe874b7cbf2c429b3d2c421bbe61708c3ef82e063fe1b41b3e00000000ee057dbf000080bf5cbf7dbf6f5e963da78de1bd5cbf7dbf6f5e963da78de1bd6504893e06fd053fec29e23d000000002a6f7ebf000080bf5cbf7dbfa78de13d6f5e96bd5cbf7dbfa78de13d6f5e96bd6c06863e23fe083f094a973d00000000f04c7fbf000080bfff617ebfdb0ada3d925c11bdff617ebfdb0ada3d925c11bdb6e8823e2eb1083f4831123d000000003ed67fbf000080bf1fa47ebfcabcd23d000000001fa47ebfcabcd23d000000000000803e5c66083f0000008000000000000080bf000080bfff617ebfdb0ada3d975c113dff617ebfdb0ada3d975c113d942e7a3e2eb1083f4d3112bd000000003ed67fbf000080bf5cbf7dbfa78de13d6c5e963d5cbf7dbfa78de13d6c5e963d26f3733e23fe083f064a97bd00000000f04c7fbf000080bf87a87cbf1a39e93d1a39e93d87a87cbf1a39e93d1a39e93d2c476d3ec14c093f0bc0eabd000000000c507ebf000080bf55077bbfcdfcf03d8aa8203e55077bbfcdfcf03d8aa8203ea924663e619c093f44c821be00000000e8c87cbf000080bf67c378bf67c3f83d7e4d4f3e67c378bf67c3f83d7e4d4f3e99865e3e28ec093f60d950be00000000769e7abf000080bfa7c275bf0939003e0939803ea7c275bf0939003e0939803e6869563e023b0a3f713d81be00000000c4b577bf000080bf45ea71bf26f4033e2df2993e45ea71bf26f4033e2df2993e91cb4d3ea2870a3f833d9bbe00000000f1f273bf000080bf0d206dbf0780073eb6aab43e0d206dbf0780073eb6aab43e3fae443e81d00a3f0645b6be00000000963a6fbf000080bf4b4c67bf60c70a3e102bd03e4b4c67bf60c70a3e102bd03ee5153b3ee8130b3f521bd2be00000000b07369bf000080bf0e5c60bf67b30d3e012bec3e0e5c60bf67b30d3e012bec3ed80a313eff4f0b3f5076eebe00000000008a62bf000080bfa04358bf152d103e5429043fa04358bf152d103e5429043fb099263eec820b3fc07d05bf00000000ae705abf000080bfe7004fbfc11e123ec11e123fe7004fbfc11e123ec11e123f54d31b3eeeaa0b3f83a113bf00000000cf2451bf000080bf429d44bff275133ec6bf1f3f429d44bff275133ec6bf1f3fb8cc103e87c60b3f856e21bf0000000068af46bf000080bf662e39bf1f25143efad52c3f662e39bf1f25143efad52c3f199e053e9dd40b3f69ac2ebf000000006f263bbf000080bff9d52cbf1f25143e662e393ff9d52cbf1f25143e662e393fcbc3f43d9dd40b3f70263bbf0000000069ac2ebf000080bfc6bf1fbff275133e429d443fc6bf1fbff275133e429d443f9066de3d87c60b3f68af46bf00000000856e21bf000080bfc11e12bfc11e123ee7004f3fc11e12bfc11e123ee7004f3f5659c83deeaa0b3fcf2451bf0000000083a113bf000080bf532904bf152d103ea043583f532904bf152d103ea043583f9eccb23dec820b3fae705abf00000000bf7d05bf000080bf012becbe67b30d3e0e5c603f012becbe67b30d3e0e5c603f4dea9d3dff4f0b3f008a62bf000000005076eebe000080bf102bd0be60c70a3e4b4c673f102bd0be60c70a3e4b4c673f36d4893de8130b3fb07369bf00000000521bd2be000080bfb4aab4be0780073e0d206d3fb4aab4be0780073e0d206d3f02476d3d81d00a3f973a6fbf000000000545b6be000080bf2cf299be26f4033e45ea713f2cf299be26f4033e45ea713fb6d1483da2870a3ff1f273bf00000000823d9bbe000080bf093980be0939003ea7c2753f093980be0939003ea7c2753f615a263d023b0a3fc4b577bf00000000713d81be000080bf814d4fbe67c3f83d67c3783f814d4fbe67c3f83d67c3783fa0e5053d28ec093f769e7abf0000000063d950be000080bf89a820becdfcf03d55077b3f89a820becdfcf03d55077b3fb4dace3c619c093fe8c87cbf0000000043c821be000080bf1a39e9bd1a39e93d87a87c3f1a39e9bd1a39e93d87a87c3f9bc6953cc14c093f0c507ebf000000000bc0eabd000080bf6f5e96bda78de13d5cbf7d3f6f5e96bda78de13d5cbf7d3f92cd403c23fe083ff04c7fbf00000000094a97bd000080bf925c11bddb0ada3dff617e3f925c11bddb0ada3dff617e3f792dba3b2eb1083f3ed67fbf00000000483112bd000080bf00000000cabcd23d1fa47e3f00000000cabcd23d1fa47e3f000000805c66083f000080bf0000000000000000000080bf000000001e3b883dd96e7f3f000000001e3b883dd96e7f3f00000080aa6c053f000080bf0000000000000000000080bf00000000c3d0103e546d7d3f00000000c3d0103e546d7d3f0000008015900b3f000080bf0000000000000000000080bf19f715bd19f7153efa107d3f19f715bd19f7153efa107d3f2111c13b18fa0b3f19d37fbf000000008a9917bd000080bf2c429bbd2c421b3e874b7c3f2c429bbd2c421b3e874b7c3fa230483c25670c3ff73e7fbf000000000e139dbd000080bfcdfcf0bd89a8203e55077b3fcdfcf0bd89a8203e55077b3f0cb69b3c7cd60c3f2d2d7ebf000000006902f4bd000080bf5f1d26be5f1d263e0f2c793f5f1d26be5f1d263e0f2c793f0552d73c15470d3f50847cbf00000000355828be000080bf057456be04902b3e069f763f057456be04902b3e069f763fbe8b0b3d9bb70d3f3b287abf00000000288759be000080bfb0b084be96eb303eee43733fb0b084be96eb303eee43733fc0912d3d5e260e3fc3fa76bf0000000053b786be000080bf07549fbee416363e0bfe6e3f07549fbee416363e0bfe6e3faebf513d54910e3fe9dc72bf000000009be8a1be000080bfbaf4babebaf43a3ee8b1693fbaf4babebaf43a3ee8b1693f360d783d1ef60e3fa6b06dbf00000000ec26bebe000080bf5551d7bebd643f3ea147633f5551d7bebd643f3ea147633f0b31903d1a520f3f5d5b67bf00000000222edbbe000080bf2016f4bee644433e83ad5b3f2016f4bee644433e83ad5b3fd549a53d81a20f3fc5c85fbf0000000031a6f8be000080bf876f08bfad73463ee8da523f876f08bfad73463ee8da523fbb31bb3d93e40f3f12ee56bf0000000084120bbf000080bf009e16bfabd2483eabd2483f009e16bfabd2483eabd2483faebfd13dd215103fcdcc4cbf00000000999919bf000080bfb35b24bf7a494a3ee2a43d3fb35b24bf7a494a3ee2a43d3fe3c1e83d3e34103fd77441bf0000000087a927bf000080bf386f31bf40c84a3e386f313f386f31bf40c84a3e386f313f0000003e893e103ff30435bf00000000f30435bf000080bfe2a43dbf7a494a3eb35b243fe2a43dbf7a494a3eb35b243f0e9f0b3e3e34103f87a927bf00000000d77441bf000080bfabd248bfabd2483eff9d163fabd248bfabd2483eff9d163f2920173ed215103f999919bf00000000cdcc4cbf000080bfe8da52bfad73463e876f083fe8da52bfad73463e876f083f2267223e93e40f3f84120bbf0000000012ee56bf000080bf83ad5bbfe644433e2016f43e83ad5bbfe644433e2016f43e155b2d3e81a20f3f31a6f8be00000000c5c85fbf000080bf9f4763bfbc643f3e5551d73e9f4763bfbc643f3e5551d73e79e7373e1a520f3f232edbbe000000005c5b67bf000080bfe8b169bfbaf43a3eb9f4ba3ee8b169bfbaf43a3eb9f4ba3eb3fc413e1ef60e3feb26bebe00000000a6b06dbf000080bf0bfe6ebfe416363e07549f3e0bfe6ebfe416363e07549f3e14904b3e54910e3f9be8a1be00000000e9dc72bf000080bfee4373bf96eb303eb1b0843eee4373bf96eb303eb1b0843e8f9b543e5e260e3f54b786be00000000c3fa76bf000080bf069f76bf04902b3e0374563e069f76bf04902b3e0374563e111d5d3e9bb70d3f268759be000000003b287abf000080bf0f2c79bf5f1d263e5f1d263e0f2c79bf5f1d263e5f1d263ebf15653e15470d3f355828be0000000050847cbf000080bf55077bbf89a8203ecefcf03d55077bbf89a8203ecefcf03d3e896c3e7cd60c3f6a02f4bd000000002d2d7ebf000080bf874b7cbf2c421b3e30429b3d874b7cbf2c421b3e30429b3df57c733e25670c3f12139dbd00000000f73e7fbf000080bffa107dbf19f7153e14f7153dfa107dbf19f7153e14f7153d77f7793e18fa0b3f859917bd0000000019d37fbf000080bf546d7dbfc3d0103e00000000546d7dbfc3d0103e000000000000803e15900b3f0000008000000000000080bf000080bffa107dbf19f7153e19f715bdfa107dbf19f7153e19f715bd4404833e18fa0b3f8a99173d0000000019d37fbf000080bf874b7cbf2c421b3e2c429bbd874b7cbf2c421b3e2c429bbd8541863e25670c3f0e139d3d00000000f73e7fbf000080bf87a87cbf1a39e93d1a39e9bd87a87cbf1a39e93d1a39e9bd695c893ec14c093f0bc0ea3d000000000c507ebf000080bf55077bbfcdfcf03d89a820be55077bbfcdfcf03d89a820beabed8c3e619c093f43c8213e00000000e8c87cbf000080bf67c378bf67c3f83d814d4fbe67c378bf67c3f83d814d4fbeb4bc903e28ec093f63d9503e00000000769e7abf000080bfa7c275bf0939003e093980bea7c275bf0939003e093980be4ccb943e023b0a3f713d813e00000000c4b577bf000080bf45ea71bf26f4033e2cf299be45ea71bf26f4033e2cf299be371a993ea2870a3f823d9b3e00000000f1f273bf000080bf0d206dbf0780073eb4aab4be0d206dbf0780073eb4aab4bee0a89d3e81d00a3f0545b63e00000000973a6fbf000080bf4b4c67bf60c70a3e102bd0be4b4c67bf60c70a3e102bd0be0d75a23ee8130b3f521bd23e00000000b07369bf000080bf0e5c60bf67b30d3e012becbe0e5c60bf67b30d3e012becbe937aa73eff4f0b3f5076ee3e00000000008a62bf000080bfa04358bf152d103e532904bfa04358bf152d103e532904bf27b3ac3eec820b3fbf7d053f00000000ae705abf000080bfe7004fbfc11e123ec11e12bfe7004fbfc11e123ec11e12bf5616b23eeeaa0b3f83a1133f00000000cf2451bf000080bf429d44bff275133ec6bf1fbf429d44bff275133ec6bf1fbfa399b73e87c60b3f856e213f0000000068af46bf000080bf662e39bf1f25143ef9d52cbf662e39bf1f25143ef9d52cbff230bd3e9dd40b3f69ac2e3f0000000070263bbf000080bffad52cbf1f25143e662e39bffad52cbf1f25143e662e39bf0dcfc23e9dd40b3f6f263b3f0000000069ac2ebf000080bfc6bf1fbff275133e429d44bfc6bf1fbff275133e429d44bf5c66c83e87c60b3f68af463f00000000856e21bf000080bfc11e12bfc11e123ee7004fbfc11e12bfc11e123ee7004fbfaae9cd3eeeaa0b3fcf24513f0000000083a113bf000080bf542904bf152d103ea04358bf542904bf152d103ea04358bfd84cd33eec820b3fae705a3f00000000c07d05bf000080bf012becbe67b30d3e0e5c60bf012becbe67b30d3e0e5c60bf6c85d83eff4f0b3f008a623f000000005076eebe000080bf102bd0be60c70a3e4b4c67bf102bd0be60c70a3e4b4c67bff28add3ee8130b3fb073693f00000000521bd2be000080bfb6aab4be0780073e0d206dbfb6aab4be0780073e0d206dbf1f57e23e81d00a3f963a6f3f000000000645b6be000080bf5b56aebe5c56ae3dbeb66fbf5b56aebe5c56ae3dbeb66fbf5f94e33ef0f1063f4e96703f00000000f2f8aebe000080bfc58f94bee0c8a93dc21074bfc58f94bee0c8a93dc21074bfe1ece73e66c3063f94e8743f00000000231395be000080bf7e8c77be5508a53d7f8c77bf7e8c77be5508a53d7f8c77bf8f09ec3ed592063f425b783f00000000415b78be000080bf373548be912aa03d83427abf373548be912aa03d83427abf2eeaef3e1c61063f56077b3f00000000add248be000080bf2b421bbe2c429b3d874b7cbf2b421bbe2c429b3d874b7cbf9e8ff33ef82e063fee057d3f00000000e0b41bbe000080bfab8de1bd6f5e963d5cbf7dbfab8de1bd6f5e963d5cbf7dbf9afbf63e06fd053f2a6f7e3f00000000f029e2bd000080bf868b91bd878b913d2cb47ebf868b91bd878b913d2cb47ebf7830fa3ec3cb053f74597f3f00000000f8e991bd000080bfd1d20cbdc9d28c3d0d3e7fbfd1d20cbdc9d28c3d0d3e7fbff330fd3e8c9b053f12d97f3f0000000058280dbd000080bf000000001e3b883dd96e7fbf000000001e3b883dd96e7fbf0000003faa6c053f0000803f0000000000000000000080bfc9d20c3dc9d28c3d0d3e7fbfc9d20c3dc9d28c3d0d3e7fbf8667013f8c9b053f12d97f3f0000000050280d3d000080bf878b913d878b913d2cb47ebf878b913d878b913d2cb47ebfc4e7023fc3cb053f74597f3f00000000f9e9913d000080bfa78de13d6f5e963d5cbf7dbfa78de13d6f5e963d5cbf7dbf3282043f06fd053f2a6f7e3f00000000ec29e23d000080bf2c421b3e2c429b3d874b7cbf2c421b3e2c429b3d874b7cbf3138063ff82e063fee057d3f00000000e1b41b3e000080bf3535483e912aa03d83427abf3535483e912aa03d83427abfe90a083f1c61063f56077b3f00000000abd2483e000080bf7f8c773e5508a53d7f8c77bf7f8c773e5508a53d7f8c77bf38fb093fd592063f425b783f00000000425b783e000080bfc48f943ee0c8a93dc21074bfc48f943ee0c8a93dc21074bf90090c3f66c3063f94e8743f000000002213953e000080bf5c56ae3e5c56ae3dbeb66fbf5c56ae3e5c56ae3dbeb66fbfd0350e3ff0f1063f4e96703f00000000f3f8ae3e000080bf19ebc83e1698b23d9d676abf19ebc83e1698b23d9d676abf2d7f103f751d073f164d6b3f00000000caafc93e000080bf1c10e43e4a73b63d1c1064bf1c10e43e4a73b63d1c1064bf05e4123fe444073f2ef9643f000000002ef9e43e000080bf0379ff3e5fccb93db1a25cbf0379ff3e5fccb93db1a25cbfd261153f2267073f948c5d3f00000000ea43003f000080bf77660d3f9f88bc3db31954bf77660d3f9f88bc3db31954bf17f5173f1c83073f4001553f00000000d5000e3f000080bf24d51a3f2c90be3d2f794abf24d51a3f2c90be3d2f794abf70991a3fdf97073f095b4b3f00000000da811b3f000080bf10d6273f12d0bf3d12d03fbf10d6273f12d0bf3d12d03fbfac491d3fa8a4073fdea8403f00000000c293283f000080bf5a38343f1c3cc03d5a3834bf5a38343f1c3cc03d5a3834bf0000203ff9a8073ff404353f00000000f404353f000080bf12d03f3f12d0bf3d0fd627bf12d03f3f12d0bf3d0fd627bf55b6223fa8a4073fc293283f00000000dea8403f000080bf2f794a3f2c90be3d24d51abf2f794a3f2c90be3d24d51abf9066253fdf97073fda811b3f00000000095b4b3f000080bfb319543f9f88bc3d77660dbfb319543f9f88bc3d77660dbfe90a283f1c83073fd5000e3f000000004001553f000080bfb1a25c3f5fccb93d0379ffbeb1a25c3f5fccb93d0379ffbe2f9e2a3f2267073fea43003f00000000948c5d3f000080bf1c10643f4a73b63d1b10e4be1c10643f4a73b63d1b10e4befc1b2d3fe444073f2df9e43e000000002ef9643f000080bf9d676a3f1698b23d19ebc8be9d676a3f1698b23d19ebc8bed4802f3f751d073fcaafc93e00000000164d6b3f000080bfbeb66f3f5c56ae3d5b56aebebeb66f3f5c56ae3d5b56aebe30ca313ff0f1063ff2f8ae3e000000004e96703f000080bfc210743fe0c8a93dc58f94bec210743fe0c8a93dc58f94be71f6333f66c3063f2313953e0000000094e8743f000080bf7f8c773f5508a53d7e8c77be7f8c773f5508a53d7e8c77bec804363fd592063f415b783e00000000425b783f000080bf83427a3f912aa03d373548be83427a3f912aa03d373548be17f5373f1c61063fadd2483e0000000056077b3f000080bf874b7c3f2c429b3d2b421bbe874b7c3f2c429b3d2b421bbed0c7393ff82e063fe0b41b3e00000000ee057d3f000080bf5cbf7d3f6f5e963dab8de1bd5cbf7d3f6f5e963dab8de1bdce7d3b3f06fd053ff029e23d000000002a6f7e3f000080bf2cb47e3f878b913d868b91bd2cb47e3f878b913d868b91bd3c183d3fc3cb053ff8e9913d0000000074597f3f000080bf0d3e7f3fc9d28c3dd1d20cbd0d3e7f3fc9d28c3dd1d20cbd7a983e3f8c9b053f58280d3d0000000012d97f3f000080bfa7c2753f0939003e093980bea7c2753f0939003e093980be5a9a353f023b0a3f713d813e00000000c4b5773f000080bf45ea713f26f4033e2df299be45ea713f26f4033e2df299bee472333fa2870a3f833d9b3e00000000f1f2733f000080bf0d206d3f0780073eb6aab4be0d206d3f0780073eb6aab4be902b313f81d00a3f0645b63e00000000963a6f3f000080bf4b4c673f60c70a3e102bd0be4b4c673f60c70a3e102bd0be7ac52e3fe8130b3f521bd23e00000000b073693f000080bf0e5c603f67b30d3e012becbe0e5c603f67b30d3e012becbeb6422c3fff4f0b3f5076ee3e00000000008a623f000080bfa043583f152d103e542904bfa043583f152d103e542904bf6ca6293fec820b3fc07d053f00000000ae705a3f000080bfe7004f3fc11e123ec11e12bfe7004f3fc11e123ec11e12bfd5f4263feeaa0b3f83a1133f00000000cf24513f000080bf429d443ff275133ec6bf1fbf429d443ff275133ec6bf1fbf2e33243f87c60b3f856e213f0000000068af463f000080bf662e393f1f25143efad52cbf662e393f1f25143efad52cbf8767213f9dd40b3f69ac2e3f000000006f263b3f000080bff9d52c3f1f25143e662e39bff9d52c3f1f25143e662e39bf7a981e3f9dd40b3f70263b3f0000000069ac2e3f000080bfc6bf1f3ff275133e429d44bfc6bf1f3ff275133e429d44bfd2cc1b3f87c60b3f68af463f00000000856e213f000080bfc11e123fc11e123ee7004fbfc11e123fc11e123ee7004fbf2b0b193feeaa0b3fcf24513f0000000083a1133f000080bf5329043f152d103ea04358bf5329043f152d103ea04358bf9459163fec820b3fae705a3f00000000bf7d053f000080bf012bec3e67b30d3e0e5c60bf012bec3e67b30d3e0e5c60bf4abd133fff4f0b3f008a623f000000005076ee3e000080bf102bd03e60c70a3e4b4c67bf102bd03e60c70a3e4b4c67bf873a113fe8130b3fb073693f00000000521bd23e000080bfb4aab43e0780073e0d206dbfb4aab43e0780073e0d206dbf70d40e3f81d00a3f973a6f3f000000000545b63e000080bf2cf2993e26f4033e45ea71bf2cf2993e26f4033e45ea71bf1c8d0c3fa2870a3ff1f2733f00000000823d9b3e000080bf0939803e0939003ea7c275bf0939803e0939003ea7c275bfa6650a3f023b0a3fc4b5773f00000000713d813e000080bf814d4f3e67c3f83d67c378bf814d4f3e67c3f83d67c378bf5a5e083f28ec093f769e7a3f0000000063d9503e000080bf89a8203ecdfcf03d55077bbf89a8203ecdfcf03d55077bbfd676063f619c093fe8c87c3f0000000043c8213e000080bf1a39e93d1a39e93d87a87cbf1a39e93d1a39e93d87a87cbf35ae043fc14c093f0c507e3f000000000bc0ea3d000080bf6f5e963da78de13d5cbf7dbf6f5e963da78de13d5cbf7dbf3603033f23fe083ff04c7f3f00000000094a973d000080bf925c113ddb0ada3dff617ebf925c113ddb0ada3dff617ebf5b74013f2eb1083f3ed67f3f000000004831123d000080bf00000000cabcd23d1fa47ebf00000000cabcd23d1fa47ebf0000003f5c66083f0000803f0000000000000000000080bf975c11bddb0ada3dff617ebf975c11bddb0ada3dff617ebf4a17fd3e2eb1083f3ed67f3f000000004d3112bd000080bf6c5e96bda78de13d5cbf7dbf6c5e96bda78de13d5cbf7dbf93f9f93e23fe083ff04c7f3f00000000064a97bd000080bf1a39e9bd1a39e93d87a87cbf1a39e9bd1a39e93d87a87cbf96a3f63ec14c093f0c507e3f000000000bc0eabd000080bf8aa820becdfcf03d55077bbf8aa820becdfcf03d55077bbf5412f33e619c093fe8c87c3f0000000044c821be000080bf7e4d4fbe67c3f83d67c378bf7e4d4fbe67c3f83d67c378bf4c43ef3e28ec093f769e7a3f0000000060d950be000080bf093980be0939003ea7c275bf093980be0939003ea7c275bfb334eb3e023b0a3fc4b5773f00000000713d81be000080bf2df299be26f4033e45ea71bf2df299be26f4033e45ea71bfc8e5e63ea2870a3ff1f2733f00000000833d9bbe000080bf07549fbee416363e0bfe6ebf07549fbee416363e0bfe6ebf0ac8e53e54910e3fe9dc723f000000009be8a1be000080bfb9f4babebaf43a3ee8b169bfb9f4babebaf43a3ee8b169bf59fee03e1ef60e3fa6b06d3f00000000eb26bebe000080bf5551d7bebc643f3e9f4763bf5551d7bebc643f3e9f4763bfbcf3db3e1a520f3f5c5b673f00000000232edbbe000080bf2016f4bee644433e83ad5bbf2016f4bee644433e83ad5bbf8aadd63e81a20f3fc5c85f3f0000000031a6f8be000080bf876f08bfad73463ee8da52bf876f08bfad73463ee8da52bf9133d13e93e40f3f12ee563f0000000084120bbf000080bfff9d16bfabd2483eabd248bfff9d16bfabd2483eabd248bf1590cb3ed215103fcdcc4c3f00000000999919bf000080bfb35b24bf7a494a3ee2a43dbfb35b24bf7a494a3ee2a43dbf87cfc53e3e34103fd774413f0000000087a927bf000080bf386f31bf40c84a3e386f31bf386f31bf40c84a3e386f31bf0000c03e893e103ff304353f00000000f30435bf000080bfe2a43dbf7a494a3eb35b24bfe2a43dbf7a494a3eb35b24bf7930ba3e3e34103f87a9273f00000000d77441bf000080bfabd248bfabd2483e009e16bfabd248bfabd2483e009e16bfec6fb43ed215103f9999193f00000000cdcc4cbf000080bfe8da52bfad73463e876f08bfe8da52bfad73463e876f08bf6eccae3e93e40f3f84120b3f0000000012ee56bf000080bf83ad5bbfe644433e2016f4be83ad5bbfe644433e2016f4be7652a93e81a20f3f31a6f83e00000000c5c85fbf000080bfa14763bfbd643f3e5551d7bea14763bfbd643f3e5551d7be420ca43e1a520f3f222edb3e000000005d5b67bf000080bfe8b169bfbaf43a3ebaf4babee8b169bfbaf43a3ebaf4babea7019f3e1ef60e3fec26be3e00000000a6b06dbf000080bf0bfe6ebfe416363e07549fbe0bfe6ebfe416363e07549fbef6379a3e54910e3f9be8a13e00000000e9dc72bf000080bfee4373bf96eb303eb0b084beee4373bf96eb303eb0b084be38b2953e5e260e3f53b7863e00000000c3fa76bf000080bf069f76bf04902b3e057456be069f76bf04902b3e057456be7871913e9bb70d3f2887593e000000003b287abf000080bf0f2c79bf5f1d263e5f1d26be0f2c79bf5f1d263e5f1d26be20758d3e15470d3f3558283e0000000050847cbf000080bf55077bbf89a8203ecdfcf0bd55077bbf89a8203ecdfcf0bd60bb893e7cd60c3f6902f43d000000002d2d7ebf000080bf83427abf3535483e912aa0bd83427abf3535483e912aa0bd5081863e0b09103f7651a33d00000000492f7fbf000080bfeb367bbff03d413ef3971abdeb367bbff03d413ef3971abdf121833e71780f3f0c6c1d3d0000000094cf7fbf000080bf5eb87bbf9b753a3e000000005eb87bbf9b753a3e000000000000803ed5eb0e3f0000008000000000000080bf000080bfeb367bbff03d413eed971a3deb367bbff03d413eed971a3d1ebc793e71780f3f066c1dbd0000000094cf7fbf000080bf83427abf3535483e942aa03d83427abf3535483e942aa03d5ffd723e0b09103f7951a3bd00000000492f7fbf000080bf67c378bf814d4f3e66c3f83d67c378bf814d4f3e66c3f83db8bb6b3e879c103feb05febd00000000ec057ebf000080bf069f76bf0574563e02902b3e069f76bf0574563e02902b3ef1ef633e6331113f0d742fbe00000000d6367cbf000080bf71b873bf67905d3e67905d3e71b873bf67905d3e67905d3e37945b3ea6c5113fa4f062be000000004ea279bf000080bf4ff16fbf4b84643e2c1c893e4ff16fbf4b84643e2c1c893eeba4523ed656123f3ea88cbe000000006f2676bf000080bf5d2b6bbf5d2b6b3e5b9ea43e5d2b6bbf5d2b6b3e5b9ea43e6a21493efae1123fb123a9be00000000b3a071bf000080bf894a65bfef5b713e5916c13e894a65bfef5b713e5916c13e0a0d3f3ea263133f69afc6be000000004cf06bbf000080bfae375ebf89e8763ead37de3eae375ebf89e8763ead37de3eec6f343e09d8133f2df9e4be000000002ef964bf000080bf9ee355bf5fa27b3e5fa2fb3e9ee355bf5fa27b3e5fa2fb3eab57293e4c3b143f12cc01bf00000000b9a75cbf000080bf374a4cbfc55c7f3e06730c3f374a4cbfc55c7f3e06730c3fa9d71d3eb089143f090811bf000000006af452bf000080bfd77441bf8ff8803edec31a3fd77441bf8ff8803edec31a3fca08123ef8bf143f03ec1fbf0000000005e747bf000080bf9f7b35bf72a1813e1485283f9f7b35bf72a1813e1485283f8908063ebfdb143f0b322ebf000000005a983bbf000080bf148528bf72a1813e9f7b353f148528bf72a1813e9f7b353fedeef33dbfdb143f5a983bbf000000000b322ebf000080bfdfc31abf8ff8803ed774413fdfc31abf8ff8803ed774413f6ceedb3df8bf143f04e747bf0000000003ec1fbf000080bf06730cbfc55c7f3e374a4c3f06730cbfc55c7f3e374a4c3fae50c43db089143f6af452bf00000000090811bf000080bf5fa2fbbe5fa27b3e9ee3553f5fa2fbbe5fa27b3e9ee3553fa950ad3d4c3b143fb9a75cbf0000000012cc01bf000080bfae37debe89e8763eae375e3fae37debe89e8763eae375e3f2920973d09d8133f2ef964bf000000002ef9e4be000080bf5916c1beef5b713e894a653f5916c1beef5b713e894a653fece5813da263133f4cf06bbf0000000069afc6be000080bf5a9ea4be5d2b6b3e5d2b6b3f5a9ea4be5d2b6b3e5d2b6b3f547a5b3dfae1123fb3a071bf00000000b023a9be000080bf2d1c89be4b84643e4ff16f3f2d1c89be4b84643e4ff16f3f556c353dd656123f6f2676bf000000003fa88cbe000080bf67905dbe67905d3e71b8733f67905dbe67905d3e71b8733f21af113da6c5113f4ea279bf00000000a4f062be000080bf04902bbe0574563e069f763f04902bbe0574563e069f763f7d80e03c6331113fd6367cbf000000000f742fbe000080bf67c3f8bd814d4f3e67c3783f67c3f8bd814d4f3e67c3783f3a22a23c879c103fec057ebf00000000ec05febd000080bf912aa0bd3535483e83427a3f912aa0bd3535483e83427a3f0b2a503c0b09103f492f7fbf000000007651a3bd000080bff3971abdf03d413eeb367b3ff3971abdf03d413eeb367b3f417cc83b71780f3f94cf7fbf000000000c6c1dbd000080bf000000009b753a3e5eb87b3f000000009b753a3e5eb87b3f00000080d5eb0e3f000080bf0000000000000000000080bf000000009241663eb371793f000000009241663eb371793f00000080327b123f000080bf0000000000000000000080bf10321fbd18cb6e3e39be783f10321fbd18cb6e3e39be783f157fd03bdd2d133fa2cb7fbf0000000087b523bd000080bf5508a5bd7f8c773e7f8c773f5508a5bd7f8c773e7f8c773f73cc583c7be5133f9f1d7fbf00000000c013aabd000080bf093900be0939803ea7c2753f093900be0939803ea7c2753f171ba93c7aa0143f86d97dbf000000007d7104be000080bf96eb30beb0b0843eee43733f96eb30beb0b0843eee43733f147eea3cb55c153fe6de7bbf00000000bf2d37be000080bf4b8464be2d1c893e4ff16f3f4b8464be2d1c893e4ff16f3f7a60183d6317163fd40979bf00000000ee2d6dbe000080bf77668dbe77668d3ec7aa6b3f77668dbe77668d3ec7aa6b3f12003e3d09cd163f1b3475bf00000000431f93be000080bf14b5a9bea376913e2c51663f14b5a9bea376913e2c51663f2d1d663d7d79173f413770bf000000004c00b1be000080bf5aebc6be8330953ec5c85f3f5aebc6be8330953ec5c85f3fe751883d0218183f8eef69bf0000000062f1cfbe000080bff3b0e4bef775983e74fc573ff3b0e4bef775983e74fc573f58b49e3d7ba3183fec3f62bf00000000fa8eefbe000080bfae4c01bfd0289b3e16e14e3fae4c01bfd0289b3e16e14e3f3813b63dc216193f6a1659bf0000000003ae07bf000080bf3f1410bf5c2d9d3eb378443f3f1410bf5c2d9d3eb378443f7a3ece3d156d193f8f704ebf000000009c6317bf000080bf226d1ebf226d9e3ea7d4383f226d1ebf226d9e3ea7d4383febf9e63d94a2193fa45e42bf00000000449a26bf000080bf38162cbf6fd99e3e38162c3f38162cbf6fd99e3e38162c3f0000003eb5b4193ff30435bf00000000f30435bf000080bfa8d438bf226d9e3e216d1e3fa8d438bf226d9e3e216d1e3f0a830c3e94a2193f439a26bf00000000a55e42bf000080bfb37844bf5c2d9d3e3f14103fb37844bf5c2d9d3e3f14103fc2e0183e156d193f9c6317bf000000008f704ebf000080bf17e14ebfd1289b3eae4c013f17e14ebfd1289b3eae4c013f64f6243ec216193f03ae07bf000000006b1659bf000080bf74fc57bff775983ef3b0e43e74fc57bff775983ef3b0e43ed4a5303e7ba3183ffa8eefbe00000000ec3f62bf000080bfc5c85fbf8330953e59ebc63ec5c85fbf8330953e59ebc63e0cd73b3e0218183f61f1cfbe000000008eef69bf000080bf2c5166bfa376913e14b5a93e2c5166bfa376913e14b5a93eb478463e7d79173f4c00b1be00000000413770bf000080bfc7aa6bbf77668d3e77668d3ec7aa6bbf77668d3e77668d3efb7f503e09cd163f431f93be000000001b3475bf000080bf4ff16fbf2d1c893e4d84643e4ff16fbf2d1c893e4d84643ee0e7593e6317163ff02d6dbe00000000d40979bf000080bfee4373bfb0b0843e95eb303eee4373bfb0b0843e95eb303e3db0623eb55c153fbe2d37be00000000e6de7bbf000080bfa7c275bf0939803e0b39003ea7c275bf0939803e0b39003e9ddc6a3e7aa0143f807104be0000000086d97dbf000080bf7f8c77bf7f8c773e5408a53d7f8c77bf7f8c773e5408a53d3873723e7be5133fbf13aabd000000009f1d7fbf000080bf39be78bf18cb6e3e18321f3d39be78bf18cb6e3e18321f3d077c793edd2d133f8fb523bd00000000a2cb7fbf000080bfb37179bf9241663e00000000b37179bf9241663e000000000000803e327b123f0000008000000000000080bf000080bf39be78bf18cb6e3e10321fbd39be78bf18cb6e3e10321fbdfc41833edd2d133f87b5233d00000000a2cb7fbf000080bf7f8c77bf7f8c773e5508a5bd7f8c77bf7f8c773e5508a5bd63c6863e7be5133fc013aa3d000000009f1d7fbf000080bf67c378bf814d4f3e67c3f8bd67c378bf814d4f3e67c3f8bd23228a3e879c103fec05fe3d00000000ec057ebf000080bf069f76bf0574563e04902bbe069f76bf0574563e04902bbe08088e3e6331113f0f742f3e00000000d6367cbf000080bf71b873bf67905d3e67905dbe71b873bf67905d3e67905dbee435923ea6c5113fa4f0623e000000004ea279bf000080bf4ff16fbf4b84643e2d1c89be4ff16fbf4b84643e2d1c89be8aad963ed656123f3fa88c3e000000006f2676bf000080bf5d2b6bbf5d2b6b3e5a9ea4be5d2b6bbf5d2b6b3e5a9ea4be4b6f9b3efae1123fb023a93e00000000b3a071bf000080bf894a65bfef5b713e5916c1be894a65bfef5b713e5916c1be7a79a03ea263133f69afc63e000000004cf06bbf000080bfae375ebf89e8763eae37debeae375ebf89e8763eae37debe09c8a53e09d8133f2ef9e43e000000002ef964bf000080bf9ee355bf5fa27b3e5fa2fbbe9ee355bf5fa27b3e5fa2fbbe2b54ab3e4c3b143f12cc013f00000000b9a75cbf000080bf374a4cbfc55c7f3e06730cbf374a4cbfc55c7f3e06730cbf2c14b13eb089143f0908113f000000006af452bf000080bfd77441bf8ff8803edfc31abfd77441bf8ff8803edfc31abf9bfbb63ef8bf143f03ec1f3f0000000004e747bf000080bf9f7b35bf72a1813e148528bf9f7b35bf72a1813e148528bfbbfbbc3ebfdb143f0b322e3f000000005a983bbf000080bf148528bf72a1813e9f7b35bf148528bf72a1813e9f7b35bf4504c33ebfdb143f5a983b3f000000000b322ebf000080bfdec31abf8ff8803ed77441bfdec31abf8ff8803ed77441bf6404c93ef8bf143f05e7473f0000000003ec1fbf000080bf06730cbfc55c7f3e374a4cbf06730cbfc55c7f3e374a4cbfd4ebce3eb089143f6af4523f00000000090811bf000080bf5fa2fbbe5fa27b3e9ee355bf5fa2fbbe5fa27b3e9ee355bfd5abd43e4c3b143fb9a75c3f0000000012cc01bf000080bfad37debe89e8763eae375ebfad37debe89e8763eae375ebff637da3e09d8133f2ef9643f000000002df9e4be000080bf5916c1beef5b713e894a65bf5916c1beef5b713e894a65bf8486df3ea263133f4cf06b3f0000000069afc6be000080bf5b9ea4be5d2b6b3e5d2b6bbf5b9ea4be5d2b6b3e5d2b6bbfb590e43efae1123fb3a0713f00000000b123a9be000080bf2c1c89be4b84643e4ff16fbf2c1c89be4b84643e4ff16fbf7552e93ed656123f6f26763f000000003ea88cbe000080bfb1b084be96eb303eee4373bfb1b084be96eb303eee4373bfc84dea3e5e260e3fc3fa763f0000000054b786be000080bf037456be04902b3e069f76bf037456be04902b3e069f76bf888eee3e9bb70d3f3b287a3f00000000268759be000080bf5f1d26be5f1d263e0f2c79bf5f1d26be5f1d263e0f2c79bfdf8af23e15470d3f50847c3f00000000355828be000080bfcefcf0bd89a8203e55077bbfcefcf0bd89a8203e55077bbf9e44f63e7cd60c3f2d2d7e3f000000006a02f4bd000080bf30429bbd2c421b3e874b7cbf30429bbd2c421b3e874b7cbf7bbef93e25670c3ff73e7f3f0000000012139dbd000080bf14f715bd19f7153efa107dbf14f715bd19f7153efa107dbfbbfbfc3e18fa0b3f19d37f3f00000000859917bd000080bf00000000c3d0103e546d7dbf00000000c3d0103e546d7dbf0000003f15900b3f0000803f0000000000000000000080bf19f7153d19f7153efa107dbf19f7153d19f7153efa107dbf2282013f18fa0b3f19d37f3f000000008a99173d000080bf2c429b3d2c421b3e874b7cbf2c429b3d2c421b3e874b7cbfc220033f25670c3ff73e7f3f000000000e139d3d000080bfcdfcf03d89a8203e55077bbfcdfcf03d89a8203e55077bbfb1dd043f7cd60c3f2d2d7e3f000000006902f43d000080bf5f1d263e5f1d263e0f2c79bf5f1d263e5f1d263e0f2c79bf90ba063f15470d3f50847c3f000000003558283e000080bf0574563e04902b3e069f76bf0574563e04902b3e069f76bfbcb8083f9bb70d3f3b287a3f000000002887593e000080bfb0b0843e96eb303eee4373bfb0b0843e96eb303eee4373bf1cd90a3f5e260e3fc3fa763f0000000053b7863e000080bf07549f3ee416363e0bfe6ebf07549f3ee416363e0bfe6ebffb1b0d3f54910e3fe9dc723f000000009be8a13e000080bfbaf4ba3ebaf43a3ee8b169bfbaf4ba3ebaf43a3ee8b169bfd4800f3f1ef60e3fa6b06d3f00000000ec26be3e000080bf5551d73ebd643f3ea14763bf5551d73ebd643f3ea14763bf2206123f1a520f3f5d5b673f00000000222edb3e000080bf2016f43ee644433e83ad5bbf2016f43ee644433e83ad5bbf3ba9143f81a20f3fc5c85f3f0000000031a6f83e000080bf876f083fad73463ee8da52bf876f083fad73463ee8da52bf3866173f93e40f3f12ee563f0000000084120b3f000080bf009e163fabd2483eabd248bf009e163fabd2483eabd248bff6371a3fd215103fcdcc4c3f000000009999193f000080bfb35b243f7a494a3ee2a43dbfb35b243f7a494a3ee2a43dbf3c181d3f3e34103fd774413f0000000087a9273f000080bf386f313f40c84a3e386f31bf386f313f40c84a3e386f31bf0000203f893e103ff304353f00000000f304353f000080bfe2a43d3f7a494a3eb35b24bfe2a43d3f7a494a3eb35b24bfc4e7223f3e34103f87a9273f00000000d774413f000080bfabd2483fabd2483eff9d16bfabd2483fabd2483eff9d16bf0bc8253fd215103f9999193f00000000cdcc4c3f000080bfe8da523fad73463e876f08bfe8da523fad73463e876f08bfc999283f93e40f3f84120b3f0000000012ee563f000080bf83ad5b3fe644433e2016f4be83ad5b3fe644433e2016f4bec5562b3f81a20f3f31a6f83e00000000c5c85f3f000080bf9f47633fbc643f3e5551d7be9f47633fbc643f3e5551d7bedff92d3f1a520f3f232edb3e000000005c5b673f000080bfe8b1693fbaf43a3eb9f4babee8b1693fbaf43a3eb9f4babe2d7f303f1ef60e3feb26be3e00000000a6b06d3f000080bf0bfe6e3fe416363e07549fbe0bfe6e3fe416363e07549fbe05e4323f54910e3f9be8a13e00000000e9dc723f000080bfee43733f96eb303eb1b084beee43733f96eb303eb1b084bee426353f5e260e3f54b7863e00000000c3fa763f000080bf069f763f04902b3e037456be069f763f04902b3e037456be4447373f9bb70d3f2687593e000000003b287a3f000080bf67c3783f67c3f83d7e4d4fbe67c3783f67c3f83d7e4d4fbea6a1373f28ec093f60d9503e00000000769e7a3f000080bf55077b3fcdfcf03d8aa820be55077b3fcdfcf03d8aa820be2a89393f619c093f44c8213e00000000e8c87c3f000080bf87a87c3f1a39e93d1a39e9bd87a87c3f1a39e93d1a39e9bdcc513b3fc14c093f0bc0ea3d000000000c507e3f000080bf5cbf7d3fa78de13d6c5e96bd5cbf7d3fa78de13d6c5e96bdcafc3c3f23fe083f064a973d00000000f04c7f3f000080bfff617e3fdb0ada3d975c11bdff617e3fdb0ada3d975c11bda58b3e3f2eb1083f4d31123d000000003ed67f3f000080bf1fa47e3fcabcd23d000000001fa47e3fcabcd23d000000000000403f5c66083f00000080000000000000803f000080bfff617e3fdb0ada3d925c113dff617e3fdb0ada3d925c113d5b74413f2eb1083f483112bd000000003ed67f3f000080bf2cb47e3f878b913d878b913d2cb47e3f878b913d878b913dc4e7423fc3cb053ff9e991bd0000000074597f3f000080bf5cbf7d3f6f5e963da78de13d5cbf7d3f6f5e963da78de13d3282443f06fd053fec29e2bd000000002a6f7e3f000080bf874b7c3f2c429b3d2c421b3e874b7c3f2c429b3d2c421b3e3138463ff82e063fe1b41bbe00000000ee057d3f000080bf83427a3f912aa03d3535483e83427a3f912aa03d3535483ee90a483f1c61063fabd248be0000000056077b3f000080bf7f8c773f5508a53d7f8c773e7f8c773f5508a53d7f8c773e38fb493fd592063f425b78be00000000425b783f000080bfc210743fe0c8a93dc48f943ec210743fe0c8a93dc48f943e90094c3f66c3063f221395be0000000094e8743f000080bf5cbf7d3fa78de13d6f5e963d5cbf7d3fa78de13d6f5e963d3603433f23fe083f094a97bd00000000f04c7f3f000080bf87a87c3f1a39e93d1a39e93d87a87c3f1a39e93d1a39e93d35ae443fc14c093f0bc0eabd000000000c507e3f000080bf55077b3fcdfcf03d89a8203e55077b3fcdfcf03d89a8203ed676463f619c093f43c821be00000000e8c87c3f000080bf67c3783f67c3f83d814d4f3e67c3783f67c3f83d814d4f3e5a5e483f28ec093f63d950be00000000769e7a3f000080bfa7c2753f0939003e0939803ea7c2753f0939003e0939803ea6654a3f023b0a3f713d81be00000000c4b5773f000080bf45ea713f26f4033e2cf2993e45ea713f26f4033e2cf2993e1c8d4c3fa2870a3f823d9bbe00000000f1f2733f000080bf0d206d3f0780073eb4aab43e0d206d3f0780073eb4aab43e70d44e3f81d00a3f0545b6be00000000973a6f3f000080bf4b4c673f60c70a3e102bd03e4b4c673f60c70a3e102bd03e873a513fe8130b3f521bd2be00000000b073693f000080bf0e5c603f67b30d3e012bec3e0e5c603f67b30d3e012bec3e4abd533fff4f0b3f5076eebe00000000008a623f000080bfa043583f152d103e5329043fa043583f152d103e5329043f9459563fec820b3fbf7d05bf00000000ae705a3f000080bfe7004f3fc11e123ec11e123fe7004f3fc11e123ec11e123f2b0b593feeaa0b3f83a113bf00000000cf24513f000080bf429d443ff275133ec6bf1f3f429d443ff275133ec6bf1f3fd2cc5b3f87c60b3f856e21bf0000000068af463f000080bf662e393f1f25143ef9d52c3f662e393f1f25143ef9d52c3f7a985e3f9dd40b3f69ac2ebf0000000070263b3f000080bffad52c3f1f25143e662e393ffad52c3f1f25143e662e393f8667613f9dd40b3f6f263bbf0000000069ac2e3f000080bfc6bf1f3ff275133e429d443fc6bf1f3ff275133e429d443f2e33643f87c60b3f68af46bf00000000856e213f000080bfc11e123fc11e123ee7004f3fc11e123fc11e123ee7004f3fd5f4663feeaa0b3fcf2451bf0000000083a1133f000080bf77660d3f9f88bc3db319543f77660d3f9f88bc3db319543fe90a683f1c83073f400155bf00000000d5000e3f000080bf0379ff3e5fccb93db1a25c3f0379ff3e5fccb93db1a25c3f2e9e6a3f2267073f948c5dbf00000000ea43003f000080bf1b10e43e4a73b63d1c10643f1b10e43e4a73b63d1c10643ffb1b6d3fe444073f2ef964bf000000002df9e43e000080bf19ebc83e1698b23d9d676a3f19ebc83e1698b23d9d676a3fd3806f3f751d073f164d6bbf00000000caafc93e000080bf5b56ae3e5c56ae3dbeb66f3f5b56ae3e5c56ae3dbeb66f3f30ca713ff0f1063f4e9670bf00000000f2f8ae3e000080bfc58f943ee0c8a93dc210743fc58f943ee0c8a93dc210743f71f6733f66c3063f94e874bf000000002313953e000080bf7e8c773e5508a53d7f8c773f7e8c773e5508a53d7f8c773fc804763fd592063f425b78bf00000000415b783e000080bf3735483e912aa03d83427a3f3735483e912aa03d83427a3f17f5773f1c61063f56077bbf00000000add2483e000080bf2b421b3e2c429b3d874b7c3f2b421b3e2c429b3d874b7c3fcfc7793ff82e063fee057dbf00000000e0b41b3e000080bfab8de13d6f5e963d5cbf7d3fab8de13d6f5e963d5cbf7d3fce7d7b3f06fd053f2a6f7ebf00000000f029e23d000080bfe00ada3d925c113dff617e3fe00ada3d925c113dff617e3fb5a67b3f7ae4023f0b8b7ebf000000000f2eda3d000080bfc9d28c3dc9d20c3d0d3e7f3fc9d28c3dc9d20c3d0d3e7f3fcd317d3f59cd023fb3647fbf000000001ce88c3d000080bfcb61083dc361083d4db77f3fcb61083dc361083d4db77f3f73a47e3fb7b6023f9fdb7fbf000000002a75083d000080bf00000000720f043deedd7f3f00000000720f043deedd7f3f0000803fb2a0023f000080bf0000000000000000000080bf868b913d878b913d2cb47e3f868b913d878b913d2cb47e3f3c187d3fc3cb053f74597fbf00000000f8e9913d000080bfd1d20c3dc9d28c3d0d3e7f3fd1d20c3dc9d28c3d0d3e7f3f79987e3f8c9b053f12d97fbf0000000058280d3d000080bf000000001e3b883dd96e7f3f000000001e3b883dd96e7f3f0000803faa6c053f000080bf0000000000000000000080bf1a39e93d1a39e93d87a87c3f1a39e93d1a39e93d87a87c3fcb517b3fc14c093f0c507ebf000000000bc0ea3d000080bf8aa8203ecdfcf03d55077b3f8aa8203ecdfcf03d55077b3f2a89793f619c093fe8c87cbf0000000044c8213e000080bf7e4d4f3e67c3f83d67c3783f7e4d4f3e67c3f83d67c3783fa6a1773f28ec093f769e7abf0000000060d9503e000080bf0939803e0939003ea7c2753f0939803e0939003ea7c2753f5a9a753f023b0a3fc4b577bf00000000713d813e000080bf2df2993e26f4033e45ea713f2df2993e26f4033e45ea713fe572733fa2870a3ff1f273bf00000000833d9b3e000080bfb6aab43e0780073e0d206d3fb6aab43e0780073e0d206d3f902b713f81d00a3f963a6fbf000000000645b63e000080bf102bd03e60c70a3e4b4c673f102bd03e60c70a3e4b4c673f79c56e3fe8130b3fb07369bf00000000521bd23e000080bf012bec3e67b30d3e0e5c603f012bec3e67b30d3e0e5c603fb6426c3fff4f0b3f008a62bf000000005076ee3e000080bf5429043f152d103ea043583f5429043f152d103ea043583f6ca6693fec820b3fae705abf00000000c07d053f000080bf876f083fad73463ee8da523f876f083fad73463ee8da523fc999683f93e40f3f12ee56bf0000000084120b3f000080bfff9d163fabd2483eabd2483fff9d163fabd2483eabd2483f0ac8653fd215103fcdcc4cbf000000009999193f000080bfb35b243f7a494a3ee2a43d3fb35b243f7a494a3ee2a43d3fc4e7623f3e34103fd77441bf0000000087a9273f000080bf386f313f40c84a3e386f313f386f313f40c84a3e386f313f0000603f893e103ff30435bf00000000f304353f000080bfe2a43d3f7a494a3eb35b243fe2a43d3f7a494a3eb35b243f3c185d3f3e34103f87a927bf00000000d774413f000080bfabd2483fabd2483e009e163fabd2483fabd2483e009e163ff6375a3fd215103f999919bf00000000cdcc4c3f000080bfe8da523fad73463e876f083fe8da523fad73463e876f083f3866573f93e40f3f84120bbf0000000012ee563f000080bf83ad5b3fe644433e2016f43e83ad5b3fe644433e2016f43e3ba9543f81a20f3f31a6f8be00000000c5c85f3f000080bfa147633fbd643f3e5551d73ea147633fbd643f3e5551d73e2206523f1a520f3f222edbbe000000005d5b673f000080bfe8b1693fbaf43a3ebaf4ba3ee8b1693fbaf43a3ebaf4ba3ed3804f3f1ef60e3fec26bebe00000000a6b06d3f000080bf0bfe6e3fe416363e07549f3e0bfe6e3fe416363e07549f3efb1b4d3f54910e3f9be8a1be00000000e9dc723f000080bfee43733f96eb303eb0b0843eee43733f96eb303eb0b0843e1cd94a3f5e260e3f53b786be00000000c3fa763f000080bf069f763f04902b3e0574563e069f763f04902b3e0574563ebcb8483f9bb70d3f288759be000000003b287a3f000080bf0f2c793f5f1d263e5f1d263e0f2c793f5f1d263e5f1d263e90ba463f15470d3f355828be0000000050847c3f000080bf55077b3f89a8203ecdfcf03d55077b3f89a8203ecdfcf03db0dd443f7cd60c3f6902f4bd000000002d2d7e3f000080bf874b7c3f2c421b3e2c429b3d874b7c3f2c421b3e2c429b3dc320433f25670c3f0e139dbd00000000f73e7f3f000080bffa107d3f19f7153e19f7153dfa107d3f19f7153e19f7153d2282413f18fa0b3f8a9917bd0000000019d37f3f000080bf546d7d3fc3d0103e00000000546d7d3fc3d0103e000000000000403f15900b3f00000080000000000000803f000080bffa107d3f19f7153e14f715bdfa107d3f19f7153e14f715bdde7d3e3f18fa0b3f8599173d0000000019d37f3f000080bf874b7c3f2c421b3e30429bbd874b7c3f2c421b3e30429bbd3edf3c3f25670c3f12139d3d00000000f73e7f3f000080bf55077b3f89a8203ecefcf0bd55077b3f89a8203ecefcf0bd50223b3f7cd60c3f6a02f43d000000002d2d7e3f000080bf0f2c793f5f1d263e5f1d26be0f2c793f5f1d263e5f1d26be7045393f15470d3f3558283e0000000050847c3f000080bf069f763f0574563e02902bbe069f763f0574563e02902bbefcfb383f6331113f0d742f3e00000000d6367c3f000080bf71b8733f67905d3e67905dbe71b8733f67905d3e67905dbe0ee5363fa6c5113fa4f0623e000000004ea2793f000080bf4ff16f3f4b84643e2c1c89be4ff16f3f4b84643e2c1c89be3ba9343fd656123f3ea88c3e000000006f26763f000080bf5d2b6b3f5d2b6b3e5b9ea4be5d2b6b3f5d2b6b3e5b9ea4be5a48323ffae1123fb123a93e00000000b3a0713f000080bf894a653fef5b713e5916c1be894a653fef5b713e5916c1be43c32f3fa263133f69afc63e000000004cf06b3f000080bfae375e3f89e8763ead37debeae375e3f89e8763ead37debefc1b2d3f09d8133f2df9e43e000000002ef9643f000080bf9ee3553f5fa27b3e5fa2fbbe9ee3553f5fa27b3e5fa2fbbeea552a3f4c3b143f12cc013f00000000b9a75c3f000080bf374a4c3fc55c7f3e06730cbf374a4c3fc55c7f3e06730cbfea75273fb089143f0908113f000000006af4523f000080bfd774413f8ff8803edec31abfd774413f8ff8803edec31abf3282243ff8bf143f03ec1f3f0000000005e7473f000080bf9f7b353f72a1813e148528bf9f7b353f72a1813e148528bf2282213fbfdb143f0b322e3f000000005a983b3f000080bf1485283f72a1813e9f7b35bf1485283f72a1813e9f7b35bfde7d1e3fbfdb143f5a983b3f000000000b322e3f000080bfdfc31a3f8ff8803ed77441bfdfc31a3f8ff8803ed77441bfce7d1b3ff8bf143f04e7473f0000000003ec1f3f000080bf06730c3fc55c7f3e374a4cbf06730c3fc55c7f3e374a4cbf168a183fb089143f6af4523f000000000908113f000080bf5fa2fb3e5fa27b3e9ee355bf5fa2fb3e5fa27b3e9ee355bf16aa153f4c3b143fb9a75c3f0000000012cc013f000080bfae37de3e89e8763eae375ebfae37de3e89e8763eae375ebf05e4123f09d8133f2ef9643f000000002ef9e43e000080bf5916c13eef5b713e894a65bf5916c13eef5b713e894a65bfbe3c103fa263133f4cf06b3f0000000069afc63e000080bf5a9ea43e5d2b6b3e5d2b6bbf5a9ea43e5d2b6b3e5d2b6bbfa6b70d3ffae1123fb3a0713f00000000b023a93e000080bf2d1c893e4b84643e4ff16fbf2d1c893e4b84643e4ff16fbfc6560b3fd656123f6f26763f000000003fa88c3e000080bf67905d3e67905d3e71b873bf67905d3e67905d3e71b873bff21a093fa6c5113f4ea2793f00000000a4f0623e000080bf04902b3e0574563e069f76bf04902b3e0574563e069f76bf0404073f6331113fd6367c3f000000000f742f3e000080bf67c3f83d814d4f3e67c378bf67c3f83d814d4f3e67c378bf1211053f879c103fec057e3f00000000ec05fe3d000080bf912aa03d3535483e83427abf912aa03d3535483e83427abfa840033f0b09103f492f7f3f000000007651a33d000080bff3971a3df03d413eeb367bbff3971a3df03d413eeb367bbff890013f71780f3f94cf7f3f000000000c6c1d3d000080bf000000009b753a3e5eb87bbf000000009b753a3e5eb87bbf0000003fd5eb0e3f0000803f0000000000000000000080bfed971abdf03d413eeb367bbfed971abdf03d413eeb367bbf0fdefc3e71780f3f94cf7f3f00000000066c1dbd000080bf942aa0bd3535483e83427abf942aa0bd3535483e83427abfaf7ef93e0b09103f492f7f3f000000007951a3bd000080bf66c3f8bd814d4f3e67c378bf66c3f8bd814d4f3e67c378bfdcddf53e879c103fec057e3f00000000eb05febd000080bf02902bbe0574563e069f76bf02902bbe0574563e069f76bff8f7f13e6331113fd6367c3f000000000d742fbe000080bf67905dbe67905d3e71b873bf67905dbe67905d3e71b873bf1ccaed3ea6c5113f4ea2793f00000000a4f062be000080bf4d8464be2d1c893e4ff16fbf4d8464be2d1c893e4ff16fbff1f3ec3e6317163fd409793f00000000f02d6dbe000080bf77668dbe77668d3ec7aa6bbf77668dbe77668d3ec7aa6bbffd3fe83e09cd163f1b34753f00000000431f93be000080bf14b5a9bea376913e2c5166bf14b5a9bea376913e2c5166bf5b3ce33e7d79173f4137703f000000004c00b1be000080bf59ebc6be8330953ec5c85fbf59ebc6be8330953ec5c85fbf86ebdd3e0218183f8eef693f0000000061f1cfbe000080bff3b0e4bef775983e74fc57bff3b0e4bef775983e74fc57bfe952d83e7ba3183fec3f623f00000000fa8eefbe000080bfae4c01bfd1289b3e17e14ebfae4c01bfd1289b3e17e14ebf317bd23ec216193f6b16593f0000000003ae07bf000080bf3f1410bf5c2d9d3eb37844bf3f1410bf5c2d9d3eb37844bf6170cc3e156d193f8f704e3f000000009c6317bf000080bf216d1ebf226d9e3ea8d438bf216d1ebf226d9e3ea8d438bf8541c63e94a2193fa55e423f00000000439a26bf000080bf38162cbf6fd99e3e38162cbf38162cbf6fd99e3e38162cbf0000c03eb5b4193ff304353f00000000f30435bf000080bfa7d438bf226d9e3e226d1ebfa7d438bf226d9e3e226d1ebf7abeb93e94a2193f449a263f00000000a45e42bf000080bfb37844bf5c2d9d3e3f1410bfb37844bf5c2d9d3e3f1410bf9e8fb33e156d193f9c63173f000000008f704ebf000080bf16e14ebfd0289b3eae4c01bf16e14ebfd0289b3eae4c01bfce84ad3ec216193f03ae073f000000006a1659bf000080bf74fc57bff775983ef3b0e4be74fc57bff775983ef3b0e4be16ada73e7ba3183ffa8eef3e00000000ec3f62bf000080bfc5c85fbf8330953e5aebc6bec5c85fbf8330953e5aebc6be7a14a23e0218183f62f1cf3e000000008eef69bf000080bf2c5166bfa376913e14b5a9be2c5166bfa376913e14b5a9bea5c39c3e7d79173f4c00b13e00000000413770bf000080bfc7aa6bbf77668d3e77668dbec7aa6bbf77668d3e77668dbe02c0973e09cd163f431f933e000000001b3475bf000080bf4ff16fbf2d1c893e4b8464be4ff16fbf2d1c893e4b8464be0f0c933e6317163fee2d6d3e00000000d40979bf000080bfee4373bfb0b0843e96eb30beee4373bfb0b0843e96eb30bee1a78e3eb55c153fbf2d373e00000000e6de7bbf000080bfa7c275bf0939803e093900bea7c275bf0939803e093900beb1918a3e7aa0143f7d71043e0000000086d97dbf000080bfc21074bfc48f943ee0c8a9bdc21074bfc48f943ee0c8a9bd6d11873e44fd173fde6ab13d00000000a0097fbf000080bf499075bfd53e8f3e86b523bd499075bfd53e8f3e86b523bdb264833e4c1b173fca842a3d000000002fc77fbf000080bfd08476bfef0c8a3e00000000d08476bfef0c8a3e000000000000803e2b3f163f0000008000000000000080bf000080bf499075bfd53e8f3e8bb5233d499075bfd53e8f3e8bb5233d9b36793e4c1b173fcf842abd000000002fc77fbf000080bfc21074bfc48f943eddc8a93dc21074bfc48f943eddc8a93d25dd713e44fd173fdb6ab1bd00000000a0097fbf000080bf45ea71bf2cf2993e26f4033e45ea71bf2cf2993e26f4033e94e9693ee6e2183f1e5b0abe000000000ca77dbf000080bf0bfe6ebf07549f3ee516363e0bfe6ebf07549f3ee516363e1c53613e3cc9193f529a3fbe000000008a7a7bbf000080bf5d2b6bbf5a9ea43e5b2b6b3e5d2b6bbf5a9ea43e5b2b6b3e1f13583e74ac1a3f405b78be00000000425b78bf000080bf2c5166bf13b5a93ea376913e2c5166bf13b5a93ea376913e45264e3ed0871b3fe52d9abe00000000ff1d74bf000080bf5e5060bf6577ae3e6477ae3e5e5060bf6577ae3e6477ae3eda8d433eb1551c3f8d92b9be00000000db976ebf000080bfdb0e59bff0c0b23e374acc3edb0e59bff0c0b23e374acc3e1a51383ecb0f1d3f1202dabe0000000033a267bf000080bf1d7b50bfb96bb63e808aea3e1d7b50bfb96bb63e808aea3e557e2c3e78af1d3f8503fbbe00000000931f5fbf000080bfcb8f46bf0153b93edb5f043fcb8f46bf0153b93edb5f043fa52b203e392e1e3fd3000ebf00000000400155bf000080bfb4563bbfb456bb3ed631133fb4563bbfb456bb3ed631133fc176133e57861e3f8d291ebf00000000294c49bf000080bf71ea2ebff05ebc3ef275213f71ea2ebff05ebc3ef275213ff983063e8cb31e3fc4a32dbf00000000151c3cbf000080bff27521bff05ebc3e71ea2e3ff27521bff05ebc3e71ea2e3f0ef8f23d8cb31e3f151c3cbf00000000c4a32dbf000080bfd63113bfb456bb3eb4563b3fd63113bfb456bb3eb4563b3f7c12d93d57861e3f294c49bf000000008d291ebf000080bfdc5f04bf0153b93eca8f463fdc5f04bf0153b93eca8f463fb8a8bf3d392e1e3f400155bf00000000d5000ebf000080bf808aeabeb96bb63e1d7b503f808aeabeb96bb63e1d7b503f5303a73d78af1d3f931f5fbf000000008503fbbe000080bf374accbef0c0b23edb0e593f374accbef0c0b23edb0e593fcc5d8f3dcb0f1d3f33a267bf000000001202dabe000080bf6577aebe6577ae3e5e50603f6577aebe6577ae3e5e50603f94c8713db1551c3fdb976ebf000000008e92b9be000080bfa37691be13b5a93e2c51663fa37691be13b5a93e2c51663feb66473dd0871b3fff1d74bf00000000e52d9abe000080bf5d2b6bbe5a9ea43e5d2b6b3f5d2b6bbe5a9ea43e5d2b6b3f86b31f3d74ac1a3f425b78bf00000000425b78be000080bfe41636be07549f3e0bfe6e3fe41636be07549f3e0bfe6e3f1767f53c3cc9193f8b7a7bbf00000000529a3fbe000080bf26f403be2cf2993e45ea713f26f403be2cf2993e45ea713f5fb3b03ce6e2183f0ca77dbf000000001e5b0abe000080bfe0c8a9bdc48f943ec210743fe0c8a9bdc48f943ec210743fad2d623c44fd173fa0097fbf00000000de6ab1bd000080bf86b523bdd53e8f3e4990753f86b523bdd53e8f3e4990753f872cd93b4c1b173f2fc77fbf00000000ca842abd000080bf00000000ef0c8a3ed084763f00000000ef0c8a3ed084763f000000802b3f163f000080bf0000000000000000000080bf000000009be8a13ee8dc723f000000009be8a13ee8dc723f00000080f6371a3f000080bf0000000000000000000080bf980f28bd980fa83e6a96713f980f28bd980fa83e6a96713fc99ae23bc1401b3f26c27fbf000000003ceb31bd000080bf5c56aebd5c56ae3ebeb66f3f5c56aebd5c56ae3ebeb66f3f7b676c3c19501c3fdcf27ebf00000000cf6ab9bd000080bf078007beb4aab43e0d206d3f078007beb4aab43e0d206d3f4701b93c0a631d3f546d7dbf00000000c2d010be000080bfbaf43abebaf4ba3ee8b1693fbaf43abebaf4ba3ee8b1693f91ae003d96751e3f56077bbf00000000acd248be000080bfef5b71be5916c13e894a653fef5b71be5916c13e894a653fbdbf273d9e821f3f339277bf00000000f24c82be000080bf833095be5aebc63ec5c85f3f833095be5aebc63ec5c85f3faebf513dd583203fe9dc72bf000000009be8a1be000080bff0c0b2be374acc3edb0e593ff0c0b2be374acc3edb0e593fdda27e3de271213fb5b76cbf00000000a3f1c2be000080bfeb05d1beeb05d13eeb05513feb05d1beeb05d13eeb05513f2920973daa44223f2ef964bf000000002ef9e4be000080bffb8eefbedff0d43ed1a1473ffb8eefbedff0d43ed1a1473f3d26b03ddbf3223fa9845bbf00000000ffb503bf000080bf82ec06bfcfe0d73eb5e43c3f82ec06bfcfe0d73eb5e43c3f7f2bca3da477233fd65050bf0000000007cc14bf000080bf31ab15bf2fb3d93e96e1303f31ab15bf2fb3d93e96e1303f72e6e43d93c9233f486d43bf00000000795c25bf000080bff7bc23bf4a51da3ef7bc233ff7bc23bf4a51da3ef7bc233f0000003e63e5233ff30435bf00000000f30435bf000080bf96e130bf2fb3d93e31ab153f96e130bf2fb3d93e31ab153fc68c0d3e93c9233f795c25bf00000000486d43bf000080bfb5e43cbfcfe0d73e82ec063fb5e43cbfcfe0d73e82ec063f40ea1a3ea477233f07cc14bf00000000d65050bf000080bfd1a147bfdff0d43efb8eef3ed1a147bfdff0d43efb8eef3ee1ec273edbf3223fffb503bf00000000a9845bbf000080bfeb0551bfeb05d13eea05d13eeb0551bfeb05d13eea05d13eec6f343eaa44223f2df9e4be000000002ef964bf000080bfdb0e59bf374acc3ef1c0b23edb0e59bf374acc3ef1c0b23e4857403ee271213fa4f1c2be00000000b5b76cbf000080bfc5c85fbf5aebc63e8330953ec5c85fbf5aebc63e8330953e14904b3ed583203f9be8a1be00000000e9dc72bf000080bf894a65bf5916c13eed5b713e894a65bf5916c13eed5b713e1010563e9e821f3ff14c82be00000000339277bf000080bfe8b169bfbaf4ba3ebbf43a3ee8b169bfbaf4ba3ebbf43a3e5bd45f3e96751e3facd248be0000000055077bbf000080bf0d206dbfb4aab43e0780073e0d206dbfb4aab43e0780073ed7df683e0a631d3fc2d010be00000000546d7dbf000080bfbeb66fbf5c56ae3e5956ae3dbeb66fbf5c56ae3e5956ae3d8939713e19501c3fcc6ab9bd00000000dcf27ebf000080bf6a9671bf980fa83e9d0f283d6a9671bf980fa83e9d0f283d29eb783ec1401b3f41eb31bd0000000026c27fbf000080bfe8dc72bf9be8a13e00000000e8dc72bf9be8a13e000000000000803ef6371a3f0000008000000000000080bf000080bf6a9671bf980fa83e980f28bd6a9671bf980fa83e980f28bd6b8a833ec1401b3f3ceb313d0000000026c27fbf000080bfbeb66fbf5c56ae3e5c56aebdbeb66fbf5c56ae3e5c56aebd3c63873e19501c3fcf6ab93d00000000dcf27ebf000080bf45ea71bf2cf2993e26f403be45ea71bf2cf2993e26f403be360b8b3ee6e2183f1e5b0a3e000000000ca77dbf000080bf0bfe6ebf07549f3ee41636be0bfe6ebf07549f3ee41636be71568f3e3cc9193f529a3f3e000000008b7a7bbf000080bf5d2b6bbf5a9ea43e5d2b6bbe5d2b6bbf5a9ea43e5d2b6bbe71f6933e74ac1a3f425b783e00000000425b78bf000080bf2c5166bf13b5a93ea37691be2c5166bf13b5a93ea37691beddec983ed0871b3fe52d9a3e00000000ff1d74bf000080bf5e5060bf6577ae3e6577aebe5e5060bf6577ae3e6577aebe12399e3eb1551c3f8e92b93e00000000db976ebf000080bfdb0e59bff0c0b23e374accbedb0e59bff0c0b23e374accbe73d7a33ecb0f1d3f1202da3e0000000033a267bf000080bf1d7b50bfb96bb63e808aeabe1d7b50bfb96bb63e808aeabed4c0a93e78af1d3f8503fb3e00000000931f5fbf000080bfca8f46bf0153b93edc5f04bfca8f46bf0153b93edc5f04bf2eeaaf3e392e1e3fd5000e3f00000000400155bf000080bfb4563bbfb456bb3ed63113bfb4563bbfb456bb3ed63113bf9f44b63e57861e3f8d291e3f00000000294c49bf000080bf71ea2ebff05ebc3ef27521bf71ea2ebff05ebc3ef27521bf03bebc3e8cb31e3fc4a32d3f00000000151c3cbf000080bff27521bff05ebc3e71ea2ebff27521bff05ebc3e71ea2ebffc41c33e8cb31e3f151c3c3f00000000c4a32dbf000080bfd63113bfb456bb3eb4563bbfd63113bfb456bb3eb4563bbf60bbc93e57861e3f294c493f000000008d291ebf000080bfdb5f04bf0153b93ecb8f46bfdb5f04bf0153b93ecb8f46bfd215d03e392e1e3f4001553f00000000d3000ebf000080bf808aeabeb96bb63e1d7b50bf808aeabeb96bb63e1d7b50bf2b3fd63e78af1d3f931f5f3f000000008503fbbe000080bf374accbef0c0b23edb0e59bf374accbef0c0b23edb0e59bf8c28dc3ecb0f1d3f33a2673f000000001202dabe000080bf6477aebe6577ae3e5e5060bf6477aebe6577ae3e5e5060bfedc6e13eb1551c3fdb976e3f000000008d92b9be000080bfa37691be13b5a93e2c5166bfa37691be13b5a93e2c5166bf2313e73ed0871b3fff1d743f00000000e52d9abe000080bf5b2b6bbe5a9ea43e5d2b6bbf5b2b6bbe5a9ea43e5d2b6bbf8f09ec3e74ac1a3f425b783f00000000405b78be000080bfe51636be07549f3e0bfe6ebfe51636be07549f3e0bfe6ebf8ea9f03e3cc9193f8a7a7b3f00000000529a3fbe000080bf95eb30beb0b0843eee4373bf95eb30beb0b0843eee4373bf1e58f13eb55c153fe6de7b3f00000000be2d37be000080bf0b3900be0939803ea7c275bf0b3900be0939803ea7c275bf4e6ef53e7aa0143f86d97d3f00000000807104be000080bf5408a5bd7f8c773e7f8c77bf5408a5bd7f8c773e7f8c77bf9c39f93e7be5133f9f1d7f3f00000000bf13aabd000080bf18321fbd18cb6e3e39be78bf18321fbd18cb6e3e39be78bf03befc3edd2d133fa2cb7f3f000000008fb523bd000080bf000000009241663eb37179bf000000009241663eb37179bf0000003f327b123f0000803f0000000000000000000080bf10321f3d18cb6e3e39be78bf10321f3d18cb6e3e39be78bffea0013fdd2d133fa2cb7f3f0000000087b5233d000080bf5508a53d7f8c773e7f8c77bf5508a53d7f8c773e7f8c77bf3263033f7be5133f9f1d7f3f00000000c013aa3d000080bf0939003e0939803ea7c275bf0939003e0939803ea7c275bfd948053f7aa0143f86d97d3f000000007d71043e000080bf96eb303eb0b0843eee4373bf96eb303eb0b0843eee4373bff153073fb55c153fe6de7b3f00000000bf2d373e000080bf4b84643e2d1c893e4ff16fbf4b84643e2d1c893e4ff16fbf0886093f6317163fd409793f00000000ee2d6d3e000080bf77668d3e77668d3ec7aa6bbf77668d3e77668d3ec7aa6bbf02e00b3f09cd163f1b34753f00000000431f933e000080bf14b5a93ea376913e2c5166bf14b5a93ea376913e2c5166bfd2610e3f7d79173f4137703f000000004c00b13e000080bf5aebc63e8330953ec5c85fbf5aebc63e8330953ec5c85fbf3d0a113f0218183f8eef693f0000000062f1cf3e000080bff3b0e43ef775983e74fc57bff3b0e43ef775983e74fc57bf8cd6133f7ba3183fec3f623f00000000fa8eef3e000080bfae4c013fd0289b3e16e14ebfae4c013fd0289b3e16e14ebf68c2163fc216193f6a16593f0000000003ae073f000080bf3f14103f5c2d9d3eb37844bf3f14103f5c2d9d3eb37844bfd0c7193f156d193f8f704e3f000000009c63173f000080bf226d1e3f226d9e3ea7d438bf226d1e3f226d9e3ea7d438bf3edf1c3f94a2193fa45e423f00000000449a263f000080bf38162c3f6fd99e3e38162cbf38162c3f6fd99e3e38162cbf0000203fb5b4193ff304353f00000000f304353f000080bfa8d4383f226d9e3e216d1ebfa8d4383f226d9e3e216d1ebfc320233f94a2193f439a263f00000000a55e423f000080bfb378443f5c2d9d3e3f1410bfb378443f5c2d9d3e3f1410bf3138263f156d193f9c63173f000000008f704e3f000080bf17e14e3fd1289b3eae4c01bf17e14e3fd1289b3eae4c01bf993d293fc216193f03ae073f000000006b16593f000080bf74fc573ff775983ef3b0e4be74fc573ff775983ef3b0e4be75292c3f7ba3183ffa8eef3e00000000ec3f623f000080bfc5c85f3f8330953e59ebc6bec5c85f3f8330953e59ebc6bec4f52e3f0218183f61f1cf3e000000008eef693f000080bf2c51663fa376913e14b5a9be2c51663fa376913e14b5a9be2e9e313f7d79173f4c00b13e000000004137703f000080bfc7aa6b3f77668d3e77668dbec7aa6b3f77668d3e77668dbeff1f343f09cd163f431f933e000000001b34753f000080bf4ff16f3f2d1c893e4d8464be4ff16f3f2d1c893e4d8464bef879363f6317163ff02d6d3e00000000d409793f000080bfee43733fb0b0843e95eb30beee43733fb0b0843e95eb30be10ac383fb55c153fbe2d373e00000000e6de7b3f000080bfa7c2753f0939803e0b3900bea7c2753f0939803e0b3900be27b73a3f7aa0143f8071043e0000000086d97d3f000080bf67c3783f814d4f3e66c3f8bd67c3783f814d4f3e66c3f8bdeeee3a3f879c103feb05fe3d00000000ec057e3f000080bf83427a3f3535483e942aa0bd83427a3f3535483e942aa0bd58bf3c3f0b09103f7951a33d00000000492f7f3f000080bfeb367b3ff03d413eed971abdeb367b3ff03d413eed971abd086f3e3f71780f3f066c1d3d0000000094cf7f3f000080bf5eb87b3f9b753a3e000000005eb87b3f9b753a3e000000000000403fd5eb0e3f00000080000000000000803f000080bfeb367b3ff03d413ef3971a3deb367b3ff03d413ef3971a3df890413f71780f3f0c6c1dbd0000000094cf7f3f000080bf83427a3f3535483e912aa03d83427a3f3535483e912aa03da840433f0b09103f7651a3bd00000000492f7f3f000080bf67c3783f814d4f3e67c3f83d67c3783f814d4f3e67c3f83d1211453f879c103fec05febd00000000ec057e3f000080bf069f763f0574563e04902b3e069f763f0574563e04902b3e0404473f6331113f0f742fbe00000000d6367c3f000080bf71b8733f67905d3e67905d3e71b8733f67905d3e67905d3ef21a493fa6c5113fa4f062be000000004ea2793f000080bf4ff16f3f4b84643e2d1c893e4ff16f3f4b84643e2d1c893ec5564b3fd656123f3fa88cbe000000006f26763f000080bf5d2b6b3f5d2b6b3e5a9ea43e5d2b6b3f5d2b6b3e5a9ea43ea5b74d3ffae1123fb023a9be00000000b3a0713f000080bf894a653fef5b713e5916c13e894a653fef5b713e5916c13ebe3c503fa263133f69afc6be000000004cf06b3f000080bfae375e3f89e8763eae37de3eae375e3f89e8763eae37de3e05e4523f09d8133f2ef9e4be000000002ef9643f000080bf9ee3553f5fa27b3e5fa2fb3e9ee3553f5fa27b3e5fa2fb3e15aa553f4c3b143f12cc01bf00000000b9a75c3f000080bf374a4c3fc55c7f3e06730c3f374a4c3fc55c7f3e06730c3f168a583fb089143f090811bf000000006af4523f000080bfd774413f8ff8803edfc31a3fd774413f8ff8803edfc31a3fce7d5b3ff8bf143f03ec1fbf0000000004e7473f000080bf9f7b353f72a1813e1485283f9f7b353f72a1813e1485283fde7d5e3fbfdb143f0b322ebf000000005a983b3f000080bf1485283f72a1813e9f7b353f1485283f72a1813e9f7b353f2282613fbfdb143f5a983bbf000000000b322e3f000080bfdec31a3f8ff8803ed774413fdec31a3f8ff8803ed774413f3282643ff8bf143f05e747bf0000000003ec1f3f000080bf06730c3fc55c7f3e374a4c3f06730c3fc55c7f3e374a4c3fea75673fb089143f6af452bf000000000908113f000080bf5fa2fb3e5fa27b3e9ee3553f5fa2fb3e5fa27b3e9ee3553feb556a3f4c3b143fb9a75cbf0000000012cc013f000080bf2016f43ee644433e83ad5b3f2016f43ee644433e83ad5b3fc5566b3f81a20f3fc5c85fbf0000000031a6f83e000080bf5551d73ebc643f3e9f47633f5551d73ebc643f3e9f47633fdef96d3f1a520f3f5c5b67bf00000000232edb3e000080bfb9f4ba3ebaf43a3ee8b1693fb9f4ba3ebaf43a3ee8b1693f2d7f703f1ef60e3fa6b06dbf00000000eb26be3e000080bf07549f3ee416363e0bfe6e3f07549f3ee416363e0bfe6e3f05e4723f54910e3fe9dc72bf000000009be8a13e000080bfb1b0843e96eb303eee43733fb1b0843e96eb303eee43733fe426753f5e260e3fc3fa76bf0000000054b7863e000080bf0374563e04902b3e069f763f0374563e04902b3e069f763f4447773f9bb70d3f3b287abf000000002687593e000080bf5f1d263e5f1d263e0f2c793f5f1d263e5f1d263e0f2c793f7045793f15470d3f50847cbf000000003558283e000080bfcefcf03d89a8203e55077b3fcefcf03d89a8203e55077b3f50227b3f7cd60c3f2d2d7ebf000000006a02f43d000080bf30429b3d2c421b3e874b7c3f30429b3d2c421b3e874b7c3f3ddf7c3f25670c3ff73e7fbf0000000012139d3d000080bf6c5e963da78de13d5cbf7d3f6c5e963da78de13d5cbf7d3fcafc7c3f23fe083ff04c7fbf00000000064a973d000080bf975c113ddb0ada3dff617e3f975c113ddb0ada3dff617e3fa58b7e3f2eb1083f3ed67fbf000000004d31123d000080bf00000000cabcd23d1fa47e3f00000000cabcd23d1fa47e3f0000803f5c66083f000080bf0000000000000000000080bf14f7153d19f7153efa107d3f14f7153d19f7153efa107d3fde7d7e3f18fa0b3f19d37fbf000000008599173d000080bf00000000c3d0103e546d7d3f00000000c3d0103e546d7d3f0000803f15900b3f000080bf0000000000000000000080bf02902b3e0574563e069f763f02902b3e0574563e069f763ffcfb783f6331113fd6367cbf000000000d742f3e000080bf66c3f83d814d4f3e67c3783f66c3f83d814d4f3e67c3783feeee7a3f879c103fec057ebf00000000eb05fe3d000080bf942aa03d3535483e83427a3f942aa03d3535483e83427a3f58bf7c3f0b09103f492f7fbf000000007951a33d000080bfed971a3df03d413eeb367b3fed971a3df03d413eeb367b3f086f7e3f71780f3f94cf7fbf00000000066c1d3d000080bf000000009b753a3e5eb87b3f000000009b753a3e5eb87b3f0000803fd5eb0e3f000080bf0000000000000000000080bf0b39003e0939803ea7c2753f0b39003e0939803ea7c2753f27b77a3f7aa0143f86d97dbf000000008071043e000080bf95eb303eb0b0843eee43733f95eb303eb0b0843eee43733f0fac783fb55c153fe6de7bbf00000000be2d373e000080bf67905d3e67905d3e71b8733f67905d3e67905d3e71b8733f0ee5763fa6c5113f4ea279bf00000000a4f0623e000080bf2c1c893e4b84643e4ff16f3f2c1c893e4b84643e4ff16f3f3ba9743fd656123f6f2676bf000000003ea88c3e000080bf5b9ea43e5d2b6b3e5d2b6b3f5b9ea43e5d2b6b3e5d2b6b3f5b48723ffae1123fb3a071bf00000000b123a93e000080bf5916c13eef5b713e894a653f5916c13eef5b713e894a653f42c36f3fa263133f4cf06bbf0000000069afc63e000080bfad37de3e89e8763eae375e3fad37de3e89e8763eae375e3ffb1b6d3f09d8133f2ef964bf000000002df9e43e000080bff3b0e43ef775983e74fc573ff3b0e43ef775983e74fc573f75296c3f7ba3183fec3f62bf00000000fa8eef3e000080bfae4c013fd1289b3e17e14e3fae4c013fd1289b3e17e14e3f993d693fc216193f6b1659bf0000000003ae073f000080bf3f14103f5c2d9d3eb378443f3f14103f5c2d9d3eb378443f3138663f156d193f8f704ebf000000009c63173f000080bf216d1e3f226d9e3ea8d4383f216d1e3f226d9e3ea8d4383fc320633f94a2193fa55e42bf00000000439a263f000080bf38162c3f6fd99e3e38162c3f38162c3f6fd99e3e38162c3f0000603fb5b4193ff30435bf00000000f304353f000080bfa7d4383f226d9e3e226d1e3fa7d4383f226d9e3e226d1e3f3edf5c3f94a2193f449a26bf00000000a45e423f000080bfb378443f5c2d9d3e3f14103fb378443f5c2d9d3e3f14103fd0c7593f156d193f9c6317bf000000008f704e3f000080bf16e14e3fd0289b3eae4c013f16e14e3fd0289b3eae4c013f67c2563fc216193f03ae07bf000000006a16593f000080bf74fc573ff775983ef3b0e43e74fc573ff775983ef3b0e43e8bd6533f7ba3183ffa8eefbe00000000ec3f623f000080bfc5c85f3f8330953e5aebc63ec5c85f3f8330953e5aebc63e3d0a513f0218183f62f1cfbe000000008eef693f000080bf2c51663fa376913e14b5a93e2c51663fa376913e14b5a93ed3614e3f7d79173f4c00b1be000000004137703f000080bfc7aa6b3f77668d3e77668d3ec7aa6b3f77668d3e77668d3e01e04b3f09cd163f431f93be000000001b34753f000080bf4ff16f3f2d1c893e4b84643e4ff16f3f2d1c893e4b84643e0886493f6317163fee2d6dbe00000000d409793f000080bfee43733fb0b0843e96eb303eee43733fb0b0843e96eb303ef153473fb55c153fbf2d37be00000000e6de7b3f000080bfa7c2753f0939803e0939003ea7c2753f0939803e0939003ed948453f7aa0143f7d7104be0000000086d97d3f000080bf7f8c773f7f8c773e5508a53d7f8c773f7f8c773e5508a53d3263433f7be5133fc013aabd000000009f1d7f3f000080bf39be783f18cb6e3e10321f3d39be783f18cb6e3e10321f3dfea0413fdd2d133f87b523bd00000000a2cb7f3f000080bfb371793f9241663e00000000b371793f9241663e000000000000403f327b123f00000080000000000000803f000080bf39be783f18cb6e3e18321fbd39be783f18cb6e3e18321fbd025f3e3fdd2d133f8fb5233d00000000a2cb7f3f000080bf7f8c773f7f8c773e5408a5bd7f8c773f7f8c773e5408a5bdce9c3c3f7be5133fbf13aa3d000000009f1d7f3f000080bfc210743fc48f943eddc8a9bdc210743fc48f943eddc8a9bd4a773c3f44fd173fdb6ab13d00000000a0097f3f000080bf45ea713f2cf2993e26f403be45ea713f2cf2993e26f403be657a3a3fe6e2183f1e5b0a3e000000000ca77d3f000080bf0bfe6e3f07549f3ee51636be0bfe6e3f07549f3ee51636bec854383f3cc9193f529a3f3e000000008a7a7b3f000080bf5d2b6b3f5a9ea43e5b2b6bbe5d2b6b3f5a9ea43e5b2b6bbec804363f74ac1a3f405b783e00000000425b783f000080bf2c51663f13b5a93ea37691be2c51663f13b5a93ea37691be9289333fd0871b3fe52d9a3e00000000ff1d743f000080bf5e50603f6577ae3e6477aebe5e50603f6577ae3e6477aebe77e3303fb1551c3f8d92b93e00000000db976e3f000080bfdb0e593ff0c0b23e374accbedb0e593ff0c0b23e374accbe46142e3fcb0f1d3f1202da3e0000000033a2673f000080bf1d7b503fb96bb63e808aeabe1d7b503fb96bb63e808aeabe961f2b3f78af1d3f8503fb3e00000000931f5f3f000080bfcb8f463f0153b93edb5f04bfcb8f463f0153b93edb5f04bfe90a283f392e1e3fd3000e3f000000004001553f000080bfb4563b3fb456bb3ed63113bfb4563b3fb456bb3ed63113bfb0dd243f57861e3f8d291e3f00000000294c493f000080bf71ea2e3ff05ebc3ef27521bf71ea2e3ff05ebc3ef27521bffea0213f8cb31e3fc4a32d3f00000000151c3c3f000080bff275213ff05ebc3e71ea2ebff275213ff05ebc3e71ea2ebf025f1e3f8cb31e3f151c3c3f00000000c4a32d3f000080bfd631133fb456bb3eb4563bbfd631133fb456bb3eb4563bbf50221b3f57861e3f294c493f000000008d291e3f000080bfdc5f043f0153b93eca8f46bfdc5f043f0153b93eca8f46bf17f5173f392e1e3f4001553f00000000d5000e3f000080bf808aea3eb96bb63e1d7b50bf808aea3eb96bb63e1d7b50bf6ae0143f78af1d3f931f5f3f000000008503fb3e000080bf374acc3ef0c0b23edb0e59bf374acc3ef0c0b23edb0e59bfbaeb113fcb0f1d3f33a2673f000000001202da3e000080bf6577ae3e6577ae3e5e5060bf6577ae3e6577ae3e5e5060bf8a1c0f3fb1551c3fdb976e3f000000008e92b93e000080bfa376913e13b5a93e2c5166bfa376913e13b5a93e2c5166bf6e760c3fd0871b3fff1d743f00000000e52d9a3e000080bf5d2b6b3e5a9ea43e5d2b6bbf5d2b6b3e5a9ea43e5d2b6bbf38fb093f74ac1a3f425b783f00000000425b783e000080bfe416363e07549f3e0bfe6ebfe416363e07549f3e0bfe6ebf39ab073f3cc9193f8b7a7b3f00000000529a3f3e000080bf26f4033e2cf2993e45ea71bf26f4033e2cf2993e45ea71bf9c85053fe6e2183f0ca77d3f000000001e5b0a3e000080bfe0c8a93dc48f943ec21074bfe0c8a93dc48f943ec21074bfb688033f44fd173fa0097f3f00000000de6ab13d000080bf86b5233dd53e8f3e499075bf86b5233dd53e8f3e499075bf5ab2013f4c1b173f2fc77f3f00000000ca842a3d000080bf00000000ef0c8a3ed08476bf00000000ef0c8a3ed08476bf0000003f2b3f163f0000803f0000000000000000000080bf8bb523bdd53e8f3e499075bf8bb523bdd53e8f3e499075bf4d9bfc3e4c1b173f2fc77f3f00000000cf842abd000080bfddc8a9bdc48f943ec21074bfddc8a9bdc48f943ec21074bf93eef83e44fd173fa0097f3f00000000db6ab1bd000080bf26f403be2cf2993e45ea71bf26f403be2cf2993e45ea71bfc9f4f43ee6e2183f0ca77d3f000000001e5b0abe000080bf078007beb4aab43e0d206dbf078007beb4aab43e0d206dbfeb6ff43e0a631d3f546d7d3f00000000c2d010be000080bfbbf43abebaf4ba3ee8b169bfbbf43abebaf4ba3ee8b169bf2eeaef3e96751e3f55077b3f00000000acd248be000080bfed5b71be5916c13e894a65bfed5b71be5916c13e894a65bf0808eb3e9e821f3f3392773f00000000f14c82be000080bf833095be5aebc63ec5c85fbf833095be5aebc63ec5c85fbf0ac8e53ed583203fe9dc723f000000009be8a1be000080bff1c0b2be374acc3edb0e59bff1c0b2be374acc3edb0e59bfa42be03ee271213fb5b76c3f00000000a4f1c2be000080bfea05d1beeb05d13eeb0551bfea05d1beeb05d13eeb0551bff637da3eaa44223f2ef9643f000000002df9e4be000080bffb8eefbedff0d43ed1a147bffb8eefbedff0d43ed1a147bf70f6d33edbf3223fa9845b3f00000000ffb503bf000080bf82ec06bfcfe0d73eb5e43cbf82ec06bfcfe0d73eb5e43cbf2075cd3ea477233fd650503f0000000007cc14bf000080bf31ab15bf2fb3d93e96e130bf31ab15bf2fb3d93e96e130bf62c6c63e93c9233f486d433f00000000795c25bf000080bff7bc23bf4a51da3ef7bc23bff7bc23bf4a51da3ef7bc23bf0000c03e63e5233ff304353f00000000f30435bf000080bf96e130bf2fb3d93e31ab15bf96e130bf2fb3d93e31ab15bf9d39b93e93c9233f795c253f00000000486d43bf000080bfb5e43cbfcfe0d73e82ec06bfb5e43cbfcfe0d73e82ec06bfdf8ab23ea477233f07cc143f00000000d65050bf000080bfd1a147bfdff0d43efb8eefbed1a147bfdff0d43efb8eefbe8f09ac3edbf3223fffb5033f00000000a9845bbf000080bfeb0551bfeb05d13eeb05d1beeb0551bfeb05d13eeb05d1be09c8a53eaa44223f2ef9e43e000000002ef964bf000080bfdb0e59bf374acc3ef0c0b2bedb0e59bf374acc3ef0c0b2be5bd49f3ee271213fa3f1c23e00000000b5b76cbf000080bfc5c85fbf5aebc63e833095bec5c85fbf5aebc63e833095bef6379a3ed583203f9be8a13e00000000e9dc72bf000080bf894a65bf5916c13eef5b71be894a65bf5916c13eef5b71bef7f7943e9e821f3ff24c823e00000000339277bf000080bfe8b169bfbaf4ba3ebaf43abee8b169bfbaf4ba3ebaf43abed215903e96751e3facd2483e0000000056077bbf000080bf0d206dbfb4aab43e078007be0d206dbfb4aab43e078007be14908b3e0a631d3fc2d0103e00000000546d7dbf000080bf9d676abf19ebc83e1698b2bd9d676abf19ebc83e1698b2bdc3bc873e4ddc203f452bc23d00000000cbd87ebf000080bf0abb6cbf4eb0c13ef02a2cbd0abb6cbf4eb0c13ef02a2cbd90b3833e159d1f3f62fd393d0000000067bc7fbf000080bfee656ebf8e92ba3e00000000ee656ebf8e92ba3e000000000000803ece641e3f0000008000000000000080bf000080bf0abb6cbf4eb0c13eed2a2c3d0abb6cbf4eb0c13eed2a2c3ddf98783e159d1f3f5ffd39bd0000000067bc7fbf000080bf9d676abf19ebc83e1398b23d9d676abf19ebc83e1398b23d7886703e4ddc203f422bc2bd00000000cbd87ebf000080bf4b4c67bf102bd03e62c70a3e4b4c67bf102bd03e62c70a3e15bc673e861e223f91e617be00000000ef2a7dbf000080bfa14763bf5551d73ebf643f3ea14763bf5551d73ebf643f3ef12e5e3e775e233f6bf452be000000003d827abf000080bfae375ebfae37de3e89e8763eae375ebfae37de3e89e8763eb0d7533e6895243f9e0889be000000001ba976bf000080bf74fc57bff3b0e43ef775983e74fc57bff3b0e43ef775983e33b4483e30bb253f6667aabe00000000d16771bf000080bf1d7b50bf808aea3eb86bb63e1d7b50bf808aea3eb86bb63e9cc93c3e72c6263f1f38cdbe000000004a896abf000080bfd2a147bffb8eef3edef0d43ed2a147bffb8eef3edef0d43e3d26303e16ad273ff0f0f0be00000000e3e161bf000080bf986b3dbf568af33e588af33e986b3dbf568af33e588af33eefe2223e1665283f186f0abf00000000785757bf000080bf9be331bfd74ef63e77d6083f9be331bfd74ef63e77d6083f6323153e7ee5283f01161cbf0000000068e94abf000080bfd82625bf44baf73e9b63173fd82625bf44baf73e9b63173fd614073e8727293f4afc2cbf0000000023b63cbf000080bf9b6317bf44baf73ed826253f9b6317bf44baf73ed826253f52d6f13d8727293f23b63cbf000000004afc2cbf000080bf77d608bfd74ef63e9be3313f77d608bfd74ef63e9be3313f3ab9d53d7ee5283f68e94abf0000000001161cbf000080bf568af3be568af33e986b3d3f568af3be568af33e986b3d3f203aba3d1665283f795757bf00000000176f0abf000080bfdff0d4befb8eef3ed1a1473fdff0d4befb8eef3ed1a1473f86b39f3d16ad273fe2e161bf00000000f1f0f0be000080bfb86bb6be808aea3e1d7b503fb86bb6be808aea3e1d7b503fc66c863d72c6263f4a896abf000000001f38cdbe000080bff77598bef3b0e43e74fc573ff77598bef3b0e43e74fc573f332f5d3d30bb253fd16771bf000000006667aabe000080bf89e876beae37de3eae375e3f89e876beae37de3eae375e3f40a1303d6895243f1ba976bf000000009e0889be000080bfbd643fbe5551d73ea147633fbd643fbe5551d73ea147633f3a44073d775e233f3d827abf0000000069f452be000080bf60c70abe102bd03e4b4c673f60c70abe102bd03e4b4c673f4f1fc23c861e223fef2a7dbf000000008fe617be000080bf1698b2bd19ebc83e9d676a3f1698b2bd19ebc83e9d676a3f7698773c4ddc203fcbd87ebf00000000452bc2bd000080bff02a2cbd4eb0c13e0abb6c3ff02a2cbd4eb0c13e0abb6c3f18e4ec3b159d1f3f67bc7fbf0000000062fd39bd000080bf000000008e92ba3eee656e3f000000008e92ba3eee656e3f00000080ce641e3f000080bf0000000000000000000080bf00000000fbddd33ec70d693f00000000fbddd33ec70d693f00000080c6c3223f000080bf0000000000000000000080bf32f02fbd3fecdb3e42eb663f32f02fbd3fecdb3e42eb663fa627f83bc12d243fd3b57fbf00000000add342bd000080bf4a73b6bd1c10e43e1c10643f4a73b6bd1c10e43e1c10643f9ef2813c969e253fc2ba7ebf000000009bc8cbbd000080bf67b30dbe012bec3e0e5c603f67b30dbe012bec3e0e5c603f562dcc3c1611273f09de7cbf00000000a7b41fbe000080bfe64443be2016f43e83ad5b3fe64443be2016f43e83ad5b3fcc8c0e3d637e283f65e779bf0000000004235ebe000080bf5fa27bbe5fa2fb3e9ee3553f5fa27bbe5fa2fb3e9ee3553ffe793a3ddadd293ffa9875bf000000001a7890be000080bfd0289bbeae4c013f16e14e3fd0289bbeae4c013f16e14e3fd2e1693d27252b3f45b36fbf0000000073c6b3be000080bf0153b9bedc5f043fca8f463f0153b9bedc5f043fca8f463f7e518e3dac482c3f9efb67bf000000007184d8be000080bfcfe0d7be82ec063fb5e43c3fcfe0d7be82ec063fb5e43c3f2037a93d403c2d3f2f455ebf00000000ed05febe000080bfd74ef6be77d6083f9be3313fd74ef6be77d6083f9be3313f7b60c53d45f42d3f307b52bf00000000bfb711bf000080bfa4060abfa4060a3f92a1253fa4060abfa4060a3f92a1253f1073e23d08672e3f27aa44bf0000000020e323bf000080bf974518bfcf6d0a3f9745183f974518bfcf6d0a3f9745183f0000003e0c8e2e3ff30435bf00000000f30435bf000080bf92a125bfa4060a3fa4060a3f92a125bfa4060a3fa4060a3f77c60e3e08672e3f20e323bf0000000027aa44bf000080bf9ae331bf77d6083fd94ef63e9ae331bf77d6083fd94ef63ec14f1d3e45f42d3fc0b711bf000000002e7b52bf000080bfb5e43cbf82ec063fcfe0d73eb5e43cbf82ec063fcfe0d73e6f642b3e403c2d3fed05febe000000002f455ebf000080bfca8f46bfdc5f043f0153b93eca8f46bfdc5f043f0153b93e40d7383eac482c3f7184d8be000000009efb67bf000080bf16e14ebfae4c013fcf289b3e16e14ebfae4c013fcf289b3e8c87453e27252b3f72c6b3be0000000045b36fbf000080bf9ee355bf5fa2fb3e61a27b3e9ee355bf5fa2fb3e61a27b3e8061513edadd293f1c7890be00000000fa9875bf000080bf83ad5bbf2016f43ee644433e83ad5bbf2016f43ee644433ecd5c5c3e637e283f04235ebe0000000065e779bf000080bf0e5c60bf012bec3e66b30d3e0e5c60bf012bec3e66b30d3e557a663e1611273fa6b41fbe0000000009de7cbf000080bf1c1064bf1c10e43e4673b63d1c1064bf1c10e43e4673b63dadc16f3e969e253f97c8cbbd00000000c2ba7ebf000080bf42eb66bf3fecdb3e36f02f3d42eb66bf3fecdb3e36f02f3dc33e783ec12d243fb1d342bd00000000d3b57fbf000080bfc70d69bffbddd33e00000000c70d69bffbddd33e000000000000803ec6c3223f0000008000000000000080bf000080bf42eb66bf3fecdb3e32f02fbd42eb66bf3fecdb3e32f02fbd9fe0833ec12d243fadd3423d00000000d3b57fbf000080bf1c1064bf1c10e43e4a73b6bd1c1064bf1c10e43e4a73b6bd2a1f883e969e253f9bc8cb3d00000000c2ba7ebf000080bf4b4c67bf102bd03e60c70abe4b4c67bf102bd03e60c70abef5218c3e861e223f8fe6173e00000000ef2a7dbf000080bfa14763bf5551d73ebd643fbea14763bf5551d73ebd643fbe87e8903e775e233f69f4523e000000003d827abf000080bfae375ebfae37de3e89e876beae375ebfae37de3e89e876be2814963e6895243f9e08893e000000001ba976bf000080bf74fc57bff3b0e43ef77598be74fc57bff3b0e43ef77598bee6a59b3e30bb253f6667aa3e00000000d16771bf000080bf1d7b50bf808aea3eb86bb6be1d7b50bf808aea3eb86bb6be319ba13e72c6263f1f38cd3e000000004a896abf000080bfd1a147bffb8eef3edff0d4bed1a147bffb8eef3edff0d4bee1eca73e16ad273ff1f0f03e00000000e2e161bf000080bf986b3dbf568af33e568af3be986b3dbf568af33e568af3be878eae3e1665283f176f0a3f00000000795757bf000080bf9be331bfd74ef63e77d608bf9be331bfd74ef63e77d608bf4e6eb53e7ee5283f01161c3f0000000068e94abf000080bfd82625bf44baf73e9b6317bfd82625bf44baf73e9b6317bf9575bc3e8727293f4afc2c3f0000000023b63cbf000080bf9b6317bf44baf73ed82625bf9b6317bf44baf73ed82625bf6a8ac33e8727293f23b63c3f000000004afc2cbf000080bf77d608bfd74ef63e9be331bf77d608bfd74ef63e9be331bfb191ca3e7ee5283f68e94a3f0000000001161cbf000080bf588af3be568af33e986b3dbf588af3be568af33e986b3dbf7771d13e1665283f7857573f00000000186f0abf000080bfdef0d4befb8eef3ed2a147bfdef0d4befb8eef3ed2a147bf1f13d83e16ad273fe3e1613f00000000f0f0f0be000080bfb86bb6be808aea3e1d7b50bfb86bb6be808aea3e1d7b50bfce64de3e72c6263f4a896a3f000000001f38cdbe000080bff77598bef3b0e43e74fc57bff77598bef3b0e43e74fc57bf195ae43e30bb253fd167713f000000006667aabe000080bf89e876beae37de3eae375ebf89e876beae37de3eae375ebfd7ebe93e6895243f1ba9763f000000009e0889be000080bfbf643fbe5551d73ea14763bfbf643fbe5551d73ea14763bf7817ef3e775e233f3d827a3f000000006bf452be000080bf62c70abe102bd03e4b4c67bf62c70abe102bd03e4b4c67bf0bdef33e861e223fef2a7d3f0000000091e617be000080bf1398b2bd19ebc83e9d676abf1398b2bd19ebc83e9d676abf3b43f83e4ddc203fcbd87e3f00000000422bc2bd000080bf5956aebd5c56ae3ebeb66fbf5956aebd5c56ae3ebeb66fbfc49cf83e19501c3fdcf27e3f00000000cc6ab9bd000080bf9d0f28bd980fa83e6a9671bf9d0f28bd980fa83e6a9671bf9475fc3ec1401b3f26c27f3f0000000041eb31bd000080bf000000009be8a13ee8dc72bf000000009be8a13ee8dc72bf0000003ff6371a3f0000803f0000000000000000000080bf980f283d980fa83e6a9671bf980f283d980fa83e6a9671bf36c5013fc1401b3f26c27f3f000000003ceb313d000080bf5c56ae3d5c56ae3ebeb66fbf5c56ae3d5c56ae3ebeb66fbf9eb1033f19501c3fdcf27e3f00000000cf6ab93d000080bf0780073eb4aab43e0d206dbf0780073eb4aab43e0d206dbf0ac8053f0a631d3f546d7d3f00000000c2d0103e000080bfbaf43a3ebaf4ba3ee8b169bfbaf43a3ebaf4ba3ee8b169bfe90a083f96751e3f56077b3f00000000acd2483e000080bfef5b713e5916c13e894a65bfef5b713e5916c13e894a65bffc7b0a3f9e821f3f3392773f00000000f24c823e000080bf8330953e5aebc63ec5c85fbf8330953e5aebc63ec5c85fbffb1b0d3fd583203fe9dc723f000000009be8a13e000080bff0c0b23e374acc3edb0e59bff0c0b23e374acc3edb0e59bf2eea0f3fe271213fb5b76c3f00000000a3f1c23e000080bfeb05d13eeb05d13eeb0551bfeb05d13eeb05d13eeb0551bf05e4123faa44223f2ef9643f000000002ef9e43e000080bffb8eef3edff0d43ed1a147bffb8eef3edff0d43ed1a147bfc804163fdbf3223fa9845b3f00000000ffb5033f000080bf82ec063fcfe0d73eb5e43cbf82ec063fcfe0d73eb5e43cbf7045193fa477233fd650503f0000000007cc143f000080bf31ab153f2fb3d93e96e130bf31ab153f2fb3d93e96e130bfcf9c1c3f93c9233f486d433f00000000795c253f000080bff7bc233f4a51da3ef7bc23bff7bc233f4a51da3ef7bc23bf0000203f63e5233ff304353f00000000f304353f000080bf96e1303f2fb3d93e31ab15bf96e1303f2fb3d93e31ab15bf3263233f93c9233f795c253f00000000486d433f000080bfb5e43c3fcfe0d73e82ec06bfb5e43c3fcfe0d73e82ec06bf90ba263fa477233f07cc143f00000000d650503f000080bfd1a1473fdff0d43efb8eefbed1a1473fdff0d43efb8eefbe38fb293fdbf3223fffb5033f00000000a9845b3f000080bfeb05513feb05d13eea05d1beeb05513feb05d13eea05d1befc1b2d3faa44223f2df9e43e000000002ef9643f000080bfdb0e593f374acc3ef1c0b2bedb0e593f374acc3ef1c0b2bed215303fe271213fa4f1c23e00000000b5b76c3f000080bfc5c85f3f5aebc63e833095bec5c85f3f5aebc63e833095be05e4323fd583203f9be8a13e00000000e9dc723f000080bf894a653f5916c13eed5b71be894a653f5916c13eed5b71be0484353f9e821f3ff14c823e000000003392773f000080bfe8b1693fbaf4ba3ebbf43abee8b1693fbaf4ba3ebbf43abe17f5373f96751e3facd2483e0000000055077b3f000080bf0d206d3fb4aab43e078007be0d206d3fb4aab43e078007bef6373a3f0a631d3fc2d0103e00000000546d7d3f000080bfbeb66f3f5c56ae3e5956aebdbeb66f3f5c56ae3e5956aebd624e3c3f19501c3fcc6ab93d00000000dcf27e3f000080bf6a96713f980fa83e9d0f28bd6a96713f980fa83e9d0f28bdca3a3e3fc1401b3f41eb313d0000000026c27f3f000080bf4990753fd53e8f3e8bb523bd4990753fd53e8f3e8bb523bda74d3e3f4c1b173fcf842a3d000000002fc77f3f000080bfd084763fef0c8a3e00000000d084763fef0c8a3e000000000000403f2b3f163f00000080000000000000803f000080bf4990753fd53e8f3e86b5233d4990753fd53e8f3e86b5233d59b2413f4c1b173fca842abd000000002fc77f3f000080bfc210743fc48f943ee0c8a93dc210743fc48f943ee0c8a93db788433f44fd173fde6ab1bd00000000a0097f3f000080bf45ea713f2cf2993e26f4033e45ea713f2cf2993e26f4033e9b85453fe6e2183f1e5b0abe000000000ca77d3f000080bf0bfe6e3f07549f3ee416363e0bfe6e3f07549f3ee416363e39ab473f3cc9193f529a3fbe000000008b7a7b3f000080bf5d2b6b3f5a9ea43e5d2b6b3e5d2b6b3f5a9ea43e5d2b6b3e38fb493f74ac1a3f425b78be00000000425b783f000080bf2c51663f13b5a93ea376913e2c51663f13b5a93ea376913e6f764c3fd0871b3fe52d9abe00000000ff1d743f000080bf5e50603f6577ae3e6577ae3e5e50603f6577ae3e6577ae3e8a1c4f3fb1551c3f8e92b9be00000000db976e3f000080bfdb0e593ff0c0b23e374acc3edb0e593ff0c0b23e374acc3ebaeb513fcb0f1d3f1202dabe0000000033a2673f000080bf1d7b503fb96bb63e808aea3e1d7b503fb96bb63e808aea3e6be0543f78af1d3f8503fbbe00000000931f5f3f000080bfca8f463f0153b93edc5f043fca8f463f0153b93edc5f043f17f5573f392e1e3fd5000ebf000000004001553f000080bfb4563b3fb456bb3ed631133fb4563b3fb456bb3ed631133f50225b3f57861e3f8d291ebf00000000294c493f000080bf71ea2e3ff05ebc3ef275213f71ea2e3ff05ebc3ef275213f025f5e3f8cb31e3fc4a32dbf00000000151c3c3f000080bff275213ff05ebc3e71ea2e3ff275213ff05ebc3e71ea2e3ffea0613f8cb31e3f151c3cbf00000000c4a32d3f000080bfd631133fb456bb3eb4563b3fd631133fb456bb3eb4563b3fb0dd643f57861e3f294c49bf000000008d291e3f000080bfdb5f043f0153b93ecb8f463fdb5f043f0153b93ecb8f463fe90a683f392e1e3f400155bf00000000d3000e3f000080bf808aea3eb96bb63e1d7b503f808aea3eb96bb63e1d7b503f961f6b3f78af1d3f931f5fbf000000008503fb3e000080bf374acc3ef0c0b23edb0e593f374acc3ef0c0b23edb0e593f46146e3fcb0f1d3f33a267bf000000001202da3e000080bf59ebc63e8330953ec5c85f3f59ebc63e8330953ec5c85f3fc3f56e3f0218183f8eef69bf0000000061f1cf3e000080bf14b5a93ea376913e2c51663f14b5a93ea376913e2c51663f2d9e713f7d79173f413770bf000000004c00b13e000080bf77668d3e77668d3ec7aa6b3f77668d3e77668d3ec7aa6b3fff1f743f09cd163f1b3475bf00000000431f933e000080bf4d84643e2d1c893e4ff16f3f4d84643e2d1c893e4ff16f3ff879763f6317163fd40979bf00000000f02d6d3e000080bf6477ae3e6577ae3e5e50603f6477ae3e6577ae3e5e50603f77e3703fb1551c3fdb976ebf000000008d92b93e000080bfa376913e13b5a93e2c51663fa376913e13b5a93e2c51663f9189733fd0871b3fff1d74bf00000000e52d9a3e000080bf5b2b6b3e5a9ea43e5d2b6b3f5b2b6b3e5a9ea43e5d2b6b3fc804763f74ac1a3f425b78bf00000000405b783e000080bfe516363e07549f3e0bfe6e3fe516363e07549f3e0bfe6e3fc754783f3cc9193f8a7a7bbf00000000529a3f3e000080bf26f4033e2cf2993e45ea713f26f4033e2cf2993e45ea713f657a7a3fe6e2183f0ca77dbf000000001e5b0a3e000080bfddc8a93dc48f943ec210743fddc8a93dc48f943ec210743f49777c3f44fd173fa0097fbf00000000db6ab13d000080bf5408a53d7f8c773e7f8c773f5408a53d7f8c773e7f8c773fce9c7c3f7be5133f9f1d7fbf00000000bf13aa3d000080bf18321f3d18cb6e3e39be783f18321f3d18cb6e3e39be783f025f7e3fdd2d133fa2cb7fbf000000008fb5233d000080bf000000009241663eb371793f000000009241663eb371793f0000803f327b123f000080bf0000000000000000000080bf8bb5233dd53e8f3e4990753f8bb5233dd53e8f3e4990753fa74d7e3f4c1b173f2fc77fbf00000000cf842a3d000080bf00000000ef0c8a3ed084763f00000000ef0c8a3ed084763f0000803f2b3f163f000080bf0000000000000000000080bf8330953e5aebc63ec5c85f3f8330953e5aebc63ec5c85f3f05e4723fd583203fe9dc72bf000000009be8a13e000080bfed5b713e5916c13e894a653fed5b713e5916c13e894a653f0484753f9e821f3f339277bf00000000f14c823e000080bfbbf43a3ebaf4ba3ee8b1693fbbf43a3ebaf4ba3ee8b1693f17f5773f96751e3f55077bbf00000000acd2483e000080bf0780073eb4aab43e0d206d3f0780073eb4aab43e0d206d3ff6377a3f0a631d3f546d7dbf00000000c2d0103e000080bf5956ae3d5c56ae3ebeb66f3f5956ae3d5c56ae3ebeb66f3f624e7c3f19501c3fdcf27ebf00000000cc6ab93d000080bf9d0f283d980fa83e6a96713f9d0f283d980fa83e6a96713fca3a7e3fc1401b3f26c27fbf0000000041eb313d000080bf000000009be8a13ee8dc723f000000009be8a13ee8dc723f0000803ff6371a3f000080bf0000000000000000000080bf89e8763eae37de3eae375e3f89e8763eae37de3eae375e3fecf5743f6895243f1ba976bf000000009e08893e000080bff775983ef3b0e43e74fc573ff775983ef3b0e43e74fc573f0d2d723f30bb253fd16771bf000000006667aa3e000080bff1c0b23e374acc3edb0e593ff1c0b23e374acc3edb0e593fd215703fe271213fb5b76cbf00000000a4f1c23e000080bfea05d13eeb05d13eeb05513fea05d13eeb05d13eeb05513ffb1b6d3faa44223f2ef964bf000000002df9e43e000080bffb8eef3edff0d43ed1a1473ffb8eef3edff0d43ed1a1473f38fb693fdbf3223fa9845bbf00000000ffb5033f000080bf82ec063fcfe0d73eb5e43c3f82ec063fcfe0d73eb5e43c3f90ba663fa477233fd65050bf0000000007cc143f000080bf31ab153f2fb3d93e96e1303f31ab153f2fb3d93e96e1303f3263633f93c9233f486d43bf00000000795c253f000080bff7bc233f4a51da3ef7bc233ff7bc233f4a51da3ef7bc233f0000603f63e5233ff30435bf00000000f304353f000080bf96e1303f2fb3d93e31ab153f96e1303f2fb3d93e31ab153fce9c5c3f93c9233f795c25bf00000000486d433f000080bfb5e43c3fcfe0d73e82ec063fb5e43c3fcfe0d73e82ec063f7045593fa477233f07cc14bf00000000d650503f000080bfd1a1473fdff0d43efb8eef3ed1a1473fdff0d43efb8eef3ec804563fdbf3223fffb503bf00000000a9845b3f000080bfeb05513feb05d13eeb05d13eeb05513feb05d13eeb05d13e05e4523faa44223f2ef9e4be000000002ef9643f000080bfdb0e593f374acc3ef0c0b23edb0e593f374acc3ef0c0b23e2eea4f3fe271213fa3f1c2be00000000b5b76c3f000080bfc5c85f3f5aebc63e8330953ec5c85f3f5aebc63e8330953efb1b4d3fd583203f9be8a1be00000000e9dc723f000080bf894a653f5916c13eef5b713e894a653f5916c13eef5b713efc7b4a3f9e821f3ff24c82be000000003392773f000080bfe8b1693fbaf4ba3ebaf43a3ee8b1693fbaf4ba3ebaf43a3ee90a483f96751e3facd248be0000000056077b3f000080bf0d206d3fb4aab43e0780073e0d206d3fb4aab43e0780073e0ac8453f0a631d3fc2d010be00000000546d7d3f000080bfbeb66f3f5c56ae3e5c56ae3dbeb66f3f5c56ae3e5c56ae3d9eb1433f19501c3fcf6ab9bd00000000dcf27e3f000080bf6a96713f980fa83e980f283d6a96713f980fa83e980f283d36c5413fc1401b3f3ceb31bd0000000026c27f3f000080bfe8dc723f9be8a13e00000000e8dc723f9be8a13e000000000000403ff6371a3f00000080000000000000803f000080bfee656e3f8e92ba3e00000000ee656e3f8e92ba3e000000000000403fce641e3f00000080000000000000803f000080bf0abb6c3f4eb0c13eed2a2cbd0abb6c3f4eb0c13eed2a2cbd38263e3f159d1f3f5ffd393d0000000067bc7f3f000080bf9d676a3f19ebc83e1398b2bd9d676a3f19ebc83e1398b2bd9e213c3f4ddc203f422bc23d00000000cbd87e3f000080bf4b4c673f102bd03e62c70abe4b4c673f102bd03e62c70abe06ef393f861e223f91e6173e00000000ef2a7d3f000080bfa147633f5551d73ebf643fbea147633f5551d73ebf643fbebc8b373f775e233f6bf4523e000000003d827a3f000080bfae375e3fae37de3e89e876beae375e3fae37de3e89e876beecf5343f6895243f9e08893e000000001ba9763f000080bf74fc573ff3b0e43ef77598be74fc573ff3b0e43ef77598be0d2d323f30bb253f6667aa3e00000000d167713f000080bf1d7b503f808aea3eb86bb6be1d7b503f808aea3eb86bb6be68322f3f72c6263f1f38cd3e000000004a896a3f000080bfd2a1473ffb8eef3edef0d4bed2a1473ffb8eef3edef0d4be90092c3f16ad273ff0f0f03e00000000e3e1613f000080bf986b3d3f568af33e588af3be986b3d3f568af33e588af3bebcb8283f1665283f186f0a3f000000007857573f000080bf9be3313fd74ef63e77d608bf9be3313fd74ef63e77d608bfd948253f7ee5283f01161c3f0000000068e94a3f000080bfd826253f44baf73e9b6317bfd826253f44baf73e9b6317bf36c5213f8727293f4afc2c3f0000000023b63c3f000080bf9b63173f44baf73ed82625bf9b63173f44baf73ed82625bfcb3a1e3f8727293f23b63c3f000000004afc2c3f000080bf77d6083fd74ef63e9be331bf77d6083fd74ef63e9be331bf28b71a3f7ee5283f68e94a3f0000000001161c3f000080bf568af33e568af33e986b3dbf568af33e568af33e986b3dbf4447173f1665283f7957573f00000000176f0a3f000080bfdff0d43efb8eef3ed1a147bfdff0d43efb8eef3ed1a147bf70f6133f16ad273fe2e1613f00000000f1f0f03e000080bfb86bb63e808aea3e1d7b50bfb86bb63e808aea3e1d7b50bf99cd103f72c6263f4a896a3f000000001f38cd3e000080bff775983ef3b0e43e74fc57bff775983ef3b0e43e74fc57bff4d20d3f30bb253fd167713f000000006667aa3e000080bf89e8763eae37de3eae375ebf89e8763eae37de3eae375ebf140a0b3f6895243f1ba9763f000000009e08893e000080bfbd643f3e5551d73ea14763bfbd643f3e5551d73ea14763bf4474083f775e233f3d827a3f0000000069f4523e000080bf60c70a3e102bd03e4b4c67bf60c70a3e102bd03e4b4c67bffa10063f861e223fef2a7d3f000000008fe6173e000080bf1698b23d19ebc83e9d676abf1698b23d19ebc83e9d676abf62de033f4ddc203fcbd87e3f00000000452bc23d000080bff02a2c3d4eb0c13e0abb6cbff02a2c3d4eb0c13e0abb6cbfc8d9013f159d1f3f67bc7f3f0000000062fd393d000080bf000000008e92ba3eee656ebf000000008e92ba3eee656ebf0000003fce641e3f0000803f0000000000000000000080bfed2a2cbd4eb0c13e0abb6cbfed2a2cbd4eb0c13e0abb6cbf704cfc3e159d1f3f67bc7f3f000000005ffd39bd000080bf36f02fbd3fecdb3e42eb66bf36f02fbd3fecdb3e42eb66bf611ffc3ec12d243fd3b57f3f00000000b1d342bd000080bf4673b6bd1c10e43e1c1064bf4673b6bd1c10e43e1c1064bfd6e0f73e969e253fc2ba7e3f0000000097c8cbbd000080bf66b30dbe012bec3e0e5c60bf66b30dbe012bec3e0e5c60bf2a3df33e1611273f09de7c3f00000000a6b41fbe000080bfe64443be2016f43e83ad5bbfe64443be2016f43e83ad5bbf672eee3e637e283f65e7793f0000000004235ebe000080bf61a27bbe5fa2fb3e9ee355bf61a27bbe5fa2fb3e9ee355bfc0b0e83edadd293ffa98753f000000001c7890be000080bfcf289bbeae4c013f16e14ebfcf289bbeae4c013f16e14ebfc6c3e23e27252b3f45b36f3f0000000072c6b3be000080bf0153b9bedc5f043fca8f46bf0153b9bedc5f043fca8f46bfa16bdc3eac482c3f9efb673f000000007184d8be000080bfcfe0d7be82ec063fb5e43cbfcfe0d7be82ec063fb5e43cbf38b2d53e403c2d3f2f455e3f00000000ed05febe000080bfd94ef6be77d6083f9ae331bfd94ef6be77d6083f9ae331bfe1a7ce3e45f42d3f2e7b523f00000000c0b711bf000080bfa4060abfa4060a3f92a125bfa4060abfa4060a3f92a125bf3b63c73e08672e3f27aa443f0000000020e323bf000080bf974518bfcf6d0a3f974518bf974518bfcf6d0a3f974518bf0000c03e0c8e2e3ff304353f00000000f30435bf000080bf92a125bfa4060a3fa4060abf92a125bfa4060a3fa4060abfc49cb83e08672e3f20e3233f0000000027aa44bf000080bf9be331bf77d6083fd74ef6be9be331bf77d6083fd74ef6be1f58b13e45f42d3fbfb7113f00000000307b52bf000080bfb5e43cbf82ec063fcfe0d7beb5e43cbf82ec063fcfe0d7bec84daa3e403c2d3fed05fe3e000000002f455ebf000080bfca8f46bfdc5f043f0153b9beca8f46bfdc5f043f0153b9be5f94a33eac482c3f7184d83e000000009efb67bf000080bf16e14ebfae4c013fd0289bbe16e14ebfae4c013fd0289bbe3a3c9d3e27252b3f73c6b33e0000000045b36fbf000080bf9ee355bf5fa2fb3e5fa27bbe9ee355bf5fa2fb3e5fa27bbe404f973edadd293f1a78903e00000000fa9875bf000080bf83ad5bbf2016f43ee64443be83ad5bbf2016f43ee64443be99d1913e637e283f04235e3e0000000065e779bf000080bf0e5c60bf012bec3e67b30dbe0e5c60bf012bec3e67b30dbed5c28c3e1611273fa7b41f3e0000000009de7cbf000080bfb1a25cbf0379ff3e5fccb9bdb1a25cbf0379ff3e5fccb9bdd08b883ede912a3ff964d63d00000000e8977ebf000080bfa81860bf8681f63eed4633bda81860bf8681f63eed4633bd2b12843eb2ee283f638b4c3d000000003bae7fbf000080bfdbc562bf5392ed3e00000000dbc562bf5392ed3e000000000000803e9851273f0000008000000000000080bf000080bfa81860bf8681f63eec46333da81860bf8681f63eec46333da8db773eb2ee283f628b4cbd000000003bae7fbf000080bfb1a25cbf0379ff3e5fccb93db1a25cbf0379ff3e5fccb93d60e86e3ede912a3ff964d6bd00000000e8977ebf000080bfa04358bf5329043f142d103ea04358bf5329043f142d103ebf15653e66342c3f345828be0000000050847cbf000080bfe8da52bf876f083fac73463ee8da52bf876f083fac73463e8c565a3e86cd2d3f48896abe00000000de3179bf000080bf374a4cbf06730c3fc45c7f3e374a4cbf06730c3fc45c7f3e2fa34e3e5c522f3f80b798be00000000cd5874bf000080bfb37844bf3f14103f5b2d9d3eb37844bf3f14103f5b2d9d3eb3fc413e25b6303fea26bebe00000000a6b06dbf000080bfb4563bbfd631133fb356bb3eb4563bbfd631133fb356bb3eec6f343edbea313f2df9e4be000000002ef964bf000080bf96e130bf31ab153f2eb3d93e96e130bf31ab153f2eb3d93e1e18263e4de2323f3f2b06bf0000000048065abf000080bfd92625bf9b63173f42baf73ed92625bf9b63173f42baf73e2a20173e9e8f333f989919bf00000000cecc4cbf000080bf984518bf9745183fce6d0a3f984518bf9745183fce6d0a3f3ec1073ef6e8333f48342cbf00000000b86c3dbf000080bfcf6d0abf9745183f9745183fcf6d0abf9745183f9745183f867df03df6e8333fb76c3dbf0000000049342cbf000080bf44baf7be9b63173fd826253f44baf7be9b63173fd826253faebfd13d9e8f333fcdcc4cbf000000009a9919bf000080bf2fb3d9be31ab153f96e1303f2fb3d9be31ab153f96e1303fc3cfb33d4de2323f47065abf000000003f2b06bf000080bfb456bbbed631133fb4563b3fb456bbbed631133fb4563b3f2920973ddbea313f2ef964bf000000002ef9e4be000080bf5d2d9dbe3f14103fb378443f5d2d9dbe3f14103fb378443f360d783d25b6303fa6b06dbf00000000ec26bebe000080bfc55c7fbe06730c3f374a4c3fc55c7fbe06730c3f374a4c3f4373453d5c522f3fcd5874bf0000000080b798be000080bfad7346be876f083fe8da523fad7346be876f083fe8da523fcfa5163d86cd2d3fde3179bf0000000049896abe000080bf162d10be5329043fa043583f162d10be5329043fa043583f0652d73c66342c3f50847cbf00000000365828be000080bf5fccb9bd0379ff3eb1a25c3f5fccb9bd0379ff3eb1a25c3fffbc883cde912a3fe8977ebf00000000f964d6bd000080bfed4633bd8681f63ea818603fed4633bd8681f63ea818603f7045023cb2ee283f3bae7fbf00000000638b4cbd000080bf000000005392ed3edbc5623f000000005392ed3edbc5623f000000809851273f000080bf0000000000000000000080bf00000000ffb5033fa9845b3f00000000ffb5033fa9845b3f000000808f092c3f000080bf0000000000000000000080bfe41636bd2b91083f2e3b583fe41636bd2b91083f2e3b583f851d093c2eda2d3f6ba57fbf00000000ef4757bd000080bf9f88bcbd77660d3fb319543f9f88bcbd77660d3fb319543f4b46903c2eaf2f3f2a6f7ebf00000000ec29e2bd000080bfc11e12bec11e123fe7004f3fc11e12bec11e123fe7004f3fb5bce33c0780313fc61a7cbf00000000c8f431be000080bfabd248be009e163fabd2483fabd248be009e163fabd2483f86b31f3db941333f435b78bf00000000435b78be000080bf8ff880bedfc31a3fd774413f8ff880bedfc31a3fd774413faebf513ddae6343fe8dc72bf000000009be8a1be000080bf226d9ebe226d1e3fa7d4383f226d9ebe226d1e3fa7d4383f66f9833dfe5f363f174d6bbf00000000cbafc9be000080bff05ebcbef275213f71ea2e3ff05ebcbef275213f71ea2e3ff6ffa03daf9c373f8e6661bf0000000036bdf2be000080bf4a51dabef7bc233ff7bc233f4a51dabef7bc233ff7bc233fb8a8bf3df68c383f400155bf00000000d5000ebf000080bf44baf7bed826253f9b63173f44baf7bed826253f9b63173f5883df3d4323393f102246bf00000000df1b22bf000080bfa4060abf92a1253fa4060a3fa4060abf92a1253fa4060a3f0000003e7156393ff40435bf00000000f40435bf000080bf9b6317bfd826253f44baf73e9b6317bfd826253f44baf73e533e103e4323393fdf1b22bf00000000102246bf000080bff7bc23bff7bc233f4951da3ef7bc23bff7bc233f4951da3ea42b203ef68c383fd5000ebf00000000400155bf000080bf71ea2ebff275213ff15ebc3e71ea2ebff275213ff15ebc3e04802f3eaf9c373f38bdf2be000000008e6661bf000080bfa7d438bf226d1e3f226d9e3ea7d438bf226d1e3f226d9e3e4d033e3efe5f363fcbafc9be00000000174d6bbf000080bfd77441bfdfc31a3f8ff8803ed77441bfdfc31a3f8ff8803e14904b3edae6343f9be8a1be00000000e8dc72bf000080bfabd248bf009e163faad2483eabd248bf009e163faad2483e1f13583eb941333f415b78be00000000435b78bf000080bfe7004fbfc11e123fc01e123ee7004fbfc11e123fc01e123e6988633e0780313fc7f431be00000000c61a7cbf000080bfb31954bf77660d3fa288bc3db31954bf77660d3fa288bc3d35f76d3e2eaf2f3ff029e2bd000000002a6f7ebf000080bf2e3b58bf2b91083fe616363d2e3b58bf2b91083fe616363d276e773e2eda2d3ff14757bd000000006ba57fbf000080bfa9845bbfffb5033f00000000a9845bbfffb5033f000000000000803e8f092c3f0000008000000000000080bf000080bf2e3b58bf2b91083fe41636bd2e3b58bf2b91083fe41636bdec48843e2eda2d3fef47573d000000006ba57fbf000080bfb31954bf77660d3f9f88bcbdb31954bf77660d3f9f88bcbd6504893e2eaf2f3fec29e23d000000002a6f7ebf000080bfa04358bf5329043f162d10bea04358bf5329043f162d10be20758d3e66342c3f3658283e0000000050847cbf000080bfe8da52bf876f083fad7346bee8da52bf876f083fad7346bebad4923e86cd2d3f49896a3e00000000de3179bf000080bf374a4cbf06730c3fc55c7fbe374a4cbf06730c3fc55c7fbe68ae983e5c522f3f80b7983e00000000cd5874bf000080bfb37844bf3f14103f5d2d9dbeb37844bf3f14103f5d2d9dbea7019f3e25b6303fec26be3e00000000a6b06dbf000080bfb4563bbfd631133fb456bbbeb4563bbfd631133fb456bbbe09c8a53edbea313f2ef9e43e000000002ef964bf000080bf96e130bf31ab153f2fb3d9be96e130bf31ab153f2fb3d9bef0f3ac3e4de2323f3f2b063f0000000047065abf000080bfd82625bf9b63173f44baf7bed82625bf9b63173f44baf7beec6fb43e9e8f333f9a99193f00000000cdcc4cbf000080bf974518bf9745183fcf6d0abf974518bf9745183fcf6d0abf611fbc3ef6e8333f49342c3f00000000b76c3dbf000080bfce6d0abf9745183f984518bfce6d0abf9745183f984518bf9ee0c33ef6e8333fb86c3d3f0000000048342cbf000080bf42baf7be9b63173fd92625bf42baf7be9b63173fd92625bf1590cb3e9e8f333fcecc4c3f00000000989919bf000080bf2eb3d9be31ab153f96e130bf2eb3d9be31ab153f96e130bf0f0cd33e4de2323f48065a3f000000003f2b06bf000080bfb356bbbed631133fb4563bbfb356bbbed631133fb4563bbff637da3edbea313f2ef9643f000000002df9e4be000080bf5b2d9dbe3f14103fb37844bf5b2d9dbe3f14103fb37844bf59fee03e25b6303fa6b06d3f00000000ea26bebe000080bfc45c7fbe06730c3f374a4cbfc45c7fbe06730c3f374a4cbf9751e73e5c522f3fcd58743f0000000080b798be000080bfac7346be876f083fe8da52bfac7346be876f083fe8da52bf462bed3e86cd2d3fde31793f0000000048896abe000080bf142d10be5329043fa04358bf142d10be5329043fa04358bfdf8af23e66342c3f50847c3f00000000345828be000080bf5fccb9bd0379ff3eb1a25cbf5fccb9bd0379ff3eb1a25cbf3074f73ede912a3fe8977e3f00000000f964d6bd000080bfec4633bd8681f63ea81860bfec4633bd8681f63ea81860bfd4edfb3eb2ee283f3bae7f3f00000000628b4cbd000080bf000000005392ed3edbc562bf000000005392ed3edbc562bf0000003f9851273f0000803f0000000000000000000080bf00000000fbddd33ec70d69bf00000000fbddd33ec70d69bf0000003fc6c3223f0000803f0000000000000000000080bf32f02f3d3fecdb3e42eb66bf32f02f3d3fecdb3e42eb66bf50f0013fc12d243fd3b57f3f00000000add3423d000080bf4a73b63d1c10e43e1c1064bf4a73b63d1c10e43e1c1064bf950f043f969e253fc2ba7e3f000000009bc8cb3d000080bf67b30d3e012bec3e0e5c60bf67b30d3e012bec3e0e5c60bf6b61063f1611273f09de7c3f00000000a7b41f3e000080bfe644433e2016f43e83ad5bbfe644433e2016f43e83ad5bbfcce8083f637e283f65e7793f0000000004235e3e000080bf5fa27b3e5fa2fb3e9ee355bf5fa27b3e5fa2fb3e9ee355bfa0a70b3fdadd293ffa98753f000000001a78903e000080bfd0289b3eae4c013f16e14ebfd0289b3eae4c013f16e14ebf1e9e0e3f27252b3f45b36f3f0000000073c6b33e000080bf0153b93edc5f043fca8f46bf0153b93edc5f043fca8f46bf30ca113fac482c3f9efb673f000000007184d83e000080bfcfe0d73e82ec063fb5e43cbfcfe0d73e82ec063fb5e43cbfe426153f403c2d3f2f455e3f00000000ed05fe3e000080bfd74ef63e77d6083f9be331bfd74ef63e77d6083f9be331bf10ac183f45f42d3f307b523f00000000bfb7113f000080bfa4060a3fa4060a3f92a125bfa4060a3fa4060a3f92a125bf624e1c3f08672e3f27aa443f0000000020e3233f000080bf9745183fcf6d0a3f974518bf9745183fcf6d0a3f974518bf0000203f0c8e2e3ff304353f00000000f304353f000080bf92a1253fa4060a3fa4060abf92a1253fa4060a3fa4060abf9eb1233f08672e3f20e3233f0000000027aa443f000080bf9ae3313f77d6083fd94ef6be9ae3313f77d6083fd94ef6bef053273f45f42d3fc0b7113f000000002e7b523f000080bfb5e43c3f82ec063fcfe0d7beb5e43c3f82ec063fcfe0d7be1cd92a3f403c2d3fed05fe3e000000002f455e3f000080bfca8f463fdc5f043f0153b9beca8f463fdc5f043f0153b9bed0352e3fac482c3f7184d83e000000009efb673f000080bf16e14e3fae4c013fcf289bbe16e14e3fae4c013fcf289bbee361313f27252b3f72c6b33e0000000045b36f3f000080bf9ee3553f5fa2fb3e61a27bbe9ee3553f5fa2fb3e61a27bbe6058343fdadd293f1c78903e00000000fa98753f000080bf83ad5b3f2016f43ee64443be83ad5b3f2016f43ee64443be3417373f637e283f04235e3e0000000065e7793f000080bf0e5c603f012bec3e66b30dbe0e5c603f012bec3e66b30dbe969e393f1611273fa6b41f3e0000000009de7c3f000080bf1c10643f1c10e43e4673b6bd1c10643f1c10e43e4673b6bd6bf03b3f969e253f97c8cb3d00000000c2ba7e3f000080bf42eb663f3fecdb3e36f02fbd42eb663f3fecdb3e36f02fbdb00f3e3fc12d243fb1d3423d00000000d3b57f3f000080bfc70d693ffbddd33e00000000c70d693ffbddd33e000000000000403fc6c3223f00000080000000000000803f000080bf0abb6c3f4eb0c13ef02a2c3d0abb6c3f4eb0c13ef02a2c3dc8d9413f159d1f3f62fd39bd0000000067bc7f3f000080bf9d676a3f19ebc83e1698b23d9d676a3f19ebc83e1698b23d62de433f4ddc203f452bc2bd00000000cbd87e3f000080bf4b4c673f102bd03e60c70a3e4b4c673f102bd03e60c70a3efb10463f861e223f8fe617be00000000ef2a7d3f000080bfa147633f5551d73ebd643f3ea147633f5551d73ebd643f3e4474483f775e233f69f452be000000003d827a3f000080bfae375e3fae37de3e89e8763eae375e3fae37de3e89e8763e140a4b3f6895243f9e0889be000000001ba9763f000080bf74fc573ff3b0e43ef775983e74fc573ff3b0e43ef775983ef3d24d3f30bb253f6667aabe00000000d167713f000080bf1d7b503f808aea3eb86bb63e1d7b503f808aea3eb86bb63e99cd503f72c6263f1f38cdbe000000004a896a3f000080bfd1a1473ffb8eef3edff0d43ed1a1473ffb8eef3edff0d43e71f6533f16ad273ff1f0f0be00000000e2e1613f000080bf986b3d3f568af33e568af33e986b3d3f568af33e568af33e4447573f1665283f176f0abf000000007957573f000080bf9be3313fd74ef63e77d6083f9be3313fd74ef63e77d6083f27b75a3f7ee5283f01161cbf0000000068e94a3f000080bfd826253f44baf73e9b63173fd826253f44baf73e9b63173fca3a5e3f8727293f4afc2cbf0000000023b63c3f000080bf9b63173f44baf73ed826253f9b63173f44baf73ed826253f36c5613f8727293f23b63cbf000000004afc2c3f000080bf77d6083fd74ef63e9be3313f77d6083fd74ef63e9be3313fd948653f7ee5283f68e94abf0000000001161c3f000080bf588af33e568af33e986b3d3f588af33e568af33e986b3d3fbcb8683f1665283f785757bf00000000186f0a3f000080bfdef0d43efb8eef3ed2a1473fdef0d43efb8eef3ed2a1473f90096c3f16ad273fe3e161bf00000000f0f0f03e000080bfb86bb63e808aea3e1d7b503fb86bb63e808aea3e1d7b503f67326f3f72c6263f4a896abf000000001f38cd3e000080bf92a1253fa4060a3fa4060a3f92a1253fa4060a3fa4060a3f624e5c3f08672e3f20e323bf0000000027aa443f000080bf9be3313f77d6083fd74ef63e9be3313f77d6083fd74ef63e10ac583f45f42d3fbfb711bf00000000307b523f000080bfb5e43c3f82ec063fcfe0d73eb5e43c3f82ec063fcfe0d73ee426553f403c2d3fed05febe000000002f455e3f000080bfca8f463fdc5f043f0153b93eca8f463fdc5f043f0153b93e30ca513fac482c3f7184d8be000000009efb673f000080bf16e14e3fae4c013fd0289b3e16e14e3fae4c013fd0289b3e1d9e4e3f27252b3f73c6b3be0000000045b36f3f000080bf9ee3553f5fa2fb3e5fa27b3e9ee3553f5fa2fb3e5fa27b3ea0a74b3fdadd293f1a7890be00000000fa98753f000080bf83ad5b3f2016f43ee644433e83ad5b3f2016f43ee644433ecde8483f637e283f04235ebe0000000065e7793f000080bf0e5c603f012bec3e67b30d3e0e5c603f012bec3e67b30d3e6b61463f1611273fa7b41fbe0000000009de7c3f000080bf1c10643f1c10e43e4a73b63d1c10643f1c10e43e4a73b63d950f443f969e253f9bc8cbbd00000000c2ba7e3f000080bf42eb663f3fecdb3e32f02f3d42eb663f3fecdb3e32f02f3d4ff0413fc12d243fadd342bd00000000d3b57f3f000080bfdbc5623f5392ed3e00000000dbc5623f5392ed3e000000000000403f9851273f00000080000000000000803f000080bfa818603f8681f63eec4633bda818603f8681f63eec4633bdeaf63d3fb2ee283f628b4c3d000000003bae7f3f000080bfb1a25c3f0379ff3e5fccb9bdb1a25c3f0379ff3e5fccb9bd18ba3b3fde912a3ff964d63d00000000e8977e3f000080bfa043583f5329043f142d10bea043583f5329043f142d10be7045393f66342c3f3458283e0000000050847c3f000080bfe8da523f876f083fac7346bee8da523f876f083fac7346bea495363f86cd2d3f48896a3e00000000de31793f000080bf374a4c3f06730c3fc45c7fbe374a4c3f06730c3fc45c7fbecca8333f5c522f3f80b7983e00000000cd58743f000080bfb378443f3f14103f5b2d9dbeb378443f3f14103f5b2d9dbe2d7f303f25b6303fea26be3e00000000a6b06d3f000080bfb4563b3fd631133fb356bbbeb4563b3fd631133fb356bbbefc1b2d3fdbea313f2df9e43e000000002ef9643f000080bf96e1303f31ab153f2eb3d9be96e1303f31ab153f2eb3d9be0886293f4de2323f3f2b063f0000000048065a3f000080bfd926253f9b63173f42baf7bed926253f9b63173f42baf7be0bc8253f9e8f333f9899193f00000000cecc4c3f000080bf9845183f9745183fce6d0abf9845183f9745183fce6d0abf50f0213ff6e8333f48342c3f00000000b86c3d3f000080bfcf6d0a3f9745183f974518bfcf6d0a3f9745183f974518bfb10f1e3ff6e8333fb76c3d3f0000000049342c3f000080bf44baf73e9b63173fd82625bf44baf73e9b63173fd82625bff6371a3f9e8f333fcdcc4c3f000000009a99193f000080bf2fb3d93e31ab153f96e130bf2fb3d93e31ab153f96e130bff879163f4de2323f47065a3f000000003f2b063f000080bfb456bb3ed631133fb4563bbfb456bb3ed631133fb4563bbf05e4123fdbea313f2ef9643f000000002ef9e43e000080bf5d2d9d3e3f14103fb37844bf5d2d9d3e3f14103fb37844bfd4800f3f25b6303fa6b06d3f00000000ec26be3e000080bfc55c7f3e06730c3f374a4cbfc55c7f3e06730c3f374a4cbf34570c3f5c522f3fcd58743f0000000080b7983e000080bfad73463e876f083fe8da52bfad73463e876f083fe8da52bf5d6a093f86cd2d3fde31793f0000000049896a3e000080bf162d103e5329043fa04358bf162d103e5329043fa04358bf90ba063f66342c3f50847c3f000000003658283e000080bf5fccb93d0379ff3eb1a25cbf5fccb93d0379ff3eb1a25cbfe845043fde912a3fe8977e3f00000000f964d63d000080bfed46333d8681f63ea81860bfed46333d8681f63ea81860bf1609023fb2ee283f3bae7f3f00000000638b4c3d000080bf00000000ffb5033fa9845bbf00000000ffb5033fa9845bbf0000003f8f092c3f0000803f0000000000000000000080bfe61636bd2b91083f2e3b58bfe61636bd2b91083f2e3b58bf13b7fb3e2eda2d3f6ba57f3f00000000f14757bd000080bfa288bcbd77660d3fb31954bfa288bcbd77660d3fb31954bf9bfbf63e2eaf2f3f2a6f7e3f00000000f029e2bd000080bfc01e12bec11e123fe7004fbfc01e12bec11e123fe7004fbf34c4f13e0780313fc61a7c3f00000000c7f431be000080bfaad248be009e163fabd248bfaad248be009e163fabd248bf8f09ec3eb941333f435b783f00000000415b78be000080bf8ff880bedfc31a3fd77441bf8ff880bedfc31a3fd77441bf0ac8e53edae6343fe8dc723f000000009be8a1be000080bf226d9ebe226d1e3fa7d438bf226d9ebe226d1e3fa7d438bfa601df3efe5f363f174d6b3f00000000cbafc9be000080bff15ebcbef275213f71ea2ebff15ebcbef275213f71ea2ebf02c0d73eaf9c373f8e66613f0000000038bdf2be000080bf4951dabef7bc233ff7bc23bf4951dabef7bc233ff7bc23bfd215d03ef68c383f4001553f00000000d5000ebf000080bf44baf7bed826253f9b6317bf44baf7bed826253f9b6317bf2a1fc83e4323393f1022463f00000000df1b22bf000080bfa4060abf92a1253fa4060abfa4060abf92a1253fa4060abf0000c03e7156393ff404353f00000000f40435bf000080bf9b6317bfd826253f44baf7be9b6317bfd826253f44baf7bed5e0b73e4323393fdf1b223f00000000102246bf000080bff7bc23bff7bc233f4a51dabef7bc23bff7bc233f4a51dabe2eeaaf3ef68c383fd5000e3f00000000400155bf000080bf71ea2ebff275213ff05ebcbe71ea2ebff275213ff05ebcbefe3fa83eaf9c373f36bdf23e000000008e6661bf000080bfa7d438bf226d1e3f226d9ebea7d438bf226d1e3f226d9ebe59fea03efe5f363fcbafc93e00000000174d6bbf000080bfd77441bfdfc31a3f8ff880bed77441bfdfc31a3f8ff880bef6379a3edae6343f9be8a13e00000000e8dc72bf000080bfabd248bf009e163fabd248beabd248bf009e163fabd248be71f6933eb941333f435b783e00000000435b78bf000080bfe7004fbfc11e123fc11e12bee7004fbfc11e123fc11e12becb3b8e3e0780313fc8f4313e00000000c61a7cbf000080bf2f794abf24d51a3f2c90bebd2f794abf24d51a3f2c90bebdfa8a893ec1ed343f764aef3d000000001e3f7ebf000080bfe0524fbfdabb153faa4938bde0524fbfdabb153faa4938bdbe85843ed6e8323f8734633d00000000199b7fbf000080bf564753bf208f103f00000000564753bf208f103f000000000000803e80e5303f0000008000000000000080bf000080bfe0524fbfdabb153fa549383de0524fbfdabb153fa549383d85f4763ed6e8323f813463bd00000000199b7fbf000080bf2f794abf24d51a3f2e90be3d2f794abf24d51a3f2e90be3d0bea6c3ec1ed343f784aefbd000000001e3f7ebf000080bf429d44bfc6bf1f3ff275133e429d44bfc6bf1f3ff275133e00cb613e94e9363f23b63cbe00000000839d7bbf000080bfe3a43dbfb35b243f79494a3ee3a43dbfb35b243f79494a3e4787553ec6ce383f5bec83be000000002d5b77bf000080bf9f7b35bf1485283f72a1813e9f7b35bf1485283f72a1813e8518483e218d3a3f4a34acbe00000000001671bf000080bf38162cbf38162c3f6fd99e3e38162cbf38162c3f6fd99e3e4a87393e73123c3fcb8ed6be00000000067068bf000080bff27521bf71ea2e3ff15ebc3ef27521bf71ea2e3ff15ebc3eefef293ef94b3d3fb2fd00bf000000009d205dbf000080bf31ab15bf96e1303f2fb3d93e31ab15bf96e1303f2fb3d93eab85193e68283e3f6b9216bf0000000055094fbf000080bf77d608bf9be3313fd74ef63e77d608bf9be3313fd74ef63ed891083e519a3e3f46412bbf0000000086483ebf000080bfd74ef6be9be3313f77d6083fd74ef6be9be3313f77d6083f50dcee3d519a3e3f86483ebf0000000046412bbf000080bf2fb3d9be96e1303f31ab153f2fb3d9be96e1303f31ab153faaf4cc3d68283e3f55094fbf000000006b9216bf000080bff05ebcbe71ea2e3ff275213ff05ebcbe71ea2e3ff275213f2120ac3df94b3d3f9d205dbf00000000b1fd00bf000080bf6fd99ebe38162c3f38162c3f6fd99ebe38162c3f38162c3f6af18c3d73123c3f067068bf00000000cb8ed6be000080bf72a181be1485283f9f7b353f72a181be1485283f9f7b353fea9d5f3d218d3a3f001671bf000000004a34acbe000080bf7a494abeb35b243fe2a43d3f7a494abeb35b243fe2a43d3fe7e2293dc6ce383f2b5b77bf000000005cec83be000080bff27513bec6bf1f3f429d443ff27513bec6bf1f3f429d443ffaa7f13c94e9363f839d7bbf0000000023b63cbe000080bf2c90bebd24d51a3f2f794a3f2c90bebd24d51a3f2f794a3fa1af983cc1ed343f1e3f7ebf00000000764aefbd000080bfaa4938bddabb153fe0524f3faa4938bddabb153fe0524f3fb4b7103cd6e8323f199b7fbf00000000873463bd000080bf00000000208f103f5647533f00000000208f103f5647533f0000008080e5303f000080bf0000000000000000000080bf00000000362b1d3ffd124a3f00000000362b1d3ffd124a3f00000080dcdd353f000080bf0000000000000000000080bf5fcc39bdd392223f2569453f5fcc39bdd392223f2569453f1c36193cce11383fe98e7fbf00000000818670bd000080bf12d0bfbd10d6273f12d03f3f12d0bfbd10d6273f12d03f3f3a22a23c3d433a3fec057ebf00000000ec05febd000080bf1f2514bef9d52c3f662e393f1f2514bef9d52c3f662e393f91ae003d0b653c3f56077bbf00000000acd248be000080bf40c84abe386f313f386f313f40c84abe386f313f386f313f556c353ddc663e3f6f2676bf0000000040a88cbe000080bf72a181be9f7b353f1485283f72a181be9f7b353f1485283f315c6f3d7d35403fbdef6ebf000000001bccb7be000080bf226d9ebea7d4383f226d1e3f226d9ebea7d4383f226d1e3f2920973dfabb413f2ef964bf000000002ef9e4be000080bfb456bbbeb4563b3fd631133fb456bbbeb4563b3fd631133f9ab9b83d94e5423f33fa57bf00000000ac7009bf000080bfcfe0d7beb5e43c3f82ec063fcfe0d7beb5e43c3f82ec063f6ceedb3d5fa0433f04e747bf0000000003ec1fbf000080bf568af3be986b3d3f568af33e568af3be986b3d3f568af33e0000003e17e0433ff40435bf00000000f40435bf000080bf82ec06bfb5e43c3fcee0d73e82ec06bfb5e43c3fcee0d73eca08123e5fa0433f03ec1fbf0000000006e747bf000080bfd63113bfb4563b3fb456bb3ed63113bfb4563b3fb456bb3e32a3233e94e5423fac7009bf0000000033fa57bf000080bf226d1ebfa7d4383f216d9e3e226d1ebfa7d4383f216d9e3eec6f343efabb413f2cf9e4be000000002ef964bf000080bf148528bf9f7b353f72a1813e148528bf9f7b353f72a1813ef328443e7d35403f1bccb7be00000000bdef6ebf000080bf386f31bf386f313f3fc84a3e386f31bf386f313f3fc84a3eeba4523edc663e3f3fa88cbe000000006f2676bf000080bf662e39bff9d52c3f2025143e662e39bff9d52c3f2025143e5bd45f3e0b653c3fadd248be0000000056077bbf000080bf12d03fbf10d6273f11d0bf3d12d03fbf10d6273f11d0bf3db8bb6b3e3d433a3fea05febd00000000ec057ebf000080bf256945bfd392223f65cc393d256945bfd392223f65cc393d9e6c763ece11383f888670bd00000000e98e7fbf000080bffd124abf362b1d3f00000000fd124abf362b1d3f000000000000803edcdd353f0000008000000000000080bf000080bf256945bfd392223f5fcc39bd256945bfd392223f5fcc39bdb1c9843ece11383f8186703d00000000e98e7fbf000080bf12d03fbf10d6273f12d0bfbd12d03fbf10d6273f12d0bfbd23228a3e3d433a3fec05fe3d00000000ec057ebf000080bf429d44bfc6bf1f3ff27513be429d44bfc6bf1f3ff27513be7f1a8f3e94e9363f23b63c3e00000000839d7bbf000080bfe2a43dbfb35b243f7a494abee2a43dbfb35b243f7a494abe5d3c953ec6ce383f5cec833e000000002b5b77bf000080bf9f7b35bf1485283f72a181be9f7b35bf1485283f72a181bebdf39b3e218d3a3f4a34ac3e00000000001671bf000080bf38162cbf38162c3f6fd99ebe38162cbf38162c3f6fd99ebe5a3ca33e73123c3fcb8ed63e00000000067068bf000080bff27521bf71ea2e3ff05ebcbef27521bf71ea2e3ff05ebcbe0808ab3ef94b3d3fb1fd003f000000009d205dbf000080bf31ab15bf96e1303f2fb3d9be31ab15bf96e1303f2fb3d9be2a3db33e68283e3f6b92163f0000000055094fbf000080bf77d608bf9be3313fd74ef6be77d608bf9be3313fd74ef6be14b7bb3e519a3e3f46412b3f0000000086483ebf000080bfd74ef6be9be3313f77d608bfd74ef6be9be3313f77d608bfeb48c43e519a3e3f86483e3f0000000046412bbf000080bf2fb3d9be96e1303f31ab15bf2fb3d9be96e1303f31ab15bfd5c2cc3e68283e3f55094f3f000000006b9216bf000080bff15ebcbe71ea2e3ff27521bff15ebcbe71ea2e3ff27521bff7f7d43ef94b3d3f9d205d3f00000000b2fd00bf000080bf6fd99ebe38162c3f38162cbf6fd99ebe38162c3f38162cbfa5c3dc3e73123c3f0670683f00000000cb8ed6be000080bf72a181be1485283f9f7b35bf72a181be1485283f9f7b35bf420ce43e218d3a3f0016713f000000004a34acbe000080bf79494abeb35b243fe3a43dbf79494abeb35b243fe3a43dbfa3c3ea3ec6ce383f2d5b773f000000005bec83be000080bff27513bec6bf1f3f429d44bff27513bec6bf1f3f429d44bf80e5f03e94e9363f839d7b3f0000000023b63cbe000080bf2e90bebd24d51a3f2f794abf2e90bebd24d51a3f2f794abf0575f63ec1ed343f1e3f7e3f00000000784aefbd000080bfa54938bddabb153fe0524fbfa54938bddabb153fe0524fbf427afb3ed6e8323f199b7f3f00000000813463bd000080bf00000000208f103f564753bf00000000208f103f564753bf0000003f80e5303f0000803f0000000000000000000080bfe416363d2b91083f2e3b58bfe416363d2b91083f2e3b58bf7624023f2eda2d3f6ba57f3f00000000ef47573d000080bf9f88bc3d77660d3fb31954bf9f88bc3d77660d3fb31954bf3282043f2eaf2f3f2a6f7e3f00000000ec29e23d000080bfc11e123ec11e123fe7004fbfc11e123ec11e123fe7004fbfe61d073f0780313fc61a7c3f00000000c8f4313e000080bfabd2483e009e163fabd248bfabd2483e009e163fabd248bf38fb093fb941333f435b783f00000000435b783e000080bf8ff8803edfc31a3fd77441bf8ff8803edfc31a3fd77441bffb1b0d3fdae6343fe8dc723f000000009be8a13e000080bf226d9e3e226d1e3fa7d438bf226d9e3e226d1e3fa7d438bf2d7f103ffe5f363f174d6b3f00000000cbafc93e000080bff05ebc3ef275213f71ea2ebff05ebc3ef275213f71ea2ebfff1f143faf9c373f8e66613f0000000036bdf23e000080bf4a51da3ef7bc233ff7bc23bf4a51da3ef7bc233ff7bc23bf17f5173ff68c383f4001553f00000000d5000e3f000080bf44baf73ed826253f9b6317bf44baf73ed826253f9b6317bf6bf01b3f4323393f1022463f00000000df1b223f000080bfa4060a3f92a1253fa4060abfa4060a3f92a1253fa4060abf0000203f7156393ff404353f00000000f404353f000080bf9b63173fd826253f44baf7be9b63173fd826253f44baf7be960f243f4323393fdf1b223f000000001022463f000080bff7bc233ff7bc233f4951dabef7bc233ff7bc233f4951dabee90a283ff68c383fd5000e3f000000004001553f000080bf71ea2e3ff275213ff15ebcbe71ea2e3ff275213ff15ebcbe01e02b3faf9c373f38bdf23e000000008e66613f000080bfa7d4383f226d1e3f226d9ebea7d4383f226d1e3f226d9ebed4802f3ffe5f363fcbafc93e00000000174d6b3f000080bfd774413fdfc31a3f8ff880bed774413fdfc31a3f8ff880be05e4323fdae6343f9be8a13e00000000e8dc723f000080bfabd2483f009e163faad248beabd2483f009e163faad248bec804363fb941333f415b783e00000000435b783f000080bfe7004f3fc11e123fc01e12bee7004f3fc11e123fc01e12be1ae2383f0780313fc7f4313e00000000c61a7c3f000080bfb319543f77660d3fa288bcbdb319543f77660d3fa288bcbdce7d3b3f2eaf2f3ff029e23d000000002a6f7e3f000080bf2e3b583f2b91083fe61636bd2e3b583f2b91083fe61636bd8adb3d3f2eda2d3ff147573d000000006ba57f3f000080bfa9845b3fffb5033f00000000a9845b3fffb5033f000000000000403f8f092c3f00000080000000000000803f000080bfa818603f8681f63eed46333da818603f8681f63eed46333d1609423fb2ee283f638b4cbd000000003bae7f3f000080bfb1a25c3f0379ff3e5fccb93db1a25c3f0379ff3e5fccb93de845443fde912a3ff964d6bd00000000e8977e3f000080bfa043583f5329043f162d103ea043583f5329043f162d103e90ba463f66342c3f365828be0000000050847c3f000080bfe8da523f876f083fad73463ee8da523f876f083fad73463e5d6a493f86cd2d3f49896abe00000000de31793f000080bf374a4c3f06730c3fc55c7f3e374a4c3f06730c3fc55c7f3e34574c3f5c522f3f80b798be00000000cd58743f000080bfb378443f3f14103f5d2d9d3eb378443f3f14103f5d2d9d3ed3804f3f25b6303fec26bebe00000000a6b06d3f000080bfb4563b3fd631133fb456bb3eb4563b3fd631133fb456bb3e05e4523fdbea313f2ef9e4be000000002ef9643f000080bf96e1303f31ab153f2fb3d93e96e1303f31ab153f2fb3d93ef879563f4de2323f3f2b06bf0000000047065a3f000080bfd826253f9b63173f44baf73ed826253f9b63173f44baf73ef6375a3f9e8f333f9a9919bf00000000cdcc4c3f000080bf9745183f9745183fcf6d0a3f9745183f9745183fcf6d0a3fb10f5e3ff6e8333f49342cbf00000000b76c3d3f000080bf9745183fcf6d0a3f9745183f9745183fcf6d0a3f9745183f0000603f0c8e2e3ff30435bf00000000f304353f000080bfa4060a3fa4060a3f92a1253fa4060a3fa4060a3f92a1253f9eb1633f08672e3f27aa44bf0000000020e3233f000080bfd94ef63e77d6083f9ae3313fd94ef63e77d6083f9ae3313ff053673f45f42d3f2e7b52bf00000000c0b7113f000080bfcfe0d73e82ec063fb5e43c3fcfe0d73e82ec063fb5e43c3f1cd96a3f403c2d3f2f455ebf00000000ed05fe3e000080bf0153b93edc5f043fca8f463f0153b93edc5f043fca8f463fd0356e3fac482c3f9efb67bf000000007184d83e000080bfcf289b3eae4c013f16e14e3fcf289b3eae4c013f16e14e3fe361713f27252b3f45b36fbf0000000072c6b33e000080bf61a27b3e5fa2fb3e9ee3553f61a27b3e5fa2fb3e9ee3553f6058743fdadd293ffa9875bf000000001c78903e000080bfe644433e2016f43e83ad5b3fe644433e2016f43e83ad5b3f3317773f637e283f65e779bf0000000004235e3e000080bfbf643f3e5551d73ea147633fbf643f3e5551d73ea147633fbc8b773f775e233f3d827abf000000006bf4523e000080bf62c70a3e102bd03e4b4c673f62c70a3e102bd03e4b4c673f05ef793f861e223fef2a7dbf0000000091e6173e000080bf1398b23d19ebc83e9d676a3f1398b23d19ebc83e9d676a3f9e217c3f4ddc203fcbd87ebf00000000422bc23d000080bfed2a2c3d4eb0c13e0abb6c3fed2a2c3d4eb0c13e0abb6c3f38267e3f159d1f3f67bc7fbf000000005ffd393d000080bf000000008e92ba3eee656e3f000000008e92ba3eee656e3f0000803fce641e3f000080bf0000000000000000000080bf66b30d3e012bec3e0e5c603f66b30d3e012bec3e0e5c603f959e793f1611273f09de7cbf00000000a6b41f3e000080bf4673b63d1c10e43e1c10643f4673b63d1c10e43e1c10643f6bf07b3f969e253fc2ba7ebf0000000097c8cb3d000080bf36f02f3d3fecdb3e42eb663f36f02f3d3fecdb3e42eb663fb10f7e3fc12d243fd3b57fbf00000000b1d3423d000080bf00000000fbddd33ec70d693f00000000fbddd33ec70d693f0000803fc6c3223f000080bf0000000000000000000080bf142d103e5329043fa043583f142d103e5329043fa043583f7045793f66342c3f50847cbf000000003458283e000080bf5fccb93d0379ff3eb1a25c3f5fccb93d0379ff3eb1a25c3f18ba7b3fde912a3fe8977ebf00000000f964d63d000080bfec46333d8681f63ea818603fec46333d8681f63ea818603feaf67d3fb2ee283f3bae7fbf00000000628b4c3d000080bf000000005392ed3edbc5623f000000005392ed3edbc5623f0000803f9851273f000080bf0000000000000000000080bfa288bc3d77660d3fb319543fa288bc3d77660d3fb319543fce7d7b3f2eaf2f3f2a6f7ebf00000000f029e23d000080bfc01e123ec11e123fe7004f3fc01e123ec11e123fe7004f3f1ae2783f0780313fc61a7cbf00000000c7f4313e000080bfac73463e876f083fe8da523fac73463e876f083fe8da523fa395763f86cd2d3fde3179bf0000000048896a3e000080bfc45c7f3e06730c3f374a4c3fc45c7f3e06730c3f374a4c3fcca8733f5c522f3fcd5874bf0000000080b7983e000080bf5b2d9d3e3f14103fb378443f5b2d9d3e3f14103fb378443f2d7f703f25b6303fa6b06dbf00000000ea26be3e000080bfb356bb3ed631133fb4563b3fb356bb3ed631133fb4563b3ffb1b6d3fdbea313f2ef964bf000000002df9e43e000080bf2eb3d93e31ab153f96e1303f2eb3d93e31ab153f96e1303f0886693f4de2323f48065abf000000003f2b063f000080bf42baf73e9b63173fd926253f42baf73e9b63173fd926253f0bc8653f9e8f333fcecc4cbf000000009899193f000080bfce6d0a3f9745183f9845183fce6d0a3f9745183f9845183f50f0613ff6e8333fb86c3dbf0000000048342c3f000080bfa4060a3f92a1253fa4060a3fa4060a3f92a1253fa4060a3f0000603f7156393ff40435bf00000000f404353f000080bf9b63173fd826253f44baf73e9b63173fd826253f44baf73e6bf05b3f4323393fdf1b22bf000000001022463f000080bff7bc233ff7bc233f4a51da3ef7bc233ff7bc233f4a51da3e17f5573ff68c383fd5000ebf000000004001553f000080bf71ea2e3ff275213ff05ebc3e71ea2e3ff275213ff05ebc3eff1f543faf9c373f36bdf2be000000008e66613f000080bfa7d4383f226d1e3f226d9e3ea7d4383f226d1e3f226d9e3e2d7f503ffe5f363fcbafc9be00000000174d6b3f000080bfd774413fdfc31a3f8ff8803ed774413fdfc31a3f8ff8803efb1b4d3fdae6343f9be8a1be00000000e8dc723f000080bfabd2483f009e163fabd2483eabd2483f009e163fabd2483e38fb493fb941333f435b78be00000000435b783f000080bfe7004f3fc11e123fc11e123ee7004f3fc11e123fc11e123ee61d473f0780313fc8f431be00000000c61a7c3f000080bfb319543f77660d3f9f88bc3db319543f77660d3f9f88bc3d3282443f2eaf2f3fec29e2bd000000002a6f7e3f000080bf2e3b583f2b91083fe416363d2e3b583f2b91083fe416363d7624423f2eda2d3fef4757bd000000006ba57f3f000080bf5647533f208f103f000000005647533f208f103f000000000000403f80e5303f00000080000000000000803f000080bfe0524f3fdabb153fa54938bde0524f3fdabb153fa54938bd21bd3d3fd6e8323f8134633d00000000199b7f3f000080bf2f794a3f24d51a3f2e90bebd2f794a3f24d51a3f2e90bebd833a3b3fc1ed343f784aef3d000000001e3f7e3f000080bf429d443fc6bf1f3ff27513be429d443fc6bf1f3ff27513bec072383f94e9363f23b63c3e00000000839d7b3f000080bfe3a43d3fb35b243f79494abee3a43d3fb35b243f79494abed261353fc6ce383f5bec833e000000002d5b773f000080bf9f7b353f1485283f72a181be9f7b353f1485283f72a181be2206323f218d3a3f4a34ac3e000000000016713f000080bf38162c3f38162c3f6fd99ebe38162c3f38162c3f6fd99ebed3612e3f73123c3fcb8ed63e000000000670683f000080bff275213f71ea2e3ff15ebcbef275213f71ea2e3ff15ebcbefc7b2a3ff94b3d3fb2fd003f000000009d205d3f000080bf31ab153f96e1303f2fb3d9be31ab153f96e1303f2fb3d9be6b61263f68283e3f6b92163f0000000055094f3f000080bf77d6083f9be3313fd74ef6be77d6083f9be3313fd74ef6be7624223f519a3e3f46412b3f0000000086483e3f000080bfd74ef63e9be3313f77d608bfd74ef63e9be3313f77d608bf8adb1d3f519a3e3f86483e3f0000000046412b3f000080bf2fb3d93e96e1303f31ab15bf2fb3d93e96e1303f31ab15bf969e193f68283e3f55094f3f000000006b92163f000080bff05ebc3e71ea2e3ff27521bff05ebc3e71ea2e3ff27521bf0484153ff94b3d3f9d205d3f00000000b1fd003f000080bf6fd99e3e38162c3f38162cbf6fd99e3e38162c3f38162cbf2e9e113f73123c3f0670683f00000000cb8ed63e000080bf72a1813e1485283f9f7b35bf72a1813e1485283f9f7b35bfdff90d3f218d3a3f0016713f000000004a34ac3e000080bf7a494a3eb35b243fe2a43dbf7a494a3eb35b243fe2a43dbf2e9e0a3fc6ce383f2b5b773f000000005cec833e000080bff275133ec6bf1f3f429d44bff275133ec6bf1f3f429d44bf408d073f94e9363f839d7b3f0000000023b63c3e000080bf2c90be3d24d51a3f2f794abf2c90be3d24d51a3f2f794abf7ec5043fc1ed343f1e3f7e3f00000000764aef3d000080bfaa49383ddabb153fe0524fbfaa49383ddabb153fe0524fbfdf42023fd6e8323f199b7f3f000000008734633d000080bf00000000362b1d3ffd124abf00000000362b1d3ffd124abf0000003fdcdd353f0000803f0000000000000000000080bf65cc39bdd392223f256945bf65cc39bdd392223f256945bf4f36fb3ece11383fe98e7f3f00000000888670bd000080bf11d0bfbd10d6273f12d03fbf11d0bfbd10d6273f12d03fbfdcddf53e3d433a3fec057e3f00000000ea05febd000080bf202514bef9d52c3f662e39bf202514bef9d52c3f662e39bf2eeaef3e0b653c3f56077b3f00000000add248be000080bf3fc84abe386f313f386f31bf3fc84abe386f313f386f31bf7552e93edc663e3f6f26763f000000003fa88cbe000080bf72a181be9f7b353f148528bf72a181be9f7b353f148528bf7914e23e7d35403fbdef6e3f000000001bccb7be000080bf216d9ebea7d4383f226d1ebf216d9ebea7d4383f226d1ebff637da3efabb413f2ef9643f000000002cf9e4be000080bfb456bbbeb4563b3fd63113bfb456bbbeb4563b3fd63113bf99d1d13e94e5423f33fa573f00000000ac7009bf000080bfcee0d7beb5e43c3f82ec06bfcee0d7beb5e43c3f82ec06bf6404c93e5fa0433f06e7473f0000000003ec1fbf000080bf568af3be986b3d3f568af3be568af3be986b3d3f568af3be0000c03e17e0433ff404353f00000000f40435bf000080bf82ec06bfb5e43c3fcfe0d7be82ec06bfb5e43c3fcfe0d7be9bfbb63e5fa0433f03ec1f3f0000000004e747bf000080bfd63113bfb4563b3fb456bbbed63113bfb4563b3fb456bbbe662eae3e94e5423fac70093f0000000033fa57bf000080bf226d1ebfa7d4383f226d9ebe226d1ebfa7d4383f226d9ebe09c8a53efabb413f2ef9e43e000000002ef964bf000080bf148528bf9f7b353f72a181be148528bf9f7b353f72a181be86eb9d3e7d35403f1bccb73e00000000bdef6ebf000080bf386f31bf386f313f40c84abe386f31bf386f313f40c84abe8aad963edc663e3f40a88c3e000000006f2676bf000080bf662e39bff9d52c3f1f2514be662e39bff9d52c3f1f2514bed215903e0b653c3facd2483e0000000056077bbf000080bf5a3834bf5a38343f1c3cc0bd5a3834bf5a38343f1c3cc0bd20cd8a3e1aa43f3fee55073e000000001dc17dbf000080bf54913abf3fe82e3f54913abd54913abf3fe82e3f54913abd1b16853e044b3d3f60807f3d0000000060807fbf000080bf60f53fbf0960293f0000000060f53fbf0960293f000000000000803ee5e93a3f0000008000000000000080bf000080bf54913abf3fe82e3f53913a3d54913abf3fe82e3f53913a3dcbd3753e044b3d3f5f807fbd0000000060807fbf000080bf5a3834bf5a38343f1b3cc03d5a3834bf5a38343f1b3cc03dc0656a3e1aa43f3fed5507be000000001dc17dbf000080bff9d52cbf662e393f1e25143ef9d52cbf662e393f1e25143ede985d3e4fe5413fcb8e56be0000000043517abf000080bfb35b24bfe2a43d3f79494a3eb35b24bfe2a43d3f79494a3e2c5a4f3e38fb433f6b9296be00000000efad74bf000080bfdfc31abfd774413f8ef8803edfc31abfd774413f8ef8803eb8a83f3e87cf453f4decc4be00000000c54e6cbf000080bf3f1410bfb378443f5b2d9d3e3f1410bfb378443f5b2d9d3e809e2e3eaa4a473f1b2cf5be00000000c4bd60bf000080bfdc5f04bfca8f463f0053b93edc5f04bfca8f463f0053b93e96771c3e6856483f6dce12bf000000002fb951bf000080bffb8eefbed1a1473fdef0d43efb8eefbed1a1473fdef0d43e6293093e2be1483fbf132abf0000000038563fbf000080bfdff0d4bed1a1473ffb8eef3edff0d4bed1a1473ffb8eef3e3bd9ec3d2be1483f38563fbf00000000c0132abf000080bf0153b9beca8f463fdc5f043f0153b9beca8f463fdc5f043fd310c73d6856483f2eb951bf000000006dce12bf000080bf5c2d9dbeb378443f3f14103f5c2d9dbeb378443f3f14103f00c3a23daa4a473fc4bd60bf000000001c2cf5be000080bf8ff880bed774413fdfc31a3f8ff880bed774413fdfc31a3f91ae803d87cf453fc54e6cbf000000004eecc4be000080bf7a494abee2a43d3fb35b243f7a494abee2a43d3fb35b243f4f97423d38fb433fefad74bf000000006c9296be000080bf1f2514be662e393ff9d52c3f1f2514be662e393ff9d52c3f889c093d4fe5413f43517abf00000000cc8e56be000080bf1c3cc0bd5a38343f5a38343f1c3cc0bd5a38343f5a38343f01d2ac3c1aa43f3f1dc17dbf00000000ee5507be000080bf54913abd3fe82e3f54913a3f54913abd3fe82e3f54913a3f51c3223c044b3d3f60807fbf0000000060807fbd000080bf000000000960293f60f53f3f000000000960293f60f53f3f00000080e5e93a3f000080bf0000000000000000000080bf00000000f304353ff304353f00000000f304353ff304353f000000800000403f000080bf0000000000000000000080bf54913abd54913a3f3fe82e3f54913abd54913a3f3fe82e3f31952d3c9d89423fd86e7fbf000000001e3b88bd000080bf12d0bfbd12d03f3f10d6273f12d0bfbd12d03f3f10d6273f4701b93c2a04453f546d7dbf00000000c2d010be000080bff27513be429d443fc6bf1f3ff27513be429d443fc6bf1f3f90d9133dd35c473fb47179bf00000000924166be000080bfabd248beabd2483f009e163fabd248beabd2483f009e163faebf513de77c493fe9dc72bf000000009ce8a1be000080bfc55c7fbe374a4c3f06730c3fc55c7fbe374a4c3f06730c3f160f8b3df44a4b3fc70d69bf00000000fbddd3be000080bfd0289bbe16e14e3fae4c013fd0289bbe16e14e3fae4c013f3c26b03d12ad4c3fa8845bbf00000000fdb503bf000080bfb96bb6be1d7b503f808aea3eb96bb6be1d7b503f808aea3e7177d73d4c8c4d3ffc124abf00000000362b1dbf000080bfeb05d1beeb05513feb05d13eeb05d1beeb05513feb05d13e0000003ea0d84d3ff30435bf00000000f30435bf000080bf808aeabe1d7b503fb96bb63e808aeabe1d7b503fb96bb63e4744143e4c8c4d3f362b1dbf00000000fc124abf000080bfae4c01bf16e14e3fd0289b3eae4c01bf16e14e3fd0289b3ee2ec273e12ad4c3ffdb503bf00000000a8845bbf000080bf06730cbf374a4c3fc55c7f3e06730cbf374a4c3fc55c7f3e74783a3ef44a4b3ffbddd3be00000000c70d69bf000080bf009e16bfabd2483fabd2483e009e16bfabd2483fabd2483e14904b3ee77c493f9ce8a1be00000000e9dc72bf000080bfc6bf1fbf429d443ff275133ec6bf1fbf429d443ff275133e9b095b3ed35c473f924166be00000000b47179bf000080bf10d627bf12d03f3f12d0bf3d10d627bf12d03f3f12d0bf3dd7df683e2a04453fc2d010be00000000546d7dbf000080bf3fe82ebf54913a3f54913a3d3fe82ebf54913a3f54913a3dac26753e9d89423f1e3b88bd00000000d86e7fbf000080bff30435bff304353f00000000f30435bff304353f000000000000803e0000403f0000008000000000000080bf000080bf3fe82ebf54913a3f54913abd3fe82ebf54913a3f54913abda96c853e9d89423f1e3b883d00000000d86e7fbf000080bf10d627bf12d03f3f12d0bfbd10d627bf12d03f3f12d0bfbd14908b3e2a04453fc2d0103e00000000546d7dbf000080bff9d52cbf662e393f1f2514bef9d52cbf662e393f1f2514be9133913e4fe5413fcc8e563e0000000043517abf000080bfb35b24bfe2a43d3f7a494abeb35b24bfe2a43d3f7a494abee952983e38fb433f6c92963e00000000efad74bf000080bfdfc31abfd774413f8ff880bedfc31abfd774413f8ff880bea42ba03e87cf453f4eecc43e00000000c54e6cbf000080bf3f1410bfb378443f5c2d9dbe3f1410bfb378443f5c2d9dbebfb0a83eaa4a473f1c2cf53e00000000c4bd60bf000080bfdc5f04bfca8f463f0153b9bedc5f04bfca8f463f0153b9be35c4b13e6856483f6dce123f000000002eb951bf000080bffb8eefbed1a1473fdff0d4befb8eefbed1a1473fdff0d4be4f36bb3e2be1483fc0132a3f0000000038563fbf000080bfdef0d4bed1a1473ffb8eefbedef0d4bed1a1473ffb8eefbeb1c9c43e2be1483f38563f3f00000000bf132abf000080bf0053b9beca8f463fdc5f04bf0053b9beca8f463fdc5f04bfcb3bce3e6856483f2fb9513f000000006dce12bf000080bf5b2d9dbeb378443f3f1410bf5b2d9dbeb378443f3f1410bf404fd73eaa4a473fc4bd603f000000001b2cf5be000080bf8ef880bed774413fdfc31abf8ef880bed774413fdfc31abf5cd4df3e87cf453fc54e6c3f000000004decc4be000080bf79494abee2a43d3fb35b24bf79494abee2a43d3fb35b24bf15ade73e38fb433fefad743f000000006b9296be000080bf1e2514be662e393ff9d52cbf1e2514be662e393ff9d52cbf6eccee3e4fe5413f43517a3f00000000cb8e56be000080bf1b3cc0bd5a38343f5a3834bf1b3cc0bd5a38343f5a3834bfdf32f53e1aa43f3f1dc17d3f00000000ed5507be000080bf53913abd3fe82e3f54913abf53913abd3fe82e3f54913abfe5e9fa3e044b3d3f60807f3f000000005f807fbd000080bf000000000960293f60f53fbf000000000960293f60f53fbf0000003fe5e93a3f0000803f0000000000000000000080bf5fcc393dd392223f256945bf5fcc393dd392223f256945bfd864023fce11383fe98e7f3f000000008186703d000080bf12d0bf3d10d6273f12d03fbf12d0bf3d10d6273f12d03fbf1211053f3d433a3fec057e3f00000000ec05fe3d000080bf1f25143ef9d52c3f662e39bf1f25143ef9d52c3f662e39bfe90a083f0b653c3f56077b3f00000000acd2483e000080bf40c84a3e386f313f386f31bf40c84a3e386f313f386f31bfc6560b3fdc663e3f6f26763f0000000040a88c3e000080bf72a1813e9f7b353f148528bf72a1813e9f7b353f148528bfc4f50e3f7d35403fbdef6e3f000000001bccb73e000080bf226d9e3ea7d4383f226d1ebf226d9e3ea7d4383f226d1ebf05e4123ffabb413f2ef9643f000000002ef9e43e000080bfb456bb3eb4563b3fd63113bfb456bb3eb4563b3fd63113bf3417173f94e5423f33fa573f00000000ac70093f000080bfcfe0d73eb5e43c3f82ec06bfcfe0d73eb5e43c3f82ec06bfce7d1b3f5fa0433f04e7473f0000000003ec1f3f000080bf568af33e986b3d3f568af3be568af33e986b3d3f568af3be0000203f17e0433ff404353f00000000f404353f000080bf82ec063fb5e43c3fcee0d7be82ec063fb5e43c3fcee0d7be3282243f5fa0433f03ec1f3f0000000006e7473f000080bfd631133fb4563b3fb456bbbed631133fb4563b3fb456bbbecde8283f94e5423fac70093f0000000033fa573f000080bf226d1e3fa7d4383f216d9ebe226d1e3fa7d4383f216d9ebefc1b2d3ffabb413f2cf9e43e000000002ef9643f000080bf1485283f9f7b353f72a181be1485283f9f7b353f72a181be3d0a313f7d35403f1bccb73e00000000bdef6e3f000080bf386f313f386f313f3fc84abe386f313f386f313f3fc84abe3ba9343fdc663e3f3fa88c3e000000006f26763f000080bf662e393ff9d52c3f202514be662e393ff9d52c3f202514be17f5373f0b653c3fadd2483e0000000056077b3f000080bf12d03f3f10d6273f11d0bfbd12d03f3f10d6273f11d0bfbdeeee3a3f3d433a3fea05fe3d00000000ec057e3f000080bf2569453fd392223f65cc39bd2569453fd392223f65cc39bd289b3d3fce11383f8886703d00000000e98e7f3f000080bffd124a3f362b1d3f00000000fd124a3f362b1d3f000000000000403fdcdd353f00000080000000000000803f000080bfe0524f3fdabb153faa49383de0524f3fdabb153faa49383ddf42423fd6e8323f873463bd00000000199b7f3f000080bf2f794a3f24d51a3f2c90be3d2f794a3f24d51a3f2c90be3d7dc5443fc1ed343f764aefbd000000001e3f7e3f000080bf429d443fc6bf1f3ff275133e429d443fc6bf1f3ff275133e408d473f94e9363f23b63cbe00000000839d7b3f000080bfe2a43d3fb35b243f7a494a3ee2a43d3fb35b243f7a494a3e2f9e4a3fc6ce383f5cec83be000000002b5b773f000080bf9f7b353f1485283f72a1813e9f7b353f1485283f72a1813edff94d3f218d3a3f4a34acbe000000000016713f000080bf38162c3f38162c3f6fd99e3e38162c3f38162c3f6fd99e3e2e9e513f73123c3fcb8ed6be000000000670683f000080bff275213f71ea2e3ff05ebc3ef275213f71ea2e3ff05ebc3e0484553ff94b3d3fb1fd00bf000000009d205d3f000080bf31ab153f96e1303f2fb3d93e31ab153f96e1303f2fb3d93e959e593f68283e3f6b9216bf0000000055094f3f000080bf77d6083f9be3313fd74ef63e77d6083f9be3313fd74ef63e8adb5d3f519a3e3f46412bbf0000000086483e3f000080bfd74ef63e9be3313f77d6083fd74ef63e9be3313f77d6083f7624623f519a3e3f86483ebf0000000046412b3f000080bf44baf73ed826253f9b63173f44baf73ed826253f9b63173f950f643f4323393f102246bf00000000df1b223f000080bf4951da3ef7bc233ff7bc233f4951da3ef7bc233ff7bc233fe90a683ff68c383f400155bf00000000d5000e3f000080bff15ebc3ef275213f71ea2e3ff15ebc3ef275213f71ea2e3f01e06b3faf9c373f8e6661bf0000000038bdf23e000080bf226d9e3e226d1e3fa7d4383f226d9e3e226d1e3fa7d4383fd3806f3ffe5f363f174d6bbf00000000cbafc93e000080bf8ff8803edfc31a3fd774413f8ff8803edfc31a3fd774413f05e4723fdae6343fe8dc72bf000000009be8a13e000080bfaad2483e009e163fabd2483faad2483e009e163fabd2483fc804763fb941333f435b78bf00000000415b783e000080bf2fb3d93e96e1303f31ab153f2fb3d93e96e1303f31ab153f6b61663f68283e3f55094fbf000000006b92163f000080bff15ebc3e71ea2e3ff275213ff15ebc3e71ea2e3ff275213ffc7b6a3ff94b3d3f9d205dbf00000000b2fd003f000080bf6fd99e3e38162c3f38162c3f6fd99e3e38162c3f38162c3fd3616e3f73123c3f067068bf00000000cb8ed63e000080bf72a1813e1485283f9f7b353f72a1813e1485283f9f7b353f2106723f218d3a3f001671bf000000004a34ac3e000080bf79494a3eb35b243fe3a43d3f79494a3eb35b243fe3a43d3fd261753fc6ce383f2d5b77bf000000005bec833e000080bff275133ec6bf1f3f429d443ff275133ec6bf1f3f429d443fc072783f94e9363f839d7bbf0000000023b63c3e000080bf2e90be3d24d51a3f2f794a3f2e90be3d24d51a3f2f794a3f833a7b3fc1ed343f1e3f7ebf00000000784aef3d000080bfa549383ddabb153fe0524f3fa549383ddabb153fe0524f3f21bd7d3fd6e8323f199b7fbf000000008134633d000080bfe616363d2b91083f2e3b583fe616363d2b91083f2e3b583f8adb7d3f2eda2d3f6ba57fbf00000000f147573d000080bf00000000ffb5033fa9845b3f00000000ffb5033fa9845b3f0000803f8f092c3f000080bf0000000000000000000080bf00000000208f103f5647533f00000000208f103f5647533f0000803f80e5303f000080bf0000000000000000000080bfb456bb3eb4563b3fd631133fb456bb3eb4563b3fd631133fcde8683f94e5423f33fa57bf00000000ac70093f000080bfcee0d73eb5e43c3f82ec063fcee0d73eb5e43c3f82ec063f3382643f5fa0433f06e747bf0000000003ec1f3f000080bf568af33e986b3d3f568af33e568af33e986b3d3f568af33e0000603f17e0433ff40435bf00000000f404353f000080bf82ec063fb5e43c3fcfe0d73e82ec063fb5e43c3fcfe0d73ece7d5b3f5fa0433f03ec1fbf0000000004e7473f000080bfd631133fb4563b3fb456bb3ed631133fb4563b3fb456bb3e3417573f94e5423fac7009bf0000000033fa573f000080bf226d1e3fa7d4383f226d9e3e226d1e3fa7d4383f226d9e3e05e4523ffabb413f2ef9e4be000000002ef9643f000080bf1485283f9f7b353f72a1813e1485283f9f7b353f72a1813ec3f54e3f7d35403f1bccb7be00000000bdef6e3f000080bf386f313f386f313f40c84a3e386f313f386f313f40c84a3ec5564b3fdc663e3f40a88cbe000000006f26763f000080bf662e393ff9d52c3f1f25143e662e393ff9d52c3f1f25143ee90a483f0b653c3facd248be0000000056077b3f000080bf12d03f3f10d6273f12d0bf3d12d03f3f10d6273f12d0bf3d1211453f3d433a3fec05febd00000000ec057e3f000080bf2569453fd392223f5fcc393d2569453fd392223f5fcc393dd864423fce11383f818670bd00000000e98e7f3f000080bf60f53f3f0960293f0000000060f53f3f0960293f000000000000403fe5e93a3f00000080000000000000803f000080bf54913a3f3fe82e3f53913abd54913a3f3fe82e3f53913abdf2743d3f044b3d3f5f807f3d0000000060807f3f000080bf5a38343f5a38343f1b3cc0bd5a38343f5a38343f1b3cc0bd70993a3f1aa43f3fed55073e000000001dc17d3f000080bff9d52c3f662e393f1e2514bef9d52c3f662e393f1e2514be3866373f4fe5413fcb8e563e0000000043517a3f000080bfb35b243fe2a43d3f79494abeb35b243fe2a43d3f79494abe8cd6333f38fb433f6b92963e00000000efad743f000080bfdfc31a3fd774413f8ef880bedfc31a3fd774413f8ef880be2eea2f3f87cf453f4decc43e00000000c54e6c3f000080bf3f14103fb378443f5b2d9dbe3f14103fb378443f5b2d9dbea0a72b3faa4a473f1b2cf53e00000000c4bd603f000080bfdc5f043fca8f463f0053b9bedc5f043fca8f463f0053b9bee61d273f6856483f6dce123f000000002fb9513f000080bffb8eef3ed1a1473fdef0d4befb8eef3ed1a1473fdef0d4bed864223f2be1483fbf132a3f0000000038563f3f000080bfdff0d43ed1a1473ffb8eefbedff0d43ed1a1473ffb8eefbe289b1d3f2be1483f38563f3f00000000c0132a3f000080bf0153b93eca8f463fdc5f04bf0153b93eca8f463fdc5f04bf1ae2183f6856483f2eb9513f000000006dce123f000080bf5c2d9d3eb378443f3f1410bf5c2d9d3eb378443f3f1410bf6058143faa4a473fc4bd603f000000001c2cf53e000080bf8ff8803ed774413fdfc31abf8ff8803ed774413fdfc31abfd215103f87cf453fc54e6c3f000000004eecc43e000080bf7a494a3ee2a43d3fb35b24bf7a494a3ee2a43d3fb35b24bf76290c3f38fb433fefad743f000000006c92963e000080bf1f25143e662e393ff9d52cbf1f25143e662e393ff9d52cbfc999083f4fe5413f43517a3f00000000cc8e563e000080bf1c3cc03d5a38343f5a3834bf1c3cc03d5a38343f5a3834bf9066053f1aa43f3f1dc17d3f00000000ee55073e000080bf54913a3d3fe82e3f54913abf54913a3d3fe82e3f54913abf0e8b023f044b3d3f60807f3f0000000060807f3d000080bf00000000f304353ff30435bf00000000f304353ff30435bf0000003f0000403f0000803f0000000000000000000080bf54913abd54913a3f3fe82ebf54913abd54913a3f3fe82ebf5793fa3e9d89423fd86e7f3f000000001e3b88bd000080bf12d0bfbd12d03f3f10d627bf12d0bfbd12d03f3f10d627bfeb6ff43e2a04453f546d7d3f00000000c2d010be000080bff27513be429d443fc6bf1fbff27513be429d443fc6bf1fbfcd84ed3ed35c473fb471793f00000000924166be000080bfabd248beabd2483f009e16bfabd248beabd2483f009e16bf0ac8e53ee77c493fe9dc723f000000009ce8a1be000080bfc55c7fbe374a4c3f06730cbfc55c7fbe374a4c3f06730cbf3a3cdd3ef44a4b3fc70d693f00000000fbddd3be000080bfd0289bbe16e14e3fae4c01bfd0289bbe16e14e3fae4c01bf70f6d33e12ad4c3fa8845b3f00000000fdb503bf000080bfb96bb6be1d7b503f808aeabeb96bb6be1d7b503f808aeabe2422ca3e4c8c4d3ffc124a3f00000000362b1dbf000080bfeb05d1beeb05513feb05d1beeb05d1beeb05513feb05d1be0000c03ea0d84d3ff304353f00000000f30435bf000080bf808aeabe1d7b503fb96bb6be808aeabe1d7b503fb96bb6bedcddb53e4c8c4d3f362b1d3f00000000fc124abf000080bfae4c01bf16e14e3fd0289bbeae4c01bf16e14e3fd0289bbe8f09ac3e12ad4c3ffdb5033f00000000a8845bbf000080bf06730cbf374a4c3fc55c7fbe06730cbf374a4c3fc55c7fbec5c3a23ef44a4b3ffbddd33e00000000c70d69bf000080bf009e16bfabd2483fabd248be009e16bfabd2483fabd248bef6379a3ee77c493f9ce8a13e00000000e9dc72bf000080bfc6bf1fbf429d443ff27513bec6bf1fbf429d443ff27513be327b923ed35c473f9241663e00000000b47179bf000080bf24d51abf2f794a3f2c90bebd24d51abf2f794a3f2c90bebd61708c3e36574a3fe0b41b3e00000000ed057dbf000080bfd39222bf2569453f5fcc39bdd39222bf2569453f5fcc39bd87cf853e76c2473ff9e9913d0000000074597fbf000080bf096029bf60f53f3f00000000096029bf60f53f3f000000000000803e1b16453f0000008000000000000080bf000080bfd39222bf2569453f5fcc393dd39222bf2569453f5fcc393df160743e76c2473ff9e991bd0000000074597fbf000080bf24d51abf2f794a3f2b90be3d24d51abf2f794a3f2b90be3d3c1f673e36574a3fe0b41bbe00000000ed057dbf000080bfc11e12bfe7004f3fc11e123ec11e12bfe7004f3fc11e123e1f13583e46be4c3f425b78be00000000425b78bf000080bf876f08bfe8da523fac73463e876f08bfe8da523fac73463ebf28473e82dd4e3ff2f8aebe000000004e9670bf000080bf5fa2fbbe9ee3553f5ea27b3e5fa2fbbe9ee3553f5ea27b3eec6f343e5598503f2df9e4be000000002ef964bf000080bff3b0e4be74fc573ff775983ef3b0e4be74fc573ff775983ea42b203ef0d2513fd5000ebf000000003f0155bf000080bf374accbedb0e593ff0c0b23e374accbedb0e593ff0c0b23e53d90a3ea776523fc29328bf00000000dea840bf000080bff0c0b2bedb0e593f374acc3ef0c0b2bedb0e593f374acc3e594dea3da776523fdea840bf00000000c29328bf000080bff77598be74fc573ff3b0e43ef77598be74fc573ff3b0e43eb6a8bf3df0d2513f3f0155bf00000000d5000ebf000080bf5fa27bbe9ee3553f5fa2fb3e5fa27bbe9ee3553f5fa2fb3e2920973d5598503f2ef964bf000000002ef9e4be000080bfad7346bee8da523f876f083fad7346bee8da523f876f083f045d633d82dd4e3f4c9670bf00000000f2f8aebe000080bfc11e12bee7004f3fc11e123fc11e12bee7004f3fc11e123f86b31f3d46be4c3f425b78bf00000000425b78be000080bf2c90bebd2f794a3f24d51a3f2c90bebd2f794a3f24d51a3f1606c73c36574a3fed057dbf00000000e0b41bbe000080bf5fcc39bd2569453fd392223f5fcc39bd2569453fd392223fe2f0393c76c2473f74597fbf00000000f9e991bd000080bf0000000060f53f3f0960293f0000000060f53f3f0960293f000000801b16453f000080bf0000000000000000000080bf00000000fd124a3f362b1d3f00000000fd124a3f362b1d3f0000008024224a3f000080bf0000000000000000000080bfaa4938bde0524f3fdabb153faa4938bde0524f3fdabb153fa230483cb0ea4c3ff63e7fbf000000000e139dbd000080bf9f88bcbdb319543f77660d3f9f88bcbdb319543f77660d3f0552d73c93914f3f50847cbf00000000365828be000080bf152d10bea043583f5329043f152d10bea043583f5329043fc2912d3d34fd513fc3fa76bf0000000053b786be000080bfe64443be83ad5b3f2016f43ee64443be83ad5b3f2016f43e340d783dbe0f543fa6b06dbf00000000eb26bebe000080bf89e876beae375e3fae37de3e89e876beae375e3fae37de3ed549a53d8fa9553fc5c85fbf0000000031a6f8be000080bf833095bec5c85f3f5aebc63e833095bec5c85f3f5aebc63eaebfd13d8aad563fcdcc4cbf00000000999919bf000080bf6577aebe5e50603f6577ae3e6577aebe5e50603f6577ae3e0000003ec206573ff30435bf00000000f30435bf000080bf5aebc6bec5c85f3f8330953e5aebc6bec5c85f3f8330953e2920173e8aad563f999919bf00000000cdcc4cbf000080bfae37debeae375e3f89e8763eae37debeae375e3f89e8763e155b2d3e8fa9553f31a6f8be00000000c5c85fbf000080bf2016f4be83ad5b3fe544433e2016f4be83ad5b3fe544433eb3fc413ebe0f543fea26bebe00000000a6b06dbf000080bf532904bfa043583f162d103e532904bfa043583f162d103e8f9b543e34fd513f54b786be00000000c3fa76bf000080bf77660dbfb319543f9f88bc3d77660dbfb319543f9f88bc3dbf15653e93914f3f365828be0000000050847cbf000080bfdabb15bfe0524f3faf49383ddabb15bfe0524f3faf49383df57c733eb0ea4c3f12139dbd00000000f63e7fbf000080bf362b1dbffd124a3f00000000362b1dbffd124a3f000000000000803e24224a3f0000008000000000000080bf000080bfdabb15bfe0524f3faa4938bddabb15bfe0524f3faa4938bd8541863eb0ea4c3f0e139d3d00000000f63e7fbf000080bf77660dbfb319543f9f88bcbd77660dbfb319543f9f88bcbd20758d3e93914f3f3658283e0000000050847cbf000080bfc11e12bfe7004f3fc11e12bec11e12bfe7004f3fc11e12be71f6933e46be4c3f425b783e00000000425b78bf000080bf876f08bfe8da523fad7346be876f08bfe8da523fad7346bea06b9c3e82dd4e3ff2f8ae3e000000004c9670bf000080bf5fa2fbbe9ee3553f5fa27bbe5fa2fbbe9ee3553f5fa27bbe09c8a53e5598503f2ef9e43e000000002ef964bf000080bff3b0e4be74fc573ff77598bef3b0e4be74fc573ff77598be2eeaaf3ef0d2513fd5000e3f000000003f0155bf000080bf374accbedb0e593ff0c0b2be374accbedb0e593ff0c0b2be5693ba3ea776523fc293283f00000000dea840bf000080bff0c0b2bedb0e593f374accbef0c0b2bedb0e593f374accbea96cc53ea776523fdea8403f00000000c29328bf000080bff77598be74fc573ff3b0e4bef77598be74fc573ff3b0e4bed215d03ef0d2513f3f01553f00000000d5000ebf000080bf5ea27bbe9ee3553f5fa2fbbe5ea27bbe9ee3553f5fa2fbbef637da3e5598503f2ef9643f000000002df9e4be000080bfac7346bee8da523f876f08bfac7346bee8da523f876f08bf5f94e33e82dd4e3f4e96703f00000000f2f8aebe000080bfc11e12bee7004f3fc11e12bfc11e12bee7004f3fc11e12bf8f09ec3e46be4c3f425b783f00000000425b78be000080bf2b90bebd2f794a3f24d51abf2b90bebd2f794a3f24d51abf9e8ff33e36574a3fed057d3f00000000e0b41bbe000080bf5fcc39bd2569453fd39222bf5fcc39bd2569453fd39222bf7830fa3e76c2473f74597f3f00000000f9e991bd000080bf0000000060f53f3f096029bf0000000060f53f3f096029bf0000003f1b16453f0000803f0000000000000000000080bf54913a3d54913a3f3fe82ebf54913a3d54913a3f3fe82ebf54b6023f9d89423fd86e7f3f000000001e3b883d000080bf12d0bf3d12d03f3f10d627bf12d0bf3d12d03f3f10d627bf0ac8053f2a04453f546d7d3f00000000c2d0103e000080bff275133e429d443fc6bf1fbff275133e429d443fc6bf1fbf9a3d093fd35c473fb471793f000000009241663e000080bfabd2483eabd2483f009e16bfabd2483eabd2483f009e16bffb1b0d3fe77c493fe9dc723f000000009ce8a13e000080bfc55c7f3e374a4c3f06730cbfc55c7f3e374a4c3f06730cbfe361113ff44a4b3fc70d693f00000000fbddd33e000080bfd0289b3e16e14e3fae4c01bfd0289b3e16e14e3fae4c01bfc804163f12ad4c3fa8845b3f00000000fdb5033f000080bfb96bb63e1d7b503f808aeabeb96bb63e1d7b503f808aeabeeeee1a3f4c8c4d3ffc124a3f00000000362b1d3f000080bfeb05d13eeb05513feb05d1beeb05d13eeb05513feb05d1be0000203fa0d84d3ff304353f00000000f304353f000080bf808aea3e1d7b503fb96bb6be808aea3e1d7b503fb96bb6be1211253f4c8c4d3f362b1d3f00000000fc124a3f000080bfae4c013f16e14e3fd0289bbeae4c013f16e14e3fd0289bbe38fb293f12ad4c3ffdb5033f00000000a8845b3f000080bf06730c3f374a4c3fc55c7fbe06730c3f374a4c3fc55c7fbe1e9e2e3ff44a4b3ffbddd33e00000000c70d693f000080bf009e163fabd2483fabd248be009e163fabd2483fabd248be05e4323fe77c493f9ce8a13e00000000e9dc723f000080bfc6bf1f3f429d443ff27513bec6bf1f3f429d443ff27513be67c2363fd35c473f9241663e00000000b471793f000080bf10d6273f12d03f3f12d0bfbd10d6273f12d03f3f12d0bfbdf6373a3f2a04453fc2d0103e00000000546d7d3f000080bf3fe82e3f54913a3f54913abd3fe82e3f54913a3f54913abdac493d3f9d89423f1e3b883d00000000d86e7f3f000080bff304353ff304353f00000000f304353ff304353f000000000000403f0000403f00000080000000000000803f000080bf54913a3f3fe82e3f54913a3d54913a3f3fe82e3f54913a3d0d8b423f044b3d3f60807fbd0000000060807f3f000080bf5a38343f5a38343f1c3cc03d5a38343f5a38343f1c3cc03d9066453f1aa43f3fee5507be000000001dc17d3f000080bff9d52c3f662e393f1f25143ef9d52c3f662e393f1f25143ec999483f4fe5413fcc8e56be0000000043517a3f000080bfb35b243fe2a43d3f7a494a3eb35b243fe2a43d3f7a494a3e75294c3f38fb433f6c9296be00000000efad743f000080bfdfc31a3fd774413f8ff8803edfc31a3fd774413f8ff8803ed215503f87cf453f4eecc4be00000000c54e6c3f000080bf3f14103fb378443f5c2d9d3e3f14103fb378443f5c2d9d3e6058543faa4a473f1c2cf5be00000000c4bd603f000080bfdc5f043fca8f463f0153b93edc5f043fca8f463f0153b93e1ae2583f6856483f6dce12bf000000002eb9513f000080bffb8eef3ed1a1473fdff0d43efb8eef3ed1a1473fdff0d43e289b5d3f2be1483fc0132abf0000000038563f3f000080bfdef0d43ed1a1473ffb8eef3edef0d43ed1a1473ffb8eef3ed964623f2be1483f38563fbf00000000bf132a3f000080bf0053b93eca8f463fdc5f043f0053b93eca8f463fdc5f043fe61d673f6856483f2fb951bf000000006dce123f000080bf5b2d9d3eb378443f3f14103f5b2d9d3eb378443f3f14103fa0a76b3faa4a473fc4bd60bf000000001b2cf53e000080bf216d9e3ea7d4383f226d1e3f216d9e3ea7d4383f226d1e3ffb1b6d3ffabb413f2ef964bf000000002cf9e43e000080bf72a1813e9f7b353f1485283f72a1813e9f7b353f1485283f3d0a713f7d35403fbdef6ebf000000001bccb73e000080bf3fc84a3e386f313f386f313f3fc84a3e386f313f386f313f3ba9743fdc663e3f6f2676bf000000003fa88c3e000080bf2025143ef9d52c3f662e393f2025143ef9d52c3f662e393f17f5773f0b653c3f56077bbf00000000add2483e000080bf11d0bf3d10d6273f12d03f3f11d0bf3d10d6273f12d03f3feeee7a3f3d433a3fec057ebf00000000ea05fe3d000080bf65cc393dd392223f2569453f65cc393dd392223f2569453f279b7d3fce11383fe98e7fbf000000008886703d000080bf00000000362b1d3ffd124a3f00000000362b1d3ffd124a3f0000803fdcdd353f000080bf0000000000000000000080bf8ef8803ed774413fdfc31a3f8ef8803ed774413fdfc31a3f2eea6f3f87cf453fc54e6cbf000000004decc43e000080bf79494a3ee2a43d3fb35b243f79494a3ee2a43d3fb35b243f8bd6733f38fb433fefad74bf000000006b92963e000080bf1e25143e662e393ff9d52c3f1e25143e662e393ff9d52c3f3866773f4fe5413f43517abf00000000cb8e563e000080bf1b3cc03d5a38343f5a38343f1b3cc03d5a38343f5a38343f70997a3f1aa43f3f1dc17dbf00000000ed55073e000080bf53913a3d3fe82e3f54913a3f53913a3d3fe82e3f54913a3ff3747d3f044b3d3f60807fbf000000005f807f3d000080bf000000000960293f60f53f3f000000000960293f60f53f3f0000803fe5e93a3f000080bf0000000000000000000080bfabd2483eabd2483f009e163fabd2483eabd2483f009e163f05e4723fe77c493fe9dc72bf000000009ce8a13e000080bfc55c7f3e374a4c3f06730c3fc55c7f3e374a4c3f06730c3f1d9e6e3ff44a4b3fc70d69bf00000000fbddd33e000080bfd0289b3e16e14e3fae4c013fd0289b3e16e14e3fae4c013f38fb693f12ad4c3fa8845bbf00000000fdb5033f000080bfb96bb63e1d7b503f808aea3eb96bb63e1d7b503f808aea3e1211653f4c8c4d3ffc124abf00000000362b1d3f000080bfeb05d13eeb05513feb05d13eeb05d13eeb05513feb05d13e0000603fa0d84d3ff30435bf00000000f304353f000080bf808aea3e1d7b503fb96bb63e808aea3e1d7b503fb96bb63eeeee5a3f4c8c4d3f362b1dbf00000000fc124a3f000080bfae4c013f16e14e3fd0289b3eae4c013f16e14e3fd0289b3ec804563f12ad4c3ffdb503bf00000000a8845b3f000080bf06730c3f374a4c3fc55c7f3e06730c3f374a4c3fc55c7f3ee361513ff44a4b3ffbddd3be00000000c70d693f000080bf009e163fabd2483fabd2483e009e163fabd2483fabd2483efb1b4d3fe77c493f9ce8a1be00000000e9dc723f000080bfc6bf1f3f429d443ff275133ec6bf1f3f429d443ff275133e993d493fd35c473f924166be00000000b471793f000080bf10d6273f12d03f3f12d0bf3d10d6273f12d03f3f12d0bf3d0ac8453f2a04453fc2d010be00000000546d7d3f000080bf3fe82e3f54913a3f54913a3d3fe82e3f54913a3f54913a3d55b6423f9d89423f1e3b88bd00000000d86e7f3f000080bf0960293f60f53f3f000000000960293f60f53f3f000000000000403f1b16453f00000080000000000000803f000080bfd392223f2569453f5fcc39bdd392223f2569453f5fcc39bd3c183d3f76c2473ff9e9913d0000000074597f3f000080bf24d51a3f2f794a3f2b90bebd24d51a3f2f794a3f2b90bebdd0c7393f36574a3fe0b41b3e00000000ed057d3f000080bfc11e123fe7004f3fc11e12bec11e123fe7004f3fc11e12bec804363f46be4c3f425b783e00000000425b783f000080bf876f083fe8da523fac7346be876f083fe8da523fac7346be30ca313f82dd4e3ff2f8ae3e000000004e96703f000080bf5fa2fb3e9ee3553f5ea27bbe5fa2fb3e9ee3553f5ea27bbefc1b2d3f5598503f2df9e43e000000002ef9643f000080bff3b0e43e74fc573ff77598bef3b0e43e74fc573ff77598bee90a283ff0d2513fd5000e3f000000003f01553f000080bf374acc3edb0e593ff0c0b2be374acc3edb0e593ff0c0b2be55b6223fa776523fc293283f00000000dea8403f000080bff0c0b23edb0e593f374accbef0c0b23edb0e593f374accbeac491d3fa776523fdea8403f00000000c293283f000080bff775983e74fc573ff3b0e4bef775983e74fc573ff3b0e4be17f5173ff0d2513f3f01553f00000000d5000e3f000080bf5fa27b3e9ee3553f5fa2fbbe5fa27b3e9ee3553f5fa2fbbe05e4123f5598503f2ef9643f000000002ef9e43e000080bfad73463ee8da523f876f08bfad73463ee8da523f876f08bfd0350e3f82dd4e3f4c96703f00000000f2f8ae3e000080bfc11e123ee7004f3fc11e12bfc11e123ee7004f3fc11e12bf38fb093f46be4c3f425b783f00000000425b783e000080bf2c90be3d2f794a3f24d51abf2c90be3d2f794a3f24d51abf3138063f36574a3fed057d3f00000000e0b41b3e000080bf5fcc393d2569453fd39222bf5fcc393d2569453fd39222bfc4e7023f76c2473f74597f3f00000000f9e9913d000080bf00000000fd124a3f362b1dbf00000000fd124a3f362b1dbf0000003f24224a3f0000803f0000000000000000000080bfaf4938bde0524f3fdabb15bfaf4938bde0524f3fdabb15bf7bbef93eb0ea4c3ff63e7f3f0000000012139dbd000080bf9f88bcbdb319543f77660dbf9f88bcbdb319543f77660dbfdf8af23e93914f3f50847c3f00000000365828be000080bf162d10bea043583f532904bf162d10bea043583f532904bfc74dea3e34fd513fc3fa763f0000000054b786be000080bfe54443be83ad5b3f2016f4bee54443be83ad5b3f2016f4be59fee03ebe0f543fa6b06d3f00000000ea26bebe000080bf89e876beae375e3fae37debe89e876beae375e3fae37debe8aadd63e8fa9553fc5c85f3f0000000031a6f8be000080bf833095bec5c85f3f5aebc6be833095bec5c85f3f5aebc6be1490cb3e8aad563fcdcc4c3f00000000999919bf000080bf6577aebe5e50603f6577aebe6577aebe5e50603f6577aebe0000c03ec206573ff304353f00000000f30435bf000080bf5aebc6bec5c85f3f833095be5aebc6bec5c85f3f833095beea6fb43e8aad563f9999193f00000000cdcc4cbf000080bfae37debeae375e3f89e876beae37debeae375e3f89e876be7652a93e8fa9553f31a6f83e00000000c5c85fbf000080bf2016f4be83ad5b3fe64443be2016f4be83ad5b3fe64443bea6019f3ebe0f543feb26be3e00000000a6b06dbf000080bf532904bfa043583f152d10be532904bfa043583f152d10be38b2953e34fd513f53b7863e00000000c3fa76bf000080bf0379ffbeb1a25c3f5fccb9bd0379ffbeb1a25c3f5fccb9bde1a78e3eada8543fbe2d373e00000000e5de7bbf000080bf2b9108bf2e3b583fe41636bd2b9108bf2e3b583fe41636bd63c6863e2ef8513fbf13aa3d000000009f1d7fbf000080bf208f10bf5647533f00000000208f10bf5647533f000000000000803e7f1a4f3f0000008000000000000080bf000080bf2b9108bf2e3b583fe316363d2b9108bf2e3b583fe316363d3873723e2ef8513fbe13aabd000000009f1d7fbf000080bf0379ffbeb1a25c3f5fccb93d0379ffbeb1a25c3f5fccb93d3db0623eada8543fbe2d37be00000000e5de7bbf000080bf012becbe0e5c603f66b30d3e012becbe0e5c603f66b30d3efb7f503e7b0e573f421f93be000000001b3475bf000080bf5551d7bea147633fbd643f3e5551d7bea147633fbd643f3e0cd73b3ecc07593f62f1cfbe000000008eef69bf000080bf5916c1be894a653fed5b713e5916c1be894a653fed5b713e64f6243e07725a3f02ae07bf000000006c1659bf000080bf14b5a9be2c51663fa276913e14b5a9be2c51663fa276913e0a830c3ec02f5b3f439a26bf00000000a55e42bf000080bfa37691be2c51663f13b5a93ea37691be2c51663f13b5a93eebf9e63dc02f5b3fa45e42bf00000000449a26bf000080bfef5b71be894a653f5916c13eef5b71be894a653f5916c13e3713b63d07725a3f6b1659bf0000000003ae07bf000080bfbd643fbea147633f5551d73ebd643fbea147633f5551d73ee751883dcc07593f8eef69bf0000000062f1cfbe000080bf67b30dbe0e5c603f012bec3e67b30dbe0e5c603f012bec3e12003e3d7b0e573f1b3475bf00000000431f93be000080bf5fccb9bdb1a25c3f0379ff3e5fccb9bdb1a25c3f0379ff3e147eea3cada8543fe5de7bbf00000000be2d37be000080bfe41636bd2e3b583f2b91083fe41636bd2e3b583f2b91083f72cc583c2ef8513f9f1d7fbf00000000bf13aabd000080bf000000005647533f208f103f000000005647533f208f103f000000807f1a4f3f000080bf0000000000000000000080bf00000000a9845b3fffb5033f00000000a9845b3fffb5033f0000008071f6533f000080bf0000000000000000000080bfed4633bda818603f8681f63eed4633bda818603f8681f63e7b676c3c05e2563fdbf27ebf00000000ce6ab9bd000080bf4a73b6bd1c10643f1c10e43e4a73b6bd1c10643f1c10e43e91ae003d5d93593f55077bbf00000000abd248be000080bf60c70abe4b4c673f102bd03e60c70abe4b4c673f102bd03eaebf513d8ae85b3fe9dc72bf000000009be8a1be000080bfbaf43abee8b1693fbaf4ba3ebaf43abee8b1693fbaf4ba3e2920973d55bb5d3f2ef964bf000000002ef9e4be000080bf5d2b6bbe5d2b6b3f5a9ea43e5d2b6bbe5d2b6b3f5a9ea43e7f2bca3d70e65e3fd75050bf0000000008cc14bf000080bf77668dbec7aa6b3f77668d3e77668dbec7aa6b3f77668d3e0000003eae4d5f3ff30435bf00000000f30435bf000080bf5a9ea4be5d2b6b3f5d2b6b3e5a9ea4be5d2b6b3f5d2b6b3e40ea1a3e70e65e3f08cc14bf00000000d75050bf000080bfbaf4babee8b1693fb9f43a3ebaf4babee8b1693fb9f43a3eec6f343e55bb5d3f2df9e4be000000002ef964bf000080bf102bd0be4b4c673f60c70a3e102bd0be4b4c673f60c70a3e14904b3e8ae85b3f9be8a1be00000000e9dc72bf000080bf1c10e4be1c10643f4b73b63d1c10e4be1c10643f4b73b63d5bd45f3e5d93593facd248be0000000055077bbf000080bf8681f6bea818603fea46333d8681f6bea818603fea46333d8939713e05e2563fcb6ab9bd00000000dbf27ebf000080bfffb503bfa9845b3f00000000ffb503bfa9845b3f000000000000803e71f6533f0000008000000000000080bf000080bf8681f6bea818603fed4633bd8681f6bea818603fed4633bd3c63873e05e2563fce6ab93d00000000dbf27ebf000080bf1c10e4be1c10643f4a73b6bd1c10e4be1c10643f4a73b6bdd215903e5d93593fabd2483e0000000055077bbf000080bf012becbe0e5c603f67b30dbe012becbe0e5c603f67b30dbe02c0973e7b0e573f431f933e000000001b3475bf000080bf5551d7bea147633fbd643fbe5551d7bea147633fbd643fbe7a14a23ecc07593f62f1cf3e000000008eef69bf000080bf5916c1be894a653fef5b71be5916c1be894a653fef5b71bece84ad3e07725a3f03ae073f000000006b1659bf000080bf13b5a9be2c51663fa37691be13b5a9be2c51663fa37691be7abeb93ec02f5b3f449a263f00000000a45e42bf000080bfa27691be2c51663f14b5a9bea27691be2c51663f14b5a9be8541c63ec02f5b3fa55e423f00000000439a26bf000080bfed5b71be894a653f5916c1beed5b71be894a653f5916c1be337bd23e07725a3f6c16593f0000000002ae07bf000080bfbd643fbea147633f5551d7bebd643fbea147633f5551d7be86ebdd3ecc07593f8eef693f0000000062f1cfbe000080bf66b30dbe0e5c603f012becbe66b30dbe0e5c603f012becbefd3fe83e7b0e573f1b34753f00000000421f93be000080bf5fccb9bdb1a25c3f0379ffbe5fccb9bdb1a25c3f0379ffbe1e58f13eada8543fe5de7b3f00000000be2d37be000080bfe31636bd2e3b583f2b9108bfe31636bd2e3b583f2b9108bf9c39f93e2ef8513f9f1d7f3f00000000be13aabd000080bf000000005647533f208f10bf000000005647533f208f10bf0000003f7f1a4f3f0000803f0000000000000000000080bfaa49383de0524f3fdabb15bfaa49383de0524f3fdabb15bfc220033fb0ea4c3ff63e7f3f000000000e139d3d000080bf9f88bc3db319543f77660dbf9f88bc3db319543f77660dbf90ba063f93914f3f50847c3f000000003658283e000080bf152d103ea043583f532904bf152d103ea043583f532904bf1cd90a3f34fd513fc3fa763f0000000053b7863e000080bfe644433e83ad5b3f2016f4bee644433e83ad5b3f2016f4bed4800f3fbe0f543fa6b06d3f00000000eb26be3e000080bf89e8763eae375e3fae37debe89e8763eae375e3fae37debe3ba9143f8fa9553fc5c85f3f0000000031a6f83e000080bf8330953ec5c85f3f5aebc6be8330953ec5c85f3f5aebc6bef6371a3f8aad563fcdcc4c3f000000009999193f000080bf6577ae3e5e50603f6577aebe6577ae3e5e50603f6577aebe0000203fc206573ff304353f00000000f304353f000080bf5aebc63ec5c85f3f833095be5aebc63ec5c85f3f833095be0bc8253f8aad563f9999193f00000000cdcc4c3f000080bfae37de3eae375e3f89e876beae37de3eae375e3f89e876bec5562b3f8fa9553f31a6f83e00000000c5c85f3f000080bf2016f43e83ad5b3fe54443be2016f43e83ad5b3fe54443be2d7f303fbe0f543fea26be3e00000000a6b06d3f000080bf5329043fa043583f162d10be5329043fa043583f162d10bee426353f34fd513f54b7863e00000000c3fa763f000080bf77660d3fb319543f9f88bcbd77660d3fb319543f9f88bcbd7045393f93914f3f3658283e0000000050847c3f000080bfdabb153fe0524f3faf4938bddabb153fe0524f3faf4938bd3edf3c3fb0ea4c3f12139d3d00000000f63e7f3f000080bf362b1d3ffd124a3f00000000362b1d3ffd124a3f000000000000403f24224a3f00000080000000000000803f000080bfd392223f2569453f5fcc393dd392223f2569453f5fcc393dc4e7423f76c2473ff9e991bd0000000074597f3f000080bf24d51a3f2f794a3f2c90be3d24d51a3f2f794a3f2c90be3d3138463f36574a3fe0b41bbe00000000ed057d3f000080bfc11e123fe7004f3fc11e123ec11e123fe7004f3fc11e123e38fb493f46be4c3f425b78be00000000425b783f000080bf876f083fe8da523fad73463e876f083fe8da523fad73463ed0354e3f82dd4e3ff2f8aebe000000004c96703f000080bf5fa2fb3e9ee3553f5fa27b3e5fa2fb3e9ee3553f5fa27b3e05e4523f5598503f2ef9e4be000000002ef9643f000080bff3b0e43e74fc573ff775983ef3b0e43e74fc573ff775983e17f5573ff0d2513fd5000ebf000000003f01553f000080bf374acc3edb0e593ff0c0b23e374acc3edb0e593ff0c0b23eab495d3fa776523fc29328bf00000000dea8403f000080bff0c0b23edb0e593f374acc3ef0c0b23edb0e593f374acc3e55b6623fa776523fdea840bf00000000c293283f000080bff775983e74fc573ff3b0e43ef775983e74fc573ff3b0e43ee90a683ff0d2513f3f0155bf00000000d5000e3f000080bf5ea27b3e9ee3553f5fa2fb3e5ea27b3e9ee3553f5fa2fb3efb1b6d3f5598503f2ef964bf000000002df9e43e000080bfac73463ee8da523f876f083fac73463ee8da523f876f083f30ca713f82dd4e3f4e9670bf00000000f2f8ae3e000080bfc11e123ee7004f3fc11e123fc11e123ee7004f3fc11e123fc804763f46be4c3f425b78bf00000000425b783e000080bff275133e429d443fc6bf1f3ff275133e429d443fc6bf1f3f67c2763fd35c473fb47179bf000000009241663e000080bf12d0bf3d12d03f3f10d6273f12d0bf3d12d03f3f10d6273ff6377a3f2a04453f546d7dbf00000000c2d0103e000080bf54913a3d54913a3f3fe82e3f54913a3d54913a3f3fe82e3fab497d3f9d89423fd86e7fbf000000001e3b883d000080bf00000000f304353ff304353f00000000f304353ff304353f0000803f0000403f000080bf0000000000000000000080bf2b90be3d2f794a3f24d51a3f2b90be3d2f794a3f24d51a3fcfc7793f36574a3fed057dbf00000000e0b41b3e000080bf5fcc393d2569453fd392223f5fcc393d2569453fd392223f3c187d3f76c2473f74597fbf00000000f9e9913d000080bf0000000060f53f3f0960293f0000000060f53f3f0960293f0000803f1b16453f000080bf0000000000000000000080bf162d103ea043583f5329043f162d103ea043583f5329043fe426753f34fd513fc3fa76bf0000000054b7863e000080bfe544433e83ad5b3f2016f43ee544433e83ad5b3f2016f43e2d7f703fbe0f543fa6b06dbf00000000ea26be3e000080bf89e8763eae375e3fae37de3e89e8763eae375e3fae37de3ec5566b3f8fa9553fc5c85fbf0000000031a6f83e000080bf8330953ec5c85f3f5aebc63e8330953ec5c85f3f5aebc63e0ac8653f8aad563fcdcc4cbf000000009999193f000080bf6577ae3e5e50603f6577ae3e6577ae3e5e50603f6577ae3e0000603fc206573ff30435bf00000000f304353f000080bf5aebc63ec5c85f3f8330953e5aebc63ec5c85f3f8330953ef6375a3f8aad563f999919bf00000000cdcc4c3f000080bfae37de3eae375e3f89e8763eae37de3eae375e3f89e8763e3ba9543f8fa9553f31a6f8be00000000c5c85f3f000080bf2016f43e83ad5b3fe644433e2016f43e83ad5b3fe644433ed3804f3fbe0f543feb26bebe00000000a6b06d3f000080bf5329043fa043583f152d103e5329043fa043583f152d103e1cd94a3f34fd513f53b786be00000000c3fa763f000080bf77660d3fb319543f9f88bc3d77660d3fb319543f9f88bc3d90ba463f93914f3f365828be0000000050847c3f000080bfdabb153fe0524f3faa49383ddabb153fe0524f3faa49383dc320433fb0ea4c3f0e139dbd00000000f63e7f3f000080bf208f103f5647533f00000000208f103f5647533f000000000000403f7f1a4f3f00000080000000000000803f000080bf2b91083f2e3b583fe31636bd2b91083f2e3b583fe31636bdce9c3c3f2ef8513fbe13aa3d000000009f1d7f3f000080bf0379ff3eb1a25c3f5fccb9bd0379ff3eb1a25c3f5fccb9bd10ac383fada8543fbe2d373e00000000e5de7b3f000080bf012bec3e0e5c603f66b30dbe012bec3e0e5c603f66b30dbeff1f343f7b0e573f421f933e000000001b34753f000080bf5551d73ea147633fbd643fbe5551d73ea147633fbd643fbec3f52e3fcc07593f62f1cf3e000000008eef693f000080bf5916c13e894a653fed5b71be5916c13e894a653fed5b71be9a3d293f07725a3f02ae073f000000006c16593f000080bf14b5a93e2c51663fa27691be14b5a93e2c51663fa27691bec320233fc02f5b3f439a263f00000000a55e423f000080bfa376913e2c51663f13b5a9bea376913e2c51663f13b5a9be3edf1c3fc02f5b3fa45e423f00000000449a263f000080bfef5b713e894a653f5916c1beef5b713e894a653f5916c1be68c2163f07725a3f6b16593f0000000003ae073f000080bfbd643f3ea147633f5551d7bebd643f3ea147633f5551d7be3d0a113fcc07593f8eef693f0000000062f1cf3e000080bf67b30d3e0e5c603f012becbe67b30d3e0e5c603f012becbe02e00b3f7b0e573f1b34753f00000000431f933e000080bf5fccb93db1a25c3f0379ffbe5fccb93db1a25c3f0379ffbef153073fada8543fe5de7b3f00000000be2d373e000080bfe416363d2e3b583f2b9108bfe416363d2e3b583f2b9108bf3263033f2ef8513f9f1d7f3f00000000bf13aa3d000080bf00000000a9845b3fffb503bf00000000a9845b3fffb503bf0000003f71f6533f0000803f0000000000000000000080bfea4633bda818603f8681f6beea4633bda818603f8681f6bec49cf83e05e2563fdbf27e3f00000000cb6ab9bd000080bf4b73b6bd1c10643f1c10e4be4b73b6bd1c10643f1c10e4be2eeaef3e5d93593f55077b3f00000000acd248be000080bf60c70abe4b4c673f102bd0be60c70abe4b4c673f102bd0be0ac8e53e8ae85b3fe9dc723f000000009be8a1be000080bfb9f43abee8b1693fbaf4babeb9f43abee8b1693fbaf4babef637da3e55bb5d3f2ef9643f000000002df9e4be000080bf5d2b6bbe5d2b6b3f5a9ea4be5d2b6bbe5d2b6b3f5a9ea4be2075cd3e70e65e3fd750503f0000000008cc14bf000080bf77668dbec7aa6b3f77668dbe77668dbec7aa6b3f77668dbe0000c03eae4d5f3ff304353f00000000f30435bf000080bf5a9ea4be5d2b6b3f5d2b6bbe5a9ea4be5d2b6b3f5d2b6bbedf8ab23e70e65e3f08cc143f00000000d75050bf000080bfbaf4babee8b1693fbaf43abebaf4babee8b1693fbaf43abe09c8a53e55bb5d3f2ef9e43e000000002ef964bf000080bf102bd0be4b4c673f60c70abe102bd0be4b4c673f60c70abef6379a3e8ae85b3f9be8a13e00000000e9dc72bf000080bf19ebc8be9d676a3f1698b2bd19ebc8be9d676a3f1698b2bd99d1913e1a4a5e3f04235e3e0000000065e779bf000080bf3fecdbbe42eb663f32f02fbd3fecdbbe42eb663f32f02fbd2a1f883ebba05b3f9bc8cb3d00000000c2ba7ebf000080bf5392edbedbc5623f000000005392edbedbc5623f000000000000803e68ae583f0000008000000000000080bf000080bf3fecdbbe42eb663f2ff02f3d3fecdbbe42eb663f2ff02f3dadc16f3ebba05b3f97c8cbbd00000000c2ba7ebf000080bf19ebc8be9d676a3f1698b23d19ebc8be9d676a3f1698b23dcd5c5c3e1a4a5e3f04235ebe0000000065e779bf000080bfb4aab4be0d206d3f0780073eb4aab4be0d206d3f0780073e8b87453e5383603f73c6b3be0000000045b36fbf000080bf07549fbe0bfe6e3fe416363e07549fbe0bfe6e3fe416363e6f642b3e2b21623fed05febe000000002f455ebf000080bf2d1c89be4ff16f3f4b84643e2d1c89be4ff16f3f4b84643e77c60e3e37fc623f1fe323bf0000000026aa44bf000080bf4b8464be4ff16f3f2d1c893e4b8464be4ff16f3f2d1c893e1073e23d37fc623f26aa44bf000000001fe323bf000080bfe41636be0bfe6e3f07549f3ee41636be0bfe6e3f07549f3e2037a93d2b21623f2f455ebf00000000ed05febe000080bf078007be0d206d3fb4aab43e078007be0d206d3fb4aab43ed2e1693d5383603f45b36fbf0000000073c6b3be000080bf1698b2bd9d676a3f19ebc83e1698b2bd9d676a3f19ebc83ecc8c0e3d1a4a5e3f65e779bf0000000004235ebe000080bf32f02fbd42eb663f3fecdb3e32f02fbd42eb663f3fecdb3e9df2813cbba05b3fc2ba7ebf000000009bc8cbbd000080bf00000000dbc5623f5392ed3e00000000dbc5623f5392ed3e0000008068ae583f000080bf0000000000000000000080bf00000000c70d693ffbddd33e00000000c70d693ffbddd33e000000803a3c5d3f000080bf0000000000000000000080bff02a2cbd0abb6c3f4eb0c13ef02a2cbd0abb6c3f4eb0c13e4b46903c6e2e603f2a6f7ebf00000000ed29e2bd000080bf5c56aebdbeb66f3f5c56ae3e5c56aebdbeb66f3f5c56ae3e86b31f3decc6623f425b78bf00000000425b78be000080bf26f403be45ea713f2cf2993e26f403be45ea713f2cf2993e65f9833df1d7643f174d6bbf00000000cbafc9be000080bf96eb30beee43733fb0b0843e96eb30beee43733fb0b0843eb8a8bf3d8630663f400155bf00000000d6000ebf000080bf67905dbe71b8733f67905d3e67905dbe71b8733f67905d3e0000003ea6a8663ff40435bf00000000f40435bf000080bfb0b084beee43733f95eb303eb0b084beee43733f95eb303ea42b203e8630663fd5000ebf00000000400155bf000080bf2cf299be45ea713f26f4033e2cf299be45ea713f26f4033e4d033e3ef1d7643fcbafc9be00000000174d6bbf000080bf5c56aebebeb66f3f5b56ae3d5c56aebebeb66f3f5b56ae3d1f13583eecc6623f415b78be00000000425b78bf000080bf4eb0c1be0abb6c3ff32a2c3d4eb0c1be0abb6c3ff32a2c3d35f76d3e6e2e603ff129e2bd000000002a6f7ebf000080bffbddd3bec70d693f00000000fbddd3bec70d693f000000000000803e3a3c5d3f0000008000000000000080bf000080bf4eb0c1be0abb6c3ff02a2cbd4eb0c1be0abb6c3ff02a2cbd6504893e6e2e603fed29e23d000000002a6f7ebf000080bf5c56aebebeb66f3f5c56aebd5c56aebebeb66f3f5c56aebd71f6933eecc6623f425b783e00000000425b78bf000080bfb4aab4be0d206d3f078007beb4aab4be0d206d3f078007be3a3c9d3e5383603f73c6b33e0000000045b36fbf000080bf07549fbe0bfe6e3fe41636be07549fbe0bfe6e3fe41636bec84daa3e2b21623fed05fe3e000000002f455ebf000080bf2d1c89be4ff16f3f4b8464be2d1c89be4ff16f3f4b8464bec49cb83e37fc623f1fe3233f0000000026aa44bf000080bf4b8464be4ff16f3f2d1c89be4b8464be4ff16f3f2d1c89be3b63c73e37fc623f26aa443f000000001fe323bf000080bfe41636be0bfe6e3f07549fbee41636be0bfe6e3f07549fbe38b2d53e2b21623f2f455e3f00000000ed05febe000080bf078007be0d206d3fb4aab4be078007be0d206d3fb4aab4bec5c3e23e5383603f45b36f3f0000000073c6b3be000080bf1698b2bd9d676a3f19ebc8be1698b2bd9d676a3f19ebc8be672eee3e1a4a5e3f65e7793f0000000004235ebe000080bf2ff02fbd42eb663f3fecdbbe2ff02fbd42eb663f3fecdbbed6e0f73ebba05b3fc2ba7e3f0000000097c8cbbd000080bf00000000dbc5623f5392edbe00000000dbc5623f5392edbe0000003f68ae583f0000803f0000000000000000000080bfed46333da818603f8681f6beed46333da818603f8681f6be9eb1033f05e2563fdbf27e3f00000000ce6ab93d000080bf4a73b63d1c10643f1c10e4be4a73b63d1c10643f1c10e4bee90a083f5d93593f55077b3f00000000abd2483e000080bf60c70a3e4b4c673f102bd0be60c70a3e4b4c673f102bd0befb1b0d3f8ae85b3fe9dc723f000000009be8a13e000080bfbaf43a3ee8b1693fbaf4babebaf43a3ee8b1693fbaf4babe05e4123f55bb5d3f2ef9643f000000002ef9e43e000080bf5d2b6b3e5d2b6b3f5a9ea4be5d2b6b3e5d2b6b3f5a9ea4be7045193f70e65e3fd750503f0000000008cc143f000080bf77668d3ec7aa6b3f77668dbe77668d3ec7aa6b3f77668dbe0000203fae4d5f3ff304353f00000000f304353f000080bf5a9ea43e5d2b6b3f5d2b6bbe5a9ea43e5d2b6b3f5d2b6bbe90ba263f70e65e3f08cc143f00000000d750503f000080bfbaf4ba3ee8b1693fb9f43abebaf4ba3ee8b1693fb9f43abefc1b2d3f55bb5d3f2df9e43e000000002ef9643f000080bf102bd03e4b4c673f60c70abe102bd03e4b4c673f60c70abe05e4323f8ae85b3f9be8a13e00000000e9dc723f000080bf1c10e43e1c10643f4b73b6bd1c10e43e1c10643f4b73b6bd17f5373f5d93593facd2483e0000000055077b3f000080bf8681f63ea818603fea4633bd8681f63ea818603fea4633bd624e3c3f05e2563fcb6ab93d00000000dbf27e3f000080bfffb5033fa9845b3f00000000ffb5033fa9845b3f000000000000403f71f6533f00000080000000000000803f000080bf2b91083f2e3b583fe416363d2b91083f2e3b583fe416363d3263433f2ef8513fbf13aabd000000009f1d7f3f000080bf0379ff3eb1a25c3f5fccb93d0379ff3eb1a25c3f5fccb93df153473fada8543fbe2d37be00000000e5de7b3f000080bf012bec3e0e5c603f67b30d3e012bec3e0e5c603f67b30d3e01e04b3f7b0e573f431f93be000000001b34753f000080bf5551d73ea147633fbd643f3e5551d73ea147633fbd643f3e3d0a513fcc07593f62f1cfbe000000008eef693f000080bf5916c13e894a653fef5b713e5916c13e894a653fef5b713e67c2563f07725a3f03ae07bf000000006b16593f000080bf13b5a93e2c51663fa376913e13b5a93e2c51663fa376913e3edf5c3fc02f5b3f449a26bf00000000a45e423f000080bfa276913e2c51663f14b5a93ea276913e2c51663f14b5a93ec320633fc02f5b3fa55e42bf00000000439a263f000080bfed5b713e894a653f5916c13eed5b713e894a653f5916c13e993d693f07725a3f6c1659bf0000000002ae073f000080bfbd643f3ea147633f5551d73ebd643f3ea147633f5551d73ec3f56e3fcc07593f8eef69bf0000000062f1cf3e000080bf66b30d3e0e5c603f012bec3e66b30d3e0e5c603f012bec3eff1f743f7b0e573f1b3475bf00000000421f933e000080bf5fccb93db1a25c3f0379ff3e5fccb93db1a25c3f0379ff3e0fac783fada8543fe5de7bbf00000000be2d373e000080bf9f88bc3db319543f77660d3f9f88bc3db319543f77660d3f7045793f93914f3f50847cbf000000003658283e000080bfaf49383de0524f3fdabb153faf49383de0524f3fdabb153f3ddf7c3fb0ea4c3ff63e7fbf0000000012139d3d000080bf00000000fd124a3f362b1d3f00000000fd124a3f362b1d3f0000803f24224a3f000080bf0000000000000000000080bfe316363d2e3b583f2b91083fe316363d2e3b583f2b91083fce9c7c3f2ef8513f9f1d7fbf00000000be13aa3d000080bf000000005647533f208f103f000000005647533f208f103f0000803f7f1a4f3f000080bf0000000000000000000080bfb9f43a3ee8b1693fbaf4ba3eb9f43a3ee8b1693fbaf4ba3efb1b6d3f55bb5d3f2ef964bf000000002df9e43e000080bf60c70a3e4b4c673f102bd03e60c70a3e4b4c673f102bd03e05e4723f8ae85b3fe9dc72bf000000009be8a13e000080bf4b73b63d1c10643f1c10e43e4b73b63d1c10643f1c10e43e17f5773f5d93593f55077bbf00000000acd2483e000080bfea46333da818603f8681f63eea46333da818603f8681f63e624e7c3f05e2563fdbf27ebf00000000cb6ab93d000080bf00000000a9845b3fffb5033f00000000a9845b3fffb5033f0000803f71f6533f000080bf0000000000000000000080bf0780073e0d206d3fb4aab43e0780073e0d206d3fb4aab43ee361713f5383603f45b36fbf0000000073c6b33e000080bfe416363e0bfe6e3f07549f3ee416363e0bfe6e3f07549f3e1cd96a3f2b21623f2f455ebf00000000ed05fe3e000080bf5d2b6b3e5d2b6b3f5a9ea43e5d2b6b3e5d2b6b3f5a9ea43e90ba663f70e65e3fd75050bf0000000008cc143f000080bf77668d3ec7aa6b3f77668d3e77668d3ec7aa6b3f77668d3e0000603fae4d5f3ff30435bf00000000f304353f000080bf5a9ea43e5d2b6b3f5d2b6b3e5a9ea43e5d2b6b3f5d2b6b3e7045593f70e65e3f08cc14bf00000000d750503f000080bfbaf4ba3ee8b1693fbaf43a3ebaf4ba3ee8b1693fbaf43a3e05e4523f55bb5d3f2ef9e4be000000002ef9643f000080bf102bd03e4b4c673f60c70a3e102bd03e4b4c673f60c70a3efb1b4d3f8ae85b3f9be8a1be00000000e9dc723f000080bf1c10e43e1c10643f4a73b63d1c10e43e1c10643f4a73b63de90a483f5d93593fabd248be0000000055077b3f000080bf8681f63ea818603fed46333d8681f63ea818603fed46333d9eb1433f05e2563fce6ab9bd00000000dbf27e3f000080bf5392ed3edbc5623f000000005392ed3edbc5623f000000000000403f68ae583f00000080000000000000803f000080bf3fecdb3e42eb663f2ff02fbd3fecdb3e42eb663f2ff02fbd6bf03b3fbba05b3f97c8cb3d00000000c2ba7e3f000080bf19ebc83e9d676a3f1698b2bd19ebc83e9d676a3f1698b2bd3417373f1a4a5e3f04235e3e0000000065e7793f000080bfb4aab43e0d206d3f078007beb4aab43e0d206d3f078007bee361313f5383603f73c6b33e0000000045b36f3f000080bf07549f3e0bfe6e3fe41636be07549f3e0bfe6e3fe41636be1cd92a3f2b21623fed05fe3e000000002f455e3f000080bf2d1c893e4ff16f3f4b8464be2d1c893e4ff16f3f4b8464be9eb1233f37fc623f1fe3233f0000000026aa443f000080bf4b84643e4ff16f3f2d1c89be4b84643e4ff16f3f2d1c89be624e1c3f37fc623f26aa443f000000001fe3233f000080bfe416363e0bfe6e3f07549fbee416363e0bfe6e3f07549fbee426153f2b21623f2f455e3f00000000ed05fe3e000080bf0780073e0d206d3fb4aab4be0780073e0d206d3fb4aab4be1e9e0e3f5383603f45b36f3f0000000073c6b33e000080bf1698b23d9d676a3f19ebc8be1698b23d9d676a3f19ebc8becce8083f1a4a5e3f65e7793f0000000004235e3e000080bf32f02f3d42eb663f3fecdbbe32f02f3d42eb663f3fecdbbe950f043fbba05b3fc2ba7e3f000000009bc8cb3d000080bf00000000c70d693ffbddd3be00000000c70d693ffbddd3be0000003f3a3c5d3f0000803f0000000000000000000080bff32a2cbd0abb6c3f4eb0c1bef32a2cbd0abb6c3f4eb0c1be9afbf63e6e2e603f2a6f7e3f00000000f129e2bd000080bf5b56aebdbeb66f3f5c56aebe5b56aebdbeb66f3f5c56aebe8f09ec3eecc6623f425b783f00000000415b78be000080bf26f403be45ea713f2cf299be26f403be45ea713f2cf299bea601df3ef1d7643f174d6b3f00000000cbafc9be000080bf95eb30beee43733fb0b084be95eb30beee43733fb0b084bed215d03e8630663f4001553f00000000d5000ebf000080bf67905dbe71b8733f67905dbe67905dbe71b8733f67905dbe0000c03ea6a8663ff404353f00000000f40435bf000080bfb0b084beee43733f96eb30beb0b084beee43733f96eb30be2eeaaf3e8630663fd6000e3f00000000400155bf000080bf2cf299be45ea713f26f403be2cf299be45ea713f26f403be59fea03ef1d7643fcbafc93e00000000174d6bbf000080bfc48f94bec210743fe0c8a9bdc48f94bec210743fe0c8a9bd8aad963e2905673f40a88c3e000000006f2676bf000080bf980fa8be6a96713f980f28bd980fa8be6a96713f980f28bd23228a3ecd86643fec05fe3d00000000ec057ebf000080bf8e92babeee656e3f000000008e92babeee656e3f000000000000803e329b613f0000008000000000000080bf000080bf980fa8be6a96713f970f283d980fa8be6a96713f970f283db8bb6b3ecd86643fea05febd00000000ec057ebf000080bfc48f94bec210743fdfc8a93dc48f94bec210743fdfc8a93deba4523e2905673f3fa88cbe000000006f2676bf000080bf093980bea7c2753f0939003e093980bea7c2753f0939003eec6f343ef2df683f2ff9e4be000000002ff964bf000080bf057456be069f763f04902b3e057456be069f763f04902b3ec908123edcdf693f04ec1fbf0000000005e747bf000080bf04902bbe069f763f0574563e04902bbe069f763f0574563e6deedb3ddcdf693f05e747bf0000000004ec1fbf000080bf093900bea7c2753f0939803e093900bea7c2753f0939803e2920973df2df683f2ff964bf000000002ff9e4be000080bfe0c8a9bdc210743fc48f943ee0c8a9bdc210743fc48f943e556c353d2905673f6f2676bf0000000040a88cbe000080bf980f28bd6a96713f980fa83e980f28bd6a96713f980fa83e3a22a23ccd86643fec057ebf00000000ec05febd000080bf00000000ee656e3f8e92ba3e00000000ee656e3f8e92ba3e00000080329b613f000080bf0000000000000000000080bf00000000e8dc723f9be8a13e00000000e8dc723f9be8a13e0000008009c8653f000080bf0000000000000000000080bf86b523bd4990753fd53e8f3e86b523bd4990753fd53e8f3e4701b93cf4a6683f556d7dbf00000000c3d010be000080bf5508a5bd7f8c773f7f8c773e5508a5bd7f8c773f7f8c773eaebf513de8006b3fe9dc72bf000000009be8a1be000080bf67c3f8bd67c3783f814d4f3e67c3f8bd67c3783f814d4f3e3c26b03d14946c3fa8845bbf00000000feb503bf000080bf5f1d26be0f2c793f5f1d263e5f1d26be0f2c793f5f1d263e0000003e35236d3ff30435bf00000000f30435bf000080bf814d4fbe67c3783f67c3f83d814d4fbe67c3783f67c3f83de1ec273e14946c3ffeb503bf00000000a8845bbf000080bf7f8c77be7f8c773f5508a53d7f8c77be7f8c773f5508a53d14904b3ee8006b3f9be8a1be00000000e9dc72bf000080bfd53e8fbe4990753f86b5233dd53e8fbe4990753f86b5233dd7df683ef4a6683fc3d010be00000000556d7dbf000080bf9be8a1bee8dc723f000000009be8a1bee8dc723f000000000000803e09c8653f0000008000000000000080bf000080bfd53e8fbe4990753f86b523bdd53e8fbe4990753f86b523bd14908b3ef4a6683fc3d0103e00000000556d7dbf000080bf7f8c77be7f8c773f5508a5bd7f8c77be7f8c773f5508a5bdf6379a3ee8006b3f9be8a13e00000000e9dc72bf000080bf093980bea7c2753f093900be093980bea7c2753f093900be09c8a53ef2df683f2ff9e43e000000002ff964bf000080bf057456be069f763f04902bbe057456be069f763f04902bbe9bfbb63edcdf693f04ec1f3f0000000005e747bf000080bf04902bbe069f763f057456be04902bbe069f763f057456be6404c93edcdf693f05e7473f0000000004ec1fbf000080bf093900bea7c2753f093980be093900bea7c2753f093980bef637da3ef2df683f2ff9643f000000002ff9e4be000080bfdfc8a9bdc210743fc48f94bedfc8a9bdc210743fc48f94be7552e93e2905673f6f26763f000000003fa88cbe000080bf970f28bd6a96713f980fa8be970f28bd6a96713f980fa8bedcddf53ecd86643fec057e3f00000000ea05febd000080bf00000000ee656e3f8e92babe00000000ee656e3f8e92babe0000003f329b613f0000803f0000000000000000000080bff02a2c3d0abb6c3f4eb0c1bef02a2c3d0abb6c3f4eb0c1be3282043f6e2e603f2a6f7e3f00000000ed29e23d000080bf5c56ae3dbeb66f3f5c56aebe5c56ae3dbeb66f3f5c56aebe38fb093fecc6623f425b783f00000000425b783e000080bf26f4033e45ea713f2cf299be26f4033e45ea713f2cf299be2d7f103ff1d7643f174d6b3f00000000cbafc93e000080bf96eb303eee43733fb0b084be96eb303eee43733fb0b084be17f5173f8630663f4001553f00000000d6000e3f000080bf67905d3e71b8733f67905dbe67905d3e71b8733f67905dbe0000203fa6a8663ff404353f00000000f404353f000080bfb0b0843eee43733f95eb30beb0b0843eee43733f95eb30bee90a283f8630663fd5000e3f000000004001553f000080bf2cf2993e45ea713f26f403be2cf2993e45ea713f26f403bed4802f3ff1d7643fcbafc93e00000000174d6b3f000080bf5c56ae3ebeb66f3f5b56aebd5c56ae3ebeb66f3f5b56aebdc804363fecc6623f415b783e00000000425b783f000080bf4eb0c13e0abb6c3ff32a2cbd4eb0c13e0abb6c3ff32a2cbdce7d3b3f6e2e603ff129e23d000000002a6f7e3f000080bffbddd33ec70d693f00000000fbddd33ec70d693f000000000000403f3a3c5d3f00000080000000000000803f000080bf3fecdb3e42eb663f32f02f3d3fecdb3e42eb663f32f02f3d950f443fbba05b3f9bc8cbbd00000000c2ba7e3f000080bf19ebc83e9d676a3f1698b23d19ebc83e9d676a3f1698b23dcde8483f1a4a5e3f04235ebe0000000065e7793f000080bfb4aab43e0d206d3f0780073eb4aab43e0d206d3f0780073e1d9e4e3f5383603f73c6b3be0000000045b36f3f000080bf07549f3e0bfe6e3fe416363e07549f3e0bfe6e3fe416363ee426553f2b21623fed05febe000000002f455e3f000080bf2d1c893e4ff16f3f4b84643e2d1c893e4ff16f3f4b84643e624e5c3f37fc623f1fe323bf0000000026aa443f000080bf4b84643e4ff16f3f2d1c893e4b84643e4ff16f3f2d1c893e9eb1633f37fc623f26aa44bf000000001fe3233f000080bf4eb0c13e0abb6c3ff02a2c3d4eb0c13e0abb6c3ff02a2c3d3282443f6e2e603fed29e2bd000000002a6f7e3f000080bf5c56ae3ebeb66f3f5c56ae3d5c56ae3ebeb66f3f5c56ae3d38fb493fecc6623f425b78be00000000425b783f000080bf2cf2993e45ea713f26f4033e2cf2993e45ea713f26f4033e2d7f503ff1d7643fcbafc9be00000000174d6b3f000080bfb0b0843eee43733f96eb303eb0b0843eee43733f96eb303e17f5573f8630663fd6000ebf000000004001553f000080bf67905d3e71b8733f67905d3e67905d3e71b8733f67905d3e0000603fa6a8663ff40435bf00000000f404353f000080bf95eb303eee43733fb0b0843e95eb303eee43733fb0b0843ee90a683f8630663f400155bf00000000d5000e3f000080bf26f4033e45ea713f2cf2993e26f4033e45ea713f2cf2993ed3806f3ff1d7643f174d6bbf00000000cbafc93e000080bf5b56ae3dbeb66f3f5c56ae3e5b56ae3dbeb66f3f5c56ae3ec804763fecc6623f425b78bf00000000415b783e000080bf1698b23d9d676a3f19ebc83e1698b23d9d676a3f19ebc83e3317773f1a4a5e3f65e779bf0000000004235e3e000080bf2ff02f3d42eb663f3fecdb3e2ff02f3d42eb663f3fecdb3e6bf07b3fbba05b3fc2ba7ebf0000000097c8cb3d000080bf00000000dbc5623f5392ed3e00000000dbc5623f5392ed3e0000803f68ae583f000080bf0000000000000000000080bff32a2c3d0abb6c3f4eb0c13ef32a2c3d0abb6c3f4eb0c13ece7d7b3f6e2e603f2a6f7ebf00000000f129e23d000080bf00000000c70d693ffbddd33e00000000c70d693ffbddd33e0000803f3a3c5d3f000080bf0000000000000000000080bf0939803ea7c2753f0939003e0939803ea7c2753f0939003e05e4523ff2df683f2ff9e4be000000002ff9643f000080bf0574563e069f763f04902b3e0574563e069f763f04902b3ece7d5b3fdcdf693f04ec1fbf0000000005e7473f000080bf04902b3e069f763f0574563e04902b3e069f763f0574563e3282643fdcdf693f05e747bf0000000004ec1f3f000080bf0939003ea7c2753f0939803e0939003ea7c2753f0939803efb1b6d3ff2df683f2ff964bf000000002ff9e43e000080bfdfc8a93dc210743fc48f943edfc8a93dc210743fc48f943e3ba9743f2905673f6f2676bf000000003fa88c3e000080bf970f283d6a96713f980fa83e970f283d6a96713f980fa83eeeee7a3fcd86643fec057ebf00000000ea05fe3d000080bf00000000ee656e3f8e92ba3e00000000ee656e3f8e92ba3e0000803f329b613f000080bf0000000000000000000080bf814d4f3e67c3783f67c3f83d814d4f3e67c3783f67c3f83dc804563f14946c3ffeb503bf00000000a8845b3f000080bf7f8c773e7f8c773f5508a53d7f8c773e7f8c773f5508a53dfb1b4d3fe8006b3f9be8a1be00000000e9dc723f000080bfc48f943ec210743fe0c8a93dc48f943ec210743fe0c8a93dc5564b3f2905673f40a88cbe000000006f26763f000080bf980fa83e6a96713f980f283d980fa83e6a96713f980f283d1211453fcd86643fec05febd00000000ec057e3f000080bf8e92ba3eee656e3f000000008e92ba3eee656e3f000000000000403f329b613f00000080000000000000803f000080bf980fa83e6a96713f970f28bd980fa83e6a96713f970f28bdeeee3a3fcd86643fea05fe3d00000000ec057e3f000080bfc48f943ec210743fdfc8a9bdc48f943ec210743fdfc8a9bd3ba9343f2905673f3fa88c3e000000006f26763f000080bf0939803ea7c2753f093900be0939803ea7c2753f093900befc1b2d3ff2df683f2ff9e43e000000002ff9643f000080bf0574563e069f763f04902bbe0574563e069f763f04902bbe3282243fdcdf693f04ec1f3f0000000005e7473f000080bf04902b3e069f763f057456be04902b3e069f763f057456bece7d1b3fdcdf693f05e7473f0000000004ec1f3f000080bf0939003ea7c2753f093980be0939003ea7c2753f093980be05e4123ff2df683f2ff9643f000000002ff9e43e000080bfe0c8a93dc210743fc48f94bee0c8a93dc210743fc48f94bec6560b3f2905673f6f26763f0000000040a88c3e000080bf980f283d6a96713f980fa8be980f283d6a96713f980fa8be1211053fcd86643fec057e3f00000000ec05fe3d000080bf00000000e8dc723f9be8a1be00000000e8dc723f9be8a1be0000003f09c8653f0000803f0000000000000000000080bf86b523bd4990753fd53e8fbe86b523bd4990753fd53e8fbeeb6ff43ef4a6683f556d7d3f00000000c3d010be000080bf5508a5bd7f8c773f7f8c77be5508a5bd7f8c773f7f8c77be0ac8e53ee8006b3fe9dc723f000000009be8a1be000080bf67c3f8bd67c3783f814d4fbe67c3f8bd67c3783f814d4fbe70f6d33e14946c3fa8845b3f00000000feb503bf000080bf5f1d26be0f2c793f5f1d26be5f1d26be0f2c793f5f1d26be0000c03e35236d3ff304353f00000000f30435bf000080bf814d4fbe67c3783f67c3f8bd814d4fbe67c3783f67c3f8bd8f09ac3e14946c3ffeb5033f00000000a8845bbf000080bf86b5233d4990753fd53e8fbe86b5233d4990753fd53e8fbe0ac8053ff4a6683f556d7d3f00000000c3d0103e000080bf5508a53d7f8c773f7f8c77be5508a53d7f8c773f7f8c77befb1b0d3fe8006b3fe9dc723f000000009be8a13e000080bf67c3f83d67c3783f814d4fbe67c3f83d67c3783f814d4fbec804163f14946c3fa8845b3f00000000feb5033f000080bf5f1d263e0f2c793f5f1d26be5f1d263e0f2c793f5f1d26be0000203f35236d3ff304353f00000000f304353f000080bf814d4f3e67c3783f67c3f8bd814d4f3e67c3783f67c3f8bd38fb293f14946c3ffeb5033f00000000a8845b3f000080bf7f8c773e7f8c773f5508a5bd7f8c773e7f8c773f5508a5bd05e4323fe8006b3f9be8a13e00000000e9dc723f000080bfd53e8f3e4990753f86b523bdd53e8f3e4990753f86b523bdf6373a3ff4a6683fc3d0103e00000000556d7d3f000080bf9be8a13ee8dc723f000000009be8a13ee8dc723f000000000000403f09c8653f00000080000000000000803f000080bfd53e8f3e4990753f86b5233dd53e8f3e4990753f86b5233d0ac8453ff4a6683fc3d010be00000000556d7d3f000080bfcdfcf03d55077b3f89a820becdfcf03d55077b3f89a820bef6371a3f2dea6f3fcdcc4c3f000000009999193f000080bf89a8203e55077b3fccfcf0bd89a8203e55077b3fccfcf0bd0bc8253f2dea6f3f9999193f00000000cdcc4c3f000080bf3535483e83427a3f902aa0bd3535483e83427a3f902aa0bd2d7f303f16b66e3fea26be3e00000000a6b06d3f000080bf18cb6e3e39be783f10321fbd18cb6e3e39be783f10321fbd7045393f1a8d6c3f3558283e0000000050847c3f000080bfef0c8a3ed084763f00000000ef0c8a3ed084763f000000000000403fd6c0693f00000080000000000000803f000080bf18cb6e3e39be783f10321f3d18cb6e3e39be783f10321f3d90ba463f1a8d6c3f355828be0000000050847c3f000080bf3535483e83427a3f912aa03d3535483e83427a3f912aa03dd3804f3f16b66e3feb26bebe00000000a6b06d3f000080bf89a8203e55077b3fcdfcf03d89a8203e55077b3fcdfcf03df6375a3f2dea6f3f999919bf00000000cdcc4c3f000080bf5f1d263e0f2c793f5f1d263e5f1d263e0f2c793f5f1d263e0000603f35236d3ff30435bf00000000f304353f000080bf67c3f83d67c3783f814d4f3e67c3f83d67c3783f814d4f3e38fb693f14946c3fa8845bbf00000000feb5033f000080bf5508a53d7f8c773f7f8c773e5508a53d7f8c773f7f8c773e05e4723fe8006b3fe9dc72bf000000009be8a13e000080bf86b5233d4990753fd53e8f3e86b5233d4990753fd53e8f3ef6377a3ff4a6683f556d7dbf00000000c3d0103e000080bf00000000e8dc723f9be8a13e00000000e8dc723f9be8a13e0000803f09c8653f000080bf0000000000000000000080bfccfcf03d55077b3f89a8203eccfcf03d55077b3f89a8203e0ac8653f2dea6f3fcdcc4cbf000000009999193f000080bf902aa03d83427a3f3535483e902aa03d83427a3f3535483e2d7f703f16b66e3fa6b06dbf00000000ea26be3e000080bf10321f3d39be783f18cb6e3e10321f3d39be783f18cb6e3e7045793f1a8d6c3f50847cbf000000003558283e000080bf00000000d084763fef0c8a3e00000000d084763fef0c8a3e0000803fd6c0693f000080bf0000000000000000000080bf1a39e93d87a87c3f1a39e93d1a39e93d87a87c3f1a39e93d0000603fb7d1723ff30435bf00000000f304353f000080bf2b429b3d874b7c3f2c421b3e2b429b3d874b7c3f2c421b3efb1b6d3f9c1e723f2ef964bf000000002df9e43e000080bff4971a3deb367b3ff03d413ef4971a3deb367b3ff03d413e17f5773f2338703f55077bbf00000000acd2483e000080bf00000000b371793f9241663e00000000b371793f9241663e0000803fcd846d3f000080bf0000000000000000000080bf6f5e963d5cbf7d3fa78de13d6f5e963d5cbf7d3fa78de13de90a683fa82e753f400155bf00000000d5000e3f000080bfa78de13d5cbf7d3f6f5e963da78de13d5cbf7d3f6f5e963d17f5573fa82e753fd5000ebf000000004001553f000080bf2c421b3e874b7c3f2c429b3d2c421b3e874b7c3f2c429b3d05e4523f9c1e723f2ef9e4be000000002ef9643f000080bff03d413eeb367b3ff3971a3df03d413eeb367b3ff3971a3de90a483f2338703faad248be0000000055077b3f000080bf9241663eb371793f000000009241663eb371793f000000000000403fcd846d3f00000080000000000000803f000080bff03d413eeb367b3ff4971abdf03d413eeb367b3ff4971abd17f5373f2338703facd2483e0000000055077b3f000080bf2c421b3e874b7c3f2b429bbd2c421b3e874b7c3f2b429bbdfc1b2d3f9c1e723f2df9e43e000000002ef9643f000080bf1a39e93d87a87c3f1a39e9bd1a39e93d87a87c3f1a39e9bd0000203fb7d1723ff304353f00000000f304353f000080bf2c429b3d874b7c3f2c421bbe2c429b3d874b7c3f2c421bbe05e4123f9c1e723f2ef9643f000000002ef9e43e000080bf912aa03d83427a3f353548be912aa03d83427a3f353548bed4800f3f16b66e3fa6b06d3f00000000eb26be3e000080bf10321f3d39be783f18cb6ebe10321f3d39be783f18cb6ebe90ba063f1a8d6c3f50847c3f000000003558283e000080bf00000000d084763fef0c8abe00000000d084763fef0c8abe0000003fd6c0693f0000803f0000000000000000000080bf10321fbd39be783f18cb6ebe10321fbd39be783f18cb6ebedf8af23e1a8d6c3f50847c3f00000000355828be000080bf902aa0bd83427a3f353548be902aa0bd83427a3f353548be59fee03e16b66e3fa6b06d3f00000000ea26bebe000080bfccfcf0bd55077b3f89a820beccfcf0bd55077b3f89a820be1590cb3e2dea6f3fcdcc4c3f00000000999919bf000080bf89a820be55077b3fcdfcf0bd89a820be55077b3fcdfcf0bdec6fb43e2dea6f3f9999193f00000000cdcc4cbf000080bf353548be83427a3f912aa0bd353548be83427a3f912aa0bda7019f3e16b66e3feb26be3e00000000a6b06dbf000080bf18cb6ebe39be783f10321fbd18cb6ebe39be783f10321fbd20758d3e1a8d6c3f3558283e0000000050847cbf000080bfef0c8abed084763f00000000ef0c8abed084763f000000000000803ed6c0693f0000008000000000000080bf000080bf18cb6ebe39be783f10321f3d18cb6ebe39be783f10321f3dbf15653e1a8d6c3f355828be0000000050847cbf000080bf353548be83427a3f902aa03d353548be83427a3f902aa03db3fc413e16b66e3fea26bebe00000000a6b06dbf000080bf89a820be55077b3fccfcf03d89a820be55077b3fccfcf03d2920173e2dea6f3f999919bf00000000cdcc4cbf000080bfcdfcf0bd55077b3f89a8203ecdfcf0bd55077b3f89a8203eaebfd13d2dea6f3fcdcc4cbf00000000999919bf000080bf912aa0bd83427a3f3535483e912aa0bd83427a3f3535483e360d783d16b66e3fa6b06dbf00000000eb26bebe000080bf10321fbd39be783f18cb6e3e10321fbd39be783f18cb6e3e0552d73c1a8d6c3f50847cbf00000000355828be000080bf00000000d084763fef0c8a3e00000000d084763fef0c8a3e00000080d6c0693f000080bf0000000000000000000080bf00000000b371793f9241663e00000000b371793f9241663e00000080cd846d3f000080bf0000000000000000000080bff3971abdeb367b3ff03d413ef3971abdeb367b3ff03d413e91ae003d2338703f55077bbf00000000aad248be000080bf2c429bbd874b7c3f2c421b3e2c429bbd874b7c3f2c421b3e2920973d9c1e723f2ef964bf000000002ef9e4be000080bf1a39e9bd87a87c3f1a39e93d1a39e9bd87a87c3f1a39e93d0000003eb7d1723ff30435bf00000000f30435bf000080bf2c421bbe874b7c3f2b429b3d2c421bbe874b7c3f2b429b3dec6f343e9c1e723f2df9e4be000000002ef964bf000080bff03d41beeb367b3ff4971a3df03d41beeb367b3ff4971a3d5cd45f3e2338703facd248be0000000055077bbf000080bf924166beb371793f00000000924166beb371793f000000000000803ecd846d3f0000008000000000000080bf000080bff03d41beeb367b3ff3971abdf03d41beeb367b3ff3971abdd215903e2338703faad2483e0000000055077bbf000080bf2c421bbe874b7c3f2c429bbd2c421bbe874b7c3f2c429bbd09c8a53e9c1e723f2ef9e43e000000002ef964bf000080bf1a39e9bd87a87c3f1a39e9bd1a39e9bd87a87c3f1a39e9bd0000c03eb7d1723ff304353f00000000f30435bf000080bf2b429bbd874b7c3f2c421bbe2b429bbd874b7c3f2c421bbef637da3e9c1e723f2ef9643f000000002df9e4be000080bff4971abdeb367b3ff03d41bef4971abdeb367b3ff03d41be2eeaef3e2338703f55077b3f00000000acd248be000080bf00000000b371793f924166be00000000b371793f924166be0000003fcd846d3f0000803f0000000000000000000080bff3971a3deb367b3ff03d41bef3971a3deb367b3ff03d41bee90a083f2338703f55077b3f00000000aad2483e000080bf19f715befa107d3f19f715bd19f715befa107d3f19f715bd71f6933ed5a6733f435b783e00000000435b78bf000080bfa78de1bd5cbf7d3f6f5e96bda78de1bd5cbf7d3f6f5e96bd2eeaaf3ea82e753fd5000e3f00000000400155bf000080bf6f5e96bd5cbf7d3fa78de1bd6f5e96bd5cbf7d3fa78de1bdd215d03ea82e753f4001553f00000000d5000ebf000080bf18f715bdfa107d3f19f715be18f715bdfa107d3f19f715be8f09ec3ed5a6733f435b783f00000000415b78be000080bf000000005eb87b3f9b753abe000000005eb87b3f9b753abe0000003f2a14713f0000803f0000000000000000000080bf19f7153dfa107d3f19f715be19f7153dfa107d3f19f715be38fb093fd5a6733f435b783f00000000435b783e000080bf6f5e963d5cbf7d3fa78de1bd6f5e963d5cbf7d3fa78de1bd17f5173fa82e753f4001553f00000000d5000e3f000080bfa78de13d5cbf7d3f6f5e96bda78de13d5cbf7d3f6f5e96bde90a283fa82e753fd5000e3f000000004001553f000080bf19f7153efa107d3f18f715bd19f7153efa107d3f18f715bdc804363fd5a6733f415b783e00000000435b783f000080bf9b753a3e5eb87b3f000000009b753a3e5eb87b3f000000000000403f2a14713f00000080000000000000803f000080bf19f7153efa107d3f19f7153d19f7153efa107d3f19f7153d38fb493fd5a6733f435b78be00000000435b783f000080bf925c11bdff617e3fdb0adabd925c11bdff617e3fdb0adabd0ac8e53ef4d5763fe9dc723f000000009be8a1be000080bf00000000546d7d3fc3d010be00000000546d7d3fc3d010be0000003fea6f743f0000803f0000000000000000000080bf925c113dff617e3fdb0adabd925c113dff617e3fdb0adabdfb1b0d3ff4d5763fe9dc723f000000009be8a13e000080bf878b913d2cb47e3f878b91bd878b913d2cb47e3f878b91bd0000203fe0cb773ff304353f00000000f304353f000080bfdb0ada3dff617e3f925c11bddb0ada3dff617e3f925c11bd05e4323ff4d5763f9be8a13e00000000e9dc723f000080bfc3d0103e546d7d3f00000000c3d0103e546d7d3f000000000000403fea6f743f00000080000000000000803f000080bfdb0ada3dff617e3f925c113ddb0ada3dff617e3f925c113dfb1b4d3ff4d5763f9be8a1be00000000e9dc723f000080bf878b913d2cb47e3f878b913d878b913d2cb47e3f878b913d0000603fe0cb773ff30435bf00000000f304353f000080bf925c113dff617e3fdb0ada3d925c113dff617e3fdb0ada3d05e4723ff4d5763fe9dc72bf000000009be8a13e000080bf18f7153dfa107d3f19f7153e18f7153dfa107d3f19f7153ec804763fd5a6733f435b78bf00000000415b783e000080bf000000005eb87b3f9b753a3e000000005eb87b3f9b753a3e0000803f2a14713f000080bf0000000000000000000080bf00000000546d7d3fc3d0103e00000000546d7d3fc3d0103e0000803fea6f743f000080bf0000000000000000000080bfcabcd23d1fa47e3f00000000cabcd23d1fa47e3f000000000000403fa399773f00000080000000000000803f000080bfc9d28c3d0d3e7f3fc9d20c3dc9d28c3d0d3e7f3fc9d20c3d05e4523fb3ba793f2ef9e4be000000002ef9643f000080bfc9d20c3d0d3e7f3fc9d28c3dc9d20c3d0d3e7f3fc9d28c3dfb1b6d3fb3ba793f2ef964bf000000002ef9e43e000080bf000000001fa47e3fcabcd23d000000001fa47e3fcabcd23d0000803fa399773f000080bf0000000000000000000080bf1e3b883dd96e7f3f000000001e3b883dd96e7f3f000000000000403f56937a3f00000080000000000000803f000080bfc9d28c3d0d3e7f3fc9d20cbdc9d28c3d0d3e7f3fc9d20cbdfc1b2d3fb3ba793f2ef9e43e000000002ef9643f000080bfc9d20c3d0d3e7f3fc9d28cbdc9d20c3d0d3e7f3fc9d28cbd05e4123fb3ba793f2ef9643f000000002ef9e43e000080bf000000001fa47e3fcabcd2bd000000001fa47e3fcabcd2bd0000003fa399773f0000803f0000000000000000000080bfc9d20cbd0d3e7f3fc9d28cbdc9d20cbd0d3e7f3fc9d28cbdf637da3eb3ba793f2ef9643f000000002ef9e4be000080bf878b91bd2cb47e3f878b91bd878b91bd2cb47e3f878b91bd0000c03ee0cb773ff304353f00000000f30435bf000080bfdb0adabdff617e3f925c11bddb0adabdff617e3f925c11bdf6379a3ef4d5763f9be8a13e00000000e9dc72bf000080bfc3d010be546d7d3f00000000c3d010be546d7d3f000000000000803eea6f743f0000008000000000000080bf000080bf9b753abe5eb87b3f000000009b753abe5eb87b3f000000000000803e2a14713f0000008000000000000080bf000080bf19f715befa107d3f18f7153d19f715befa107d3f18f7153d1f13583ed5a6733f415b78be00000000435b78bf000080bfa78de1bd5cbf7d3f6f5e963da78de1bd5cbf7d3f6f5e963da42b203ea82e753fd5000ebf00000000400155bf000080bf6f5e96bd5cbf7d3fa78de13d6f5e96bd5cbf7d3fa78de13db6a8bf3da82e753f400155bf00000000d5000ebf000080bf19f715bdfa107d3f19f7153e19f715bdfa107d3f19f7153e86b31f3dd5a6733f435b78bf00000000435b78be000080bf000000005eb87b3f9b753a3e000000005eb87b3f9b753a3e000000802a14713f000080bf0000000000000000000080bf00000000546d7d3fc3d0103e00000000546d7d3fc3d0103e00000080ea6f743f000080bf0000000000000000000080bf925c11bdff617e3fdb0ada3d925c11bdff617e3fdb0ada3daebf513df4d5763fe9dc72bf000000009be8a1be000080bf878b91bd2cb47e3f878b913d878b91bd2cb47e3f878b913d0000003ee0cb773ff30435bf00000000f30435bf000080bfdb0adabdff617e3f925c113ddb0adabdff617e3f925c113d14904b3ef4d5763f9be8a1be00000000e9dc72bf000080bf000000001fa47e3fcabcd23d000000001fa47e3fcabcd23d00000080a399773f000080bf0000000000000000000080bfc9d20cbd0d3e7f3fc9d28c3dc9d20cbd0d3e7f3fc9d28c3d2920973db3ba793f2ef964bf000000002ef9e4be000080bfc9d28cbd0d3e7f3fc9d20c3dc9d28cbd0d3e7f3fc9d20c3dec6f343eb3ba793f2ef9e4be000000002ef964bf000080bfcabcd2bd1fa47e3f00000000cabcd2bd1fa47e3f000000000000803ea399773f0000008000000000000080bf000080bfc9d28cbd0d3e7f3fc9d20cbdc9d28cbd0d3e7f3fc9d20cbd09c8a53eb3ba793f2ef9e43e000000002ef964bf000080bf00000000d96e7f3f1e3b883d00000000d96e7f3f1e3b883d0000008056937a3f000080bf0000000000000000000080bfc36108bd4db77f3fc361083dc36108bd4db77f3fc361083d0000003e53297c3ff30435bf00000000f30435bf000080bf1e3b88bdd96e7f3f000000001e3b88bdd96e7f3f000000000000803e56937a3f0000008000000000000080bf000080bfc36108bd4db77f3fc36108bdc36108bd4db77f3fc36108bd0000c03e53297c3ff304353f00000000f30435bf000080bf00000000d96e7f3f1e3b88bd00000000d96e7f3f1e3b88bd0000003f56937a3f0000803f0000000000000000000080bfc361083d4db77f3fc36108bdc361083d4db77f3fc36108bd0000203f53297c3ff304353f00000000f304353f000080bf00000000eedd7f3f720f043d00000000eedd7f3f720f043d00000080505f7d3f000080bf0000000000000000000080bf720f04bdeedd7f3f00000000720f04bdeedd7f3f000000000000803e505f7d3f0000008000000000000080bf000080bf00000000eedd7f3f720f04bd00000000eedd7f3f720f04bd0000003f505f7d3f0000803f0000000000000000000080bf720f043deedd7f3f00000000720f043deedd7f3f000000000000403f505f7d3f00000080000000000000803f000080bfc361083d4db77f3fc361083dc361083d4db77f3fc361083d0000603f53297c3ff30435bf00000000f304353f000080bf00000000d96e7f3f1e3b883d00000000d96e7f3f1e3b883d0000803f56937a3f000080bf0000000000000000000080bf00000000eedd7f3f720f043d00000000eedd7f3f720f043d0000803f505f7d3f000080bf0000000000000000000080bf000000000000803f00000000000000000000803f000000000000003e0000803ff30435bf00000000f304353f000080bf000000000000803f00000000000000000000803f000000000000c03e0000803ff30435bf00000000f30435bf000080bf000000000000803f00000000000000000000803f000000000000203f0000803ff304353f00000000f30435bf000080bf000000000000803f00000000000000000000803f000000000000603f0000803ff304353f00000000f304353f000080bf
+ m_CompressedMesh:
+ m_Vertices:
+ m_NumItems: 0
+ m_Range: 0
+ m_Start: 0
+ m_Data:
+ m_BitSize: 0
+ m_UV:
+ m_NumItems: 0
+ m_Range: 0
+ m_Start: 0
+ m_Data:
+ m_BitSize: 0
+ m_Normals:
+ m_NumItems: 0
+ m_Range: 0
+ m_Start: 0
+ m_Data:
+ m_BitSize: 0
+ m_Tangents:
+ m_NumItems: 0
+ m_Range: 0
+ m_Start: 0
+ m_Data:
+ m_BitSize: 0
+ m_Weights:
+ m_NumItems: 0
+ m_Data:
+ m_BitSize: 0
+ m_NormalSigns:
+ m_NumItems: 0
+ m_Data:
+ m_BitSize: 0
+ m_TangentSigns:
+ m_NumItems: 0
+ m_Data:
+ m_BitSize: 0
+ m_FloatColors:
+ m_NumItems: 0
+ m_Range: 0
+ m_Start: 0
+ m_Data:
+ m_BitSize: 0
+ m_BoneIndices:
+ m_NumItems: 0
+ m_Data:
+ m_BitSize: 0
+ m_Triangles:
+ m_NumItems: 0
+ m_Data:
+ m_BitSize: 0
+ m_UVInfo: 0
+ m_LocalAABB:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 1, y: 1, z: 1}
+ m_MeshUsageFlags: 0
+ m_BakedConvexCollisionMesh:
+ m_BakedTriangleCollisionMesh:
+ m_MeshOptimized: 0
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/OctahedronSphere8192.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/OctahedronSphere8192.asset.meta
new file mode 100755
index 0000000..ffa0799
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Common/OctahedronSphere8192.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7ea26c1ee23534e45906e4c8dd184883
+timeCreated: 1609503535
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: -1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia.meta
new file mode 100755
index 0000000..e15ea0f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f22cc91327cfd87439f83cc1e660af12
+folderAsset: yes
+timeCreated: 1592852568
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AppleBipBop.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AppleBipBop.asset
new file mode 100755
index 0000000..6c7941b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AppleBipBop.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Https-HLS-AppleBipBop
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 0
+ _path: https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8
+ _hints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff12fffffe17fefff22af1fff22af2fff22af2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f2fff229f1fff229f1fff229f1fff229f1fff12af1fff727f8ffff11ffffff13ffffe513e4ff140015ff0b000cff0b000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a000cff0a050dff0e0711ff140e16ff0b000eff0b000eff0c000eff0d000eff0a000bff752775ffff13ffffff11ffffe413e3ff090009ff000100ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff212121ff0b0b0bff262626ff000000ff000000ff020000ff020000ff010101ff6d296fffff12ffffff12ffffe413e4ff09000aff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000300ff6f286fffff12ffffff12ffffe413e4ff09000aff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000300ff6f286fffff12ffffff12ffffe413e4ff09000aff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000300ff6f286fffff12ffffff12ffffe412e4ff09000aff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000300ff6f276fffff12ffffff12ffffe814e9ff2b232cff262626ff262626ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff252525ff262425ff262425ff222523ff7a2f7bffff12ffffff12ffffe413e5ff0c020dff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff070405ff070405ff030704ff732a74ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f286fffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070007ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff020000ff000100ff6f276fffff11ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff020202ff040404ff060606ff010101ff010101ff040404ff050505ff020202ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff050505ff010101ff434343ffb2b2b2ffeaeaeafff3f3f3fff1f1f1fff1f1f1fff3f3f3ffeeeeeeffc9c9c9ff575757ff010101ff060606ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff070707ff404040fff8f8f8fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefeffffbfbfbff777677ff070707ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff050505ff676767fff6f6f6fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff5f5f5ff999999ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff181818ffebebebfff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefeffff2f2f2ff464646ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff6b6a6bfff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff2f2f2ffbdbdbdff050505ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffa0a0a0fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefffdddcddff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ff939393fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffdcdcdcff050505ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff696969fff0f0f0fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffc4c4c4ff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe412e4ff070008ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0f0f0fffefefeffff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff3f3f3ff5b5b5bff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ff000200ff6f276fffff11ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff080808fffbfbfbfff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff2f2f2ff050505ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff6e6e6efff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ffc3c3c3ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff030303fff3f2f3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f0f1ff0b0b0bff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5b5b5bfff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ffbfbfbfff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffe3e3e3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff5f4f5ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000200ff70276fffff11ffffff12ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff030303fff3f2f3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff181818ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff414141fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffbbbbbbff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000001ff000001ff000003ff010001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000003ff000000ff010000ff000001ff010000ff010000ff000002ff000002ff000001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ff9d9d9dfff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0eff0ff040404ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff12ffffe413e4ff080009ff000000ff020202ff121212ff121212ff131213ff12120aff121207ff131207ff0b110bff06181bff061819ff051a0eff061a05ff061a05ff071606ff230423ff260428ff270428ff270405ff270404ff2b0303ff070122ff020232ff020236ff000017ff020002ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffd4d3d4fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff3f2f3ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f276fffff12ffffff11ffffe413e4ff080009ff000000ff040404ffbfbfbfffbfbebfffbebbc5ffb7bc37ffbfc10cffc6bf06ff5ab65eff10c5c7ff10c4c5ff0cc292ff13c510ff13c510ff2aae26ffbf16c0ffc214c0ffc610c3ffc20d24ffc21213ffc81107ff340289ff0c0cc1ff0f0cc7ff01014eff020000ff000001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff050505fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff030303ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff6f2870ffff12ffffff11ffffe513e4ff080009ff000100ff040404ffc2c2c2ffc0c0c0ffbebdc7ffb9bc3cffbec40effc8bf0aff5ab860ff11c5c4ff10c6c5ff0cc190ff13c614ff13c614ff29b02bffc415c2ffc315c4ffc613c5ffc20f25ffc51112ffcc1108ff340184ff0c0dbdff0e0cc5ff01014eff020000ff000001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff090909fff9f9f9fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff030303ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe513e4ff080009ff000100ff040404ffc3c3c3ffc2c2c2ffc1c1ccffbebf48ffc2c420ffc9c21aff60b466ff1fc0c1ff1bbfc0ff1dbf91ff25c826ff25c826ff36b237ffbe22bcffc120bdffc01ec2ffbb182affbd1719ffc21710ff2f077eff100fb1ff110eb8ff01014dff020000ff000001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff070707fff9f9f9fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ffeeeeeeffc0c0c0fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff040404ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe513e4ff080009ff000100ff040505ff888888ff898989ff8b8a8cff8b8b8dff89898bff8a8788ff949192ff8c8a8aff888687ff6e6c6dff888888ff888888ff797b7aff020404ff020403ff030301ff030302ff030303ff030305ff020103ff020000ff020000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff070707fff3f2f3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff646364ffeaeaeafff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff2f2f2ffefefefff040404ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe513e4ff080009ff000100ff040505ff878787ff888888ff89898bff8b8a8dff88888aff8a8788ff949192ff8c8a8aff888586ff6e6c6dff868686ff868686ff787a7aff010202ff000100ff000000ff000000ff000000ff000002ff000001ff020000ff020000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffe1e0e1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686868fff2f1f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff2f2f2ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe413e4ff080009ff000000ff050505ff878787ff898989ff89898aff8b8a8bff888889ff898888ff929192ff8b8989ff898888ff6c6b6bff838383ff868686ff757676ff010202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ffacacacfff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff696969ff838283fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff3f3f3ff050505ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff712971ffff12ffffff12ffffe413e4ff080009ff000000ff020202ff030303ff030303ff030303ff050505ff050505ff050505ff030303ff030303ff030303ff050505ff070707ff070707ff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff4e4e4efff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ffc6c6c6fff1f1f1fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffc8c8c8ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff12ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0a0a0afff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff646464fff1f0f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff373737ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff12ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffebebebfff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff6d6c6dffefefeffff0f0f0fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0fff2f2f2ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff12ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff7a7a7afff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff858585fff0f0f0fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffdcdcdcff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff11ffffe413e4ff080009ff000000ff000201ff000000ff080808ff020202ff010101ff040404ff010101ff020202ff050505ff010101ff070707ff0a0a0aff030303ff040404ff050505ff010101ff060606ff040404ff010101ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ffefefeffff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686868ff676767ffc2c2c2fff2f2f2fff2f2f2fff2f2f2fff2f2f2fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffeeeeeeff171617ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ff000100ff712971ffff12ffffff11ffffe513e4ff080009ff000100ff000100ff323232ff808080ff070707ff3f3f3fff8a8a8aff050505ff8b8b8bffacabacff040404ffacacacffd5d5d5ff080808ffbbbbbbffc1c1c1ff020202ff9d9d9dffc8c8c8ff030303ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffa9a9a9fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686868ff696869ff6d6d6dfff4f4f4fff1f1f1fff2f2f2fff2f2f2fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffe3e3e3ff050505ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe513e4ff080009ff000100ff000101ffa1a1a1ff030303ff393939ffddddddff050505ff363636ffc1c1c1ff0f0f0fff030303ff818181ff101010ff000000ff6a6a6aff626262ff000000ff060606ffacacacff010101ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff030303fff3f3f3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686868fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ff171717ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe513e4ff080009ff000100ff000100ff767676ff010101ff1a1a1affafafafff1b1b1bff151515ffd7d7d7ff191919ff020202ffaaa9aaff5c5c5cff030303ff939393ff8f8f8fff010101ff0f0f0fffacacacff000000ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff2f2f2fffeeeeeefff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff696969ff828182fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff969596ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff11ffffe513e4ff080009ff000100ff000201ff010101ff161616ff020202ff010101ff151515ff000000ff000000ff121212ff020202ff080808ff0c0c0cff010101ff070707ff070707ff020202ff101010ff0a0a0aff010101ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffa6a6a6fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff696969ffbdbdbdfff0f0f0fff1f1f1fff1f1f1fff1f1f1fff2f2f2fff1f1f1ff080808ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff010101ff010101ff010101ff010101ff000000ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff040404ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffd7d7d7fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff696969ff696969fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff5f5f5ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff000000ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff000000ff010101ff020202ff000000ff000000ff000000ff010101ff010101ff010101ff010101ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ffd7d7d7fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff696969ff696969ff606060fff5f5f5fff3f3f3ffefefefff050405ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff010101ff010101ff010101ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff010101ff000000ff000000ff010101ff000000ff010101ff020202ff010101ff020202ff010101ff000000ff060606ff7b7b7bff010101ff010101ff000000ff010101ff010101ff010101ff010101ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffb3b3b3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff696969ff696869ff686868ff797879ffe1e1e1ff070707ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff373737ff636363ff090909ff4c4c4cff737373ff020202ff0c0c0cffe2e2e2ff060606ffb0b0b0ffc9c9c9ff050505ffbbbbbbffbababaff050505ffb2b2b2ff595959ff020202ff9d9d9dff989898ff040404ff757575ff4c4c4cff050505ffdededeff040404ff010101ff3f3f3fff151515ff949494ff4a4a4aff0b0b0bff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff414141fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff696969ff686768ff686768ff404040ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff010101ffa2a2a2ff030303ff3d3d3dffdcdcdcff050505ff343434ff020202ff888787ff050505ff818181ff161616ff000000ff6b6b6bff656565ff050505ff505050ff202020ff000000ff101010ffc2c2c2ff313131ff040404ffdbdbdbff020202ffaeaeaeff040404ff949494ff0c0c0cff8e8e8eff060606ff3a3a3aff0c0c0cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020202ffd0d0d0ffefefeffff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff616161ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff686768ff646364ff0d0d0dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff12ffffe413e4ff080009ff000000ff000000ff737373ff000000ff181818ffb0b0b0ff1b1b1bff151515ff010101ff131313ff020202ffaaaaaaff5a5a5aff030303ff979797ff8f8f8fff090909ff060606ff000000ff020202ff252525ffd6d6d6ff121212ff1c1b1bffb6b6b6ff010101ff1e1e1eff010101ff4a4a4aff090909ff5e5e5eff181818ff010101ff0f0f0fff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff050505ff070707ffacacacfff5f5f5fff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffefefefff636363ff686868ff696969ff696969ff696969ff686868ff6a696aff555555ff0c0c0cff050505ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ff000100ff712971ffff12ffffff12ffffe513e4ff080009ff000100ff000100ff010101ff313131ff020202ff000000ff2b2b2bff010101ff010101ff000000ff010101ff040404ff141314ff000000ff0d0d0dff0d0d0dff000000ff010101ff000000ff010101ff222222ff030303ff000000ff292929ff010101ff020202ff000000ff000000ff010101ff363636ff010101ff010101ff353535ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff030303ff030303ff303030ff9a9a9affe5e5e5fff7f7f7fff8f7f8fff1f1f1ff636363ff686868ff6b6b6bff686868ff494949ff1a1a1aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff12ffffe513e4ff080009ff000100ff000100ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff000000ff010101ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff040404ff010101ff010101ff060606ff040404ff050505ff020202ff030303ff020202ff000000ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff12ffffe513e4ff080009ff000100ff000100ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff12ffffe513e4ff080009ff000100ff000100ff010101ff020202ff000000ff000000ff020202ff010101ff010101ff020202ff000000ff010101ff010101ff010101ff020202ff030303ff020202ff010101ff010101ff000000ff010101ff030303ff000000ff020202ff010101ff000000ff010101ff000000ff000000ff050505ff000000ff020202ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020000ff020000ff000100ff702971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff323232ff656565ff0b0b0bff505050ff777777ff020202ff080808ffdcdcdcff060606ff9e9e9effb8b7b8ff080808ffb0b0b0ffb0b0b0ff020202ffa5a5a5ff505050ff020202ff919191ff939393ff060606ff797979ff515151ff080808fff7f7f7ff010101ff050505ff555555ff1e1e1eff7a797aff505050ff0f0f0fff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff010101ffa2a2a2ff020202ff383838ffdcdcdcff060606ff343434ff000000ff969696ff070707ff818181ff131213ff000000ff6a6a6aff616161ff040404ff595959ff242424ff010101ff101010ffc1c1c1ff323232ff060606ffdfdfdfff020202ff020202ff010101ff959595ff0c0c0cff909090ff050505ff5d5d5dff0a0a0aff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff010101ff777777ff030303ff191919ffb9b9b9ff151515ff171717ff000000ff000000ff010101ffa7a7a7ff504f4fff000000ff8d8d8dff898989ff0a0a0aff010101ff010101ff030303ff222222ffd6d6d6ff151515ff171717ffbebebeff010101ff010101ff000000ff505050ff010101ff656565ff0d0d0dff010101ff171717ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff020202ff292929ff000000ff020202ff222222ff010101ff010101ff000000ff010101ff020202ff060606ff030303ff090909ff080808ff010101ff010101ff010101ff010101ff181818ff010101ff010101ff212121ff000000ff000000ff000000ff000000ff040404ff2f2f2fff040404ff040404ff313131ff070707ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff13ffffe413e4ff080009ff000000ff000000ff000000ff000000ff000000ff020202ff010101ff010101ff010101ff010101ff010101ff000000ff000000ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff030303ff030303ff010101ff000000ff000000ff000000ff000000ff010101ff000000ff000000ff010101ff010101ff030303ff010101ff010101ff010101ff000000ff000000ff020202ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ff722971ffff12ffffff12ffffe513e4ff080009ff000201ff000201ff505050ff3e3e3eff111111ff7c7c7cff818181ff0f0f0fff787878ff737373ff3c3c3cff7d7d7dff0d0d0dff717171ff757475ff757575ff020202ff030303ff000000ff212121ff858585ff030303ff5c5c5cff323232ff747474ff7f7f7fff010101ff1a1a1aff000000ff6d6d6dff4d4c4dff575757ff404040ff707070ff020202ff010101ff000000ff262626ff777777ff787878ff090909ff6d6d6dff535353ff1d1d1dff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020002ff020002ff000100ff71296fffff13ffffff12ffffe513e4ff080009ff000100ff000201ffb5b4b5ff454545ff1f1f1fff101010ff5f5f5fff0b0b0bff4b4a4bff929292ff868686ff404040ff8a8a8aff5f5f5fff818181ff151515ff020202ff444444ff020202ff282828ff232323ff040404ff303030ff0f0f0fff9d9d9dff4c4c4cff272727ff1d1d1dff000000ff8c8c8cff6e6e6eff353535ff474747ff949494ff040404ff010001ff010101ff747474ff202020ff181818ffa2a2a2ff8b8b8bff4f4f4fff363535ff060505ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff020002ff020002ff000100ff70296fffff12ffffff13ffffe513e5ff080008ff000000ff000000ff000000ff010001ff010101ff010101ff010101ff020101ff010101ff020101ff040303ff010001ff010000ff030101ff040303ff010000ff010000ff000000ff020102ff040203ff010000ff020001ff010000ff020101ff010000ff010000ff020101ff020101ff010000ff000000ff020101ff000000ff010000ff010101ff010000ff030102ff020001ff010000ff030202ff010000ff010000ff030101ff010001ff020101ff030101ff020001ff010000ff000000ff000000ff000000ff000000ff020101ff020101ff020101ff020101ff020101ff000000ff000000ff000000ff000000ff000000ff020101ff020101ff020101ff020101ff020101ff000000ff000000ff000000ff000000ff000000ff020101ff020101ff020101ff020101ff020101ff000000ff000000ff000000ff000000ff000000ff020101ff020101ff020101ff020101ff020001ff000000ff000000ff000000ff000000ff010000ff020101ff020101ff020101ff020101ff010000ff000000ff000000ff000000ff000000ff020001ff020101ff020101ff020101ff020101ff000000ff000000ff000000ff000000ff000000ff020101ff020101ff020101ff020101ff020101ff000000ff000000ff000000ff000000ff000000ff010002ff010002ff000100ff712970ffff11ffffff13ffffe613e5ff130115ff0b020cff0b020cff0c020cff0c010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0c010cff0d010cff0d010cff0c020cff0c020cff0c020cff0c020cff0d010cff0d010cff0c020cff0c020cff0c020cff0d010cff0d010cff0c020cff0c020cff0c020cff0c020cff0c020cff0c020cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0d010cff0d010cff0d010cff0d010cff0d010cff0c010bff0c010bff0c010bff0c010bff0c010bff0a010dff0a010dff08010bff782378ffff10ffffff13ffffff15fffffd1ffdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1efdfffd1ffdfffe1cfeffff13ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f813f7ff801580ff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7e147fff7f1780ff801881ff7e147fff7e147effda1cdafff112f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0b0b0bff090909ff010000ff010000ffb61db7fff112f1ff050005ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010100ffb71db7fff212f2ff161217ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff121212ff131212ff121212ffb91ebafff112f1ff060106ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff020202ff030202ff030202ffb81db8fff113f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71cb7fff112f1ff030003ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff3d3d3dff797979ff797979ff7a7a7aff484848ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff1b1b1bff8b8b8bfff2f2f2fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff3f3f3ff999899ff272727ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5d5c5dffefefeffff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ff7d7d7dff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff898989fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ffabababff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71cb7fff112f1ff030004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5a5a5afff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff868686ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb71cb7fff113f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff1d1d1dfff3f3f3fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ff323232ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ffb71cb7fff113f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff909090fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffaaaaaaff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000100ffb71cb7fff112f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ffeeedeefff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff2f1f2ff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb71cb7fff112f1ff040004ff000000ff000000ff000001ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff373737fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff6c6b6cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71cb7fff112f1ff040004ff353535ff68676aff666814ff4f651dff0b6e70ff0a6e2dff126810ff720c72ff750944ff770a08ff120467ff040358ff010000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff727272fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff797979ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71cb7fff212f1ff040004ff636363ffc0bfc5ffbdc02cff92bb3aff16c2c2ff18c356ff25bc26ffc11bbfffc01675ffc31410ff1f099bff080685ff010000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff808080fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff0f0f0ffe4e4e4fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff7a7a7aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71db8fff212f1ff040004ff454646ff898889ff89898bff8f8c8dff8a8788ff7a7979ff7f8080ff010202ff010100ff010102ff010000ff010000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff777677fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ffcdcccdfff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff797979ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71db8fff112f1ff040004ff242424ff464646ff474747ff484848ff464545ff3e3e3eff414242ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff3e3e3efff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff6f6e6fffe6e6e6fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff707070ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff112f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff030303ffefefeffff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff686768ff8a898afff0f0f0fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff0e0e0eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff112f1ff040004ff000000ff020202ff010101ff000000ff010101ff040404ff010101ff010101ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff969696fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff686768ff686768ffa7a7a7fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffb4b4b4ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff212f1ff040004ff343535ff303030ff6a6a6aff616161ff303030ff848484ff4b4b4bff494949ff858585ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff2a2a2afff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff686768ff686768ff696869ffcfcfcffff1f1f1fff1f1f1fff1f1f1fff0f0f0ff3f3f3fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71db8fff212f1ff040004ff1d1e1eff0c0c0cff383838ff3b3b3bff0b0b0bff464646ff272727ff262626ff353535ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff717171fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff686768ff686768ff686768ff6e6e6effe3e3e3fff1f1f1fff1f1f1ff9f9f9fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71db8fff113f1ff040004ff000000ff000000ff010101ff000000ff010101ff010101ff010101ff000000ff010101ff010101ff010101ff000000ff010101ff000000ff000000ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffa8a8a8fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff686768ff686768ff686768ff686868ff888888fff2f2f2ffb6b6b6ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff113f1ff040004ff0d0d0dff1b1b1bff303030ff030303ff3a3a3aff5e5e5eff303030ff2f2f2fff424242ff282828ff272727ff303030ff585858ff010101ff151515ff383838ff030303ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff797979fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa8a8a8ff686768ff686768ff686768ff686868ff686768ff676667ff020202ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff112f1ff040004ff454545ff161616ff6a6a6aff131313ff282828ff666666ff414141ff404040ff1d1d1dff0d0d0dff767676ff6c6b6bff333333ff383838ff404040ff161616ff070707ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff353535ffa4a4a4fff2f2f2fff1f1f1fff1f1f1ffa8a8a8ff686768ff686868ff686768ff4c4b4cff1d1d1dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff212f1ff040004ff000000ff0c0c0cff0a0a0aff000000ff000000ff060506ff030303ff030303ff000000ff080808ff000000ff0a0a0aff000000ff000000ff0d0d0dff0e0e0eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0d0d0dff606060ff7e7e7eff565656ff353535ff2c2c2cff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71db8fff212f1ff040004ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff010101ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff010000ff010000ffb71db8fff113f1ff040004ff353535ff2a2a2aff6a6a6aff0f0f0fff5f5f5fff7a797aff484848ff454545ff5c5c5cff282828ff626262ff6b6b6bff404040ff272727ff434343ff4b4a4bff060606ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff113f1ff040004ff1e1e1eff111111ff3c3c3cff060606ff000000ff3f3f3fff262626ff262626ff010101ff0f0f0fff3b3b3bff3d3d3dff000000ff151515ff262626ff101010ff080808ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db8fff112f1ff040004ff141414ff131313ff3f3f3fff222222ff2c2c2cff222222ff3a393aff1e1e1eff010101ff2a2a2aff181818ff292929ff202020ff060606ff2e2e2eff262626ff1d1d1dff000000ff272727ff202020ff303030ff080808ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb81db7fff212f1ff040004ff2d2d2dff191919ff1c1c1cff161516ff474747ff333232ff393939ff060505ff121112ff131313ff0d0d0dff2b2b2bff1d1c1cff070707ff3f3e3eff1f1f1fff262626ff010001ff262525ff2f2e2eff373637ff100f0fff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000000ff010000ff010000ff000000ff000000ff000001ff000001ffb71db7fff813f8ff860f86ff841084ff840f84ff850f84ff850f84ff850f84ff850f84ff840f84ff840f84ff841084ff840f84ff840f84ff841084ff850f84ff841084ff841084ff841084ff850f84ff850f84ff850f84ff850f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff850f84ff850f84ff840f84ff840f84ff840f84ff830f84ffdc18dcff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b0e9aff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff3f0a3fff410d42ff420d42ff831383ff7f0d7fff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff090909ff601360ff7a097aff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff010101ff5c0e5cff7a097aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5c0e5bff7a097aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff2d2d2dff3c3c3cff121212ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5b0e5bff7a097aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff595959ffd7d7d7fff1f1f1fff1f1f1fff1f1f1ffa8a7a8ff1f1f1fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5b0e5bff7a097aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff747474fff0f0f0fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffdfdfdfff212121ff000000ff000000ff000000ff000000ff000000ff000000ff5b0e5bff7a097aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff2b2b2bfff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffafafafff000000ff000000ff000000ff000000ff000000ff000000ff5b0e5bff7a097aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff858585fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff1c1c1cff000000ff000000ff000000ff000000ff000000ff5b0e5bff7a097aff6f6f71ff809125ff10986dff5a5259ff9b0f34ff0f0577ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffb4b4b4fff1f1f1fff1f1f1fff1f1f1fff0f0f0ffedededfff1f1f1fff1f1f1fff1f1f1fff1f1f1ff3c3c3cff000000ff000000ff000000ff000000ff000000ff5c0e5bff7a097aff4e4e4eff696869ff626060ff303131ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ffa5a5a5fff1f1f1fff1f1f1fff1f1f1fff1f1f1ffa2a2a2ffeeeeeefff1f1f1fff1f1f1fff1f1f1ff3a3a3aff000000ff000000ff000000ff000000ff000000ff5c0e5cff7a097aff000000ff000000ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff626262fff1f1f1fff1f1f1fff1f1f1fff1f1f1ff888788ffa2a1a2fff0f0f0fff1f1f1ffe1e1e1ff030303ff000000ff000000ff000000ff000000ff000000ff5c0e5cff7b097aff232323ff4f4f4fff414141ff383838ff2e2e2eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0a0a0affd0d0d0fff1f1f1fff1f1f1fff1f1f1ff888788ff686768ffc4c4c4fff1f1f1ff737373ff000000ff000000ff000000ff000000ff000000ff000000ff5c0e5cff7a097aff0a0a0aff0c0c0cff262626ff171717ff1b1b1bff151515ff161616ff131313ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff2a2a2affd2d2d2fff1f1f1fff1f1f1ff888788ff686768ff706f70ff848484ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5c0e5cff7a097aff191919ff212121ff252425ff212121ff0c0c0cff3b3a3aff1a1a1aff1c1c1cff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0d0d0dff686868ffb0b0b0ff666666ff404040ff1a1a1aff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5c0e5cff7a097aff171717ff1e1e1eff363636ff232323ff212121ff333333ff191919ff242324ff010101ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5c0e5cff7a097aff151515ff282828ff232323ff292829ff0e0e0eff2e2e2eff0e0e0eff222222ff090909ff111111ff0e0e0eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff5c0e5bff9d0d9cff531953ff4f134eff612560ff511751ff4b104bff501550ff4b104aff591f59ff4c114bff571c56ff541853ff420742ff420742ff420742ff420742ff430742ff420742ff420742ff420742ff420742ff430742ff420742ff420742ff420742ff420742ff430742ff420742ff420742ff420742ff420742ff851086ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003606367f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f1f051f7f2005207f3108317f400840ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff050505ff310a31ff3d043dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0b0b0bff131313ff000000ff000000ff000000ff000000ff2d072dff3d043dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff6f6f6fffeaeaeafff1f1f1ffa5a5a5ff080808ff000000ff000000ff2d072dff3d043dff000000ff000000ff000000ff000000ff000000ff000000ff2b2b2bfff1f1f1fff1f1f1fff1f1f1fff1f1f1ff6e6e6eff000000ff000000ff2d072dff6c336cff567c56ff49242fff03011dff000000ff000000ff000000ff565656fff1f1f1fff0f0f0ffdbdbdbfff1f1f1ff959595ff000000ff000000ff2e072dff460d45ff242424ff191919ff000000ff000000ff000000ff000000ff1b1b1bffe8e8e8fff1f1f1ff868586ffe5e5e5ff555555ff000000ff000000ff2e072eff450d45ff1e1d1eff171717ff1f1f1fff0b0b0bff000000ff000000ff000000ff424242ffbebebeff656565ff434343ff000000ff000000ff000000ff2e072eff470f47ff272727ff1e1e1eff222222ff131313ff070707ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff2e072dff3c093b7f2c0e2b7f2709277f2609267f290c297f2a0d2a7f2103217f2103217f2103217f2103217f2103217f2103217f2103217f2103217f2103217f3105327f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001502153f0f020f3f0f020f3f0f020f3f0f020f3f0f020f3f0f020f3f1403143f200420ff020202ff020202ff020202ff050505ff070707ff020202ff180518ff1e021eff000000ff000000ff0a0a0affcececeffdededeff1d1d1dff160316ff4b374aff190f19ff000000ff1c1c1cffeeeeeeffcdcdcdff3a3a3aff170316ff341834ff1d1d1dff090909ff000000ff404040ff2a2a2aff000000ff170316ff1a05193f1304133f1406143f1001103f1001103f1001103f1001103f1402143f00000000000000000000000000000000000000000000000000000000000000000901091f0701071f0701071f0801081f100210ff030303ff6e6e6eff130913ff2d1e2cff090909ff898989ff190f19ff0b020b1f0901091f0800081f0900091f0801088f231e238f120a128f2c262c8f1a131a8f
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AppleBipBop.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AppleBipBop.asset.meta
new file mode 100755
index 0000000..1605df1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AppleBipBop.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6270438318e8c9f4da5ff28f426d52ed
+timeCreated: 1592334546
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AzureLlamaDrama4K.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AzureLlamaDrama4K.asset
new file mode 100755
index 0000000..e79f841
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AzureLlamaDrama4K.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Https-HLS-AzureLlamaDrama4K
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 0
+ _path: http://amssamples.streaming.mediaservices.windows.net/634cd01c-6822-4630-8444-8dd6279f94c6/CaminandesLlamaDrama4K.ism/manifest(format=m3u8-aapl)
+ _hints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: 684732ff664533ff624230ff61402fff5d3d2bff573624ff593824ff54331fff5a3925ff583725ff573624ff5d3b27ff593826ff5d3d28ff5a3925ff62412cff725037ff5c3c28ff5c3b27ff5b3a28ff5b3a28ff5f3e2bff5c3b27ff5c3c28ff5d3c27ff573622ff573827ff5a3a26ff5e3e28ff63412bff5f3e29ff5b3a26ff5f3c28ff5c3a27ff593827ff603d29ff5a3826ff5f3c29ff5f3c28ff613f2aff5b3923ff5a3722ff55321fff5c3a26ff5a3824ff583622ff583522ff5a3822ff583620ff63402dff573622ff502f1bff5b3923ff53301dff66442bff6c482dff5b3822ff57341fff573421ff54311cff54321eff5a3722ff593621ff553220ff593623ff5f3c27ff4d2c1dff593624ff5b3826ff5a3723ff4b2b1bff563322ff56331fff573420ff563320ff573421ff543420ff53321fff583523ff573420ff583522ff55321fff573723ff573622ff53301cff5e3d2bff4f2c1bff543120ff603d29ff52301bff4d2d18ff51311dff54331fff482814ff4f2d19ff55331fff51311eff492916ff4d2d17ff472713ff4c2b17ff472716ff4c2c18ff4a2a17ff4c2b17ff593623ff553524ff502f18ff4d2d1aff4c2c19ff513019ff53321fff4a2815ff55331cff4e2c18ff4d2c1cff4e2b17ff5c3924ff4d2a17ff452414ff452615ff54331dff492918ff492917ff53311dff4e2d1dff52311fff472618ff64432dff65442cff62412fff61402cff63422eff5d3c27ff5d3c28ff57351fff624029ff5a3926ff593927ff61402bff5f3e2aff5d3c28ff5c3c28ff603f2bff61402cff5f3f29ff61412bff674633ff60402dff61412dff5a3926ff61402bff613f2aff5f3e2aff6a4a35ff704f39ff5f3b26ff623e27ff603d28ff694732ff603d2aff5f3c28ff65432dff603d2aff5b3827ff5d3c28ff5e3d26ff63432aff5f3d29ff5e3c26ff603e29ff69472fff603d28ff62402bff64422cff5e3d29ff5c3824ff5c3924ff5d3a27ff5c3824ff593622ff6b4834ff593622ff52301fff563420ff5a3823ff6e4b33ff573523ff5d3924ff5c3927ff603d2bff623d28ff502d1dff593421ff5c3728ff573421ff573420ff62402cff593620ff5b3827ff563322ff664430ff5e3c28ff593723ff55341fff5c3a25ff583725ff5c3c27ff563321ff573521ff563622ff573722ff5a3723ff5e3c29ff573522ff5c3a27ff54321eff4f2c1bff4d2d19ff502f1bff50301cff4b2b14ff4e2c1aff512f1dff4a2818ff4d2c1aff4c2c18ff4c2b17ff4c2b18ff472713ff492917ff462614ff4a2a16ff442615ff452413ff52311cff3f2012ff3f2110ff472714ff56341fff4c2d19ff502e1aff573521ff522e16ff442214ff4b2917ff54311cff482616ff4a2918ff472612ff4e2e1cff4a2a19ff442214ff52301eff4a291bff4d2c18ff674732ff694934ff7f5f46ff60402cff61412cff5c3b27ff5c3b27ff67442eff795840ff957254ff765537ff65452eff6d4d36ff60402fff63422eff63432fff63432fff674731ff654530ff6c4c35ff654430ff664531ff603f2dff6a4832ff65432eff60402bff603f2bff674632ff64412dff735139ff815c42ff6b492fff694730ff66442dff714d33ff63402aff64412eff5d3d29ff63432dff60402eff613f2bff63402aff65432fff64422dff694732ff624028ff64432cff64442cff69452eff66452fff62402bff67432dff5c3926ff623f2cff5a3824ff65432dff5e3d26ff603e28ff5d3b25ff5b3923ff613f2aff603e27ff64422bff563721ff815f44ff5b3925ff603b28ff623f2cff5e3b28ff5f3d29ff5c3928ff5b3927ff613f2bff613e2aff5f3d29ff64422eff603d27ff5f3d27ff5d3c28ff624029ff583622ff5e3c28ff5c3c28ff53331eff65432eff543321ff553320ff593723ff512f1bff53301eff472713ff472713ff4d2c19ff4f2f1aff523220ff4f2d18ff57341fff4b2a19ff563520ff52321eff53321fff4b2b17ff4a2916ff492817ff4c2b1aff4e2c17ff4f2f1aff482916ff452715ff482816ff472713ff512e19ff4c2c1aff543019ff53321cff5f3a23ff56321bff4a2714ff4e2a15ff4b2917ff54341eff482815ff442415ff4c2b1aff4c2b1bff51301fff4e2d1cff4b2a18ff6d4a34ff714f39ff6e4c38ff684832ff63432dff66432dff613f27ff64422aff67452dff6b4931ff77553eff6e4c34ff684630ff644430ff63422fff644330ff63422fff654531ff644430ff684733ff6a4a36ff654532ff6a4c33ff674732ff6d4e33ff61402cff63422eff64442eff664531ff694934ff654430ff694730ff6e4b35ff664531ff7f5d42ff65422dff62402bff66432fff6d4a32ff644129ff63402eff65422dff64412bff66442dff694632ff66442aff735037ff704e35ff69462fff704e36ff67442dff67442dff63412bff66442eff684630ff684630ff613e28ff64412bff825c40ff684530ff66442eff623f2cff64432eff5c3c28ff613e2dff63402dff65422fff5e3b2aff603d2cff613e2dff603d29ff65432eff674431ff63402fff64412fff603e2aff75533dff66442fff62402cff5b3825ff5d3a27ff674431ff62402cff613e2aff5e3c26ff583420ff5e3926ff573421ff543320ff502f1dff5c3c28ff563624ff51311eff50301cff4d2d17ff5a3a24ff50301cff482915ff543523ff492917ff502f1aff4f2f18ff4a2a16ff4f2e1cff4f2f1dff4f2e1cff4b2c18ff4e2f19ff4c2b19ff4e2c1cff452614ff4a2a15ff4b2a17ff512e1bff402111ff432312ff523018ff4d2d19ff4e2d19ff4f2f1dff4f2f1dff452616ff492917ff472917ff482a19ff462514ff4f2f1bff482917ff704d38ff714e39ff6a4a35ff694935ff75543eff7c5a40ff69462fff68452dff835f3fff7c583dff63432eff836148ff694833ff654531ff674731ff634231ff654531ff6a4832ff6f4f38ff644432ff654531ff6c4b36ff674631ff6c4936ff674633ff694835ff674731ff694936ff694935ff684834ff684833ff674632ff6b4b34ff694932ff745339ff694932ff734e38ff694731ff694731ff6d4b33ff694731ff694630ff6d4832ff775339ff6f4c37ff704d36ff745337ff66432dff6c4a31ff694731ff6b4834ff6b4834ff6b4834ff7b5842ff73513bff66462fff6a4933ff684731ff6a4832ff694832ff6e4e38ff66462fff6a4731ff694630ff684632ff6d4a36ff664332ff6f4a37ff6a4632ff6e4b35ff704e37ff63402cff6a4834ff6f4d39ff704d38ff603e2bff674231ff613c2bff694733ff664430ff5d3b27ff613f2cff613f2bff5e3b29ff5f3e2bff64422eff593623ff54311eff563624ff4e2d1cff533420ff553221ff4e2d1cff4b2a16ff4d2c19ff4d2d19ff4f2e1cff51301eff51311eff4b2a1bff482718ff4c2c1aff4a2a17ff4f2f1cff482a1aff512f1dff51301eff482816ff4a2a18ff51311eff502f1cff4a2b17ff4d2e18ff472714ff4b2a17ff472715ff492916ff492917ff4a2a19ff4b2a1bff462817ff462818ff4b2b19ff472814ff462819ff412515ff482a17ff4a2c1cff74523bff73503aff826145ff6e4e3aff73503aff6d4b34ff6a4730ff79563aff6a4732ff7a593dff694a35ff6b4934ff6a4b33ff6f4e36ff694833ff6b4b35ff725036ff7b593dff6c4b35ff684732ff664531ff6b4935ff78563fff704e38ff6c4b37ff6a4c35ff6f4e36ff6a4936ff6c4c36ff72543fff6a4a35ff6c4c34ff694934ff674633ff6b4934ff704e38ff876345ff825e43ff6c4936ff7c5a40ff6b4934ff724e34ff6c4934ff724f39ff6d4b37ff6b4835ff6f4e36ff755338ff704e37ff6e4b37ff79573cff735137ff735138ff714e38ff6c4934ff75553bff694933ff6c4c36ff6d4d36ff6a4a33ff694832ff6a4933ff6e4b35ff73513bff6b4935ff6b4834ff704e35ff714d36ff77543aff75533aff745238ff735039ff694731ff63432fff63422eff67452fff6b4632ff6b4635ff65422eff6a4732ff65422eff684532ff664430ff65432fff6a4831ff5e3e2aff613f2aff5d3a27ff563520ff563620ff54321fff553421ff523221ff492a17ff54341fff502f1cff492816ff52311fff50301eff4b2a19ff492919ff4f2f1dff4e2d1bff52311fff573521ff472817ff502f1bff50301cff4f2f1bff52311eff482814ff502c16ff6d482bff57351dff492814ff54331aff432414ff492919ff472819ff442618ff432416ff432617ff50301fff51301dff442719ff452716ff462817ff462719ff7f5d43ff7a583eff755339ff7a5840ff957255ff66452dff6d4a30ff69482eff7d5d41ff8a6b4cff7e5d36ff7f603eff725231ff8e6d4bff735236ff76563cff705036ff74543cff6d4e38ff78583eff6e4b35ff87654dff6f4d38ff6b4b34ff71523aff705137ff725137ff876648ff6b4b34ff815f40ff715038ff6b4b35ff725039ff74523bff6e4c36ff7d5a3fff7a563eff6e4b31ff75543aff714f39ff84624aff7c5a3fff75523dff6a4a33ff73503bff6f4d37ff704d39ff6d4a36ff714e38ff75533bff6f4e39ff694932ff72523bff6f4d35ff6d4a34ff6e4c36ff78573fff6a4931ff705039ff6f4d37ff704e38ff714f36ff7a573eff714f37ff715036ff77553eff714e37ff78583fff694933ff74533bff6f4d32ff684532ff6b4836ff63432eff77573fff6e4b36ff78553eff624029ff684630ff6a4731ff63412aff6f4d35ff6b4930ff65432bff5f3d27ff583725ff5c3922ff603d29ff52321fff533220ff563322ff583621ff563320ff512e1aff5f3d28ff512e1aff4f2f1dff50301dff543320ff51311dffa58361ff4f2c18ff593723ff5c3b27ff472814ff55331eff4f2f1cff4f2f1dff4d2c1bff51311dff50301cff56331eff55321eff502e16ff52301cff4f2e18ff3e2213ff52311eff51301dff462817ff472919ff452715ff533522ff4c2d1bff432514ff462817ff432515ff462818ff79573eff7d5b3fff704f3cff7d5b41ff75533bff6f4d35ff7a583fff8d6b4fff6d4e35ff6e4e38ff7a5a3fff745438ff826345ff725239ff785839ff75553dff77573eff87674cff7e5e40ff7b5940ff6d4d37ff88664fff835f41ff76543cff815f46ff78563bff805e41ff775539ff775439ff714f34ff7f5b3dff775639ff846043ff7f5d40ff6f4e36ff755137ff785337ff7e5a3dff735036ff886345ff75533cff836144ff6f4f38ff896748ff73523dff724f38ff765539ff78553dff7c5b3fff7a563dff825f45ff805e44ff725039ff77553eff74533cff74533eff73513aff77543bff77553aff85634aff714f37ff714e37ff75533aff724f39ff714e37ff77553dff704e37ff71513bff73533cff75553cff75533bff79573cff77553eff78563eff7b593fff674432ff795336ff8a6748ff68452fff6c4a31ff745239ff65432bff68462fff6f4c35ff613f28ff5f3e25ff694327ff5c3c28ff583620ff623e29ff543319ff573620ff5b3923ff5e3c26ff56361fff593922ff5a3721ff563521ff6a4731ff5b3b25ff573723ff563622ff553422ff553423ff53321fff4d2e1eff543422ff522f1eff4f2d1cff4d2c1cff50301dff4f2f1aff5f3d29ff53301aff5a3925ff4b2915ff4f2d1aff4c2a15ff4e2d19ff502e19ff472615ff492918ff482916ff4c2b18ff5c3824ff422213ff4e2e1cff482816ff795741ff795742ff6f4f37ff78563aff714f36ff6e4e39ff785640ff75533bff836246ff75553dff6e4e35ff785a3eff7f5d41ff7e5e47ff816043ff7f5d45ff806047ff826245ff7a5a3fff7c5a3fff7c5c42ff87664cff896649ff795840ff7a593eff7c5b40ff78563bff79573cff77563cff79563fff7d5c3fff7c5c41ff74543bff8b674bff78543bff825f42ff8a664aff7b5b41ff836147ff7c5b3eff846147ff7c583bff7b593fff78573dff7c583dff7d573eff825f42ff7a583bff8a684eff755339ff735135ff735138ff6f4e38ff815f45ff76543bff77543cff74523aff906c4dff755436ff724f38ff77543cff7a583cff765438ff7d5b3fff745237ff735036ff755339ff77573dff75543aff77563bff73513bff745239ff7b5941ff815f43ff704e38ff6a4833ff68472dff846348ff78563affa98762ff745136ff755334ff654229ff79563aff926e4cff5a3724ff5e3b25ff583724ff5c3a23ff5f3b22ff5f3e25ff573721ff603d26ff5b3923ff68452dff7b5739ff5f3c21ff583720ff7c5942ff563524ff563422ff5a3925ff543221ff593724ff54321fff66442dff5e3b26ff5d3a26ff563420ff5d3b26ff5d3c27ff4f2e1aff4b2a17ff583721ff4f2e1aff4f2e1aff502e19ff623d26ff54341dff52311aff4d2d19ff523220ff442513ff472817ff4b2c1cff4a2a16ff50301eff50301cff76543fff76533fff795944ff76543eff71513aff75553aff71533bff72513cff70513bff816047ff73533dff73533cff75553dff87654aff7c5a41ff77563fff785944ff795942ff7d5c42ffbf9d7aff926f51ff916d54ff785840ff714e37ffd0b08eff7b5c3eff76543bff725439ff715136ff8e694dff7d5d44ff815f42ff72513aff7d5b44ff735339ff76543eff836142ff77573eff937254ff7e5c42ff7c5c42ff79573dff75533cff7a583eff77553cff836145ff805e43ff836244ff75533cff7b5940ff785840ff7a5a42ff937052ff795641ff805c43ff78563cffa28063ff815f45ff836044ff73533bff7f5d44ff815f44ff805f42ff715037ff75533bff79573fff745239ff76543bff76543bff745139ff725135ff765436ff7c5a44ff6c4a33ff714f35ff765232ff705133ff694831ff7a583dffac8c64ff6b482bff6c4a30ff67422dff6a452dff62402bff624028ff5b3922ff5c3c24ff58361dff5c3a26ff69472cff5b391eff5f3d25ff5c3923ff704d34ff67442dff5b3822ff694833ff603d29ff563424ff6c4931ff5c3a26ff65422dff613e29ff5b3825ff6a4832ff603d28ff5c3a23ff6f4d33ff593723ff573521ff54311dff4b2815ff4e2e1cff5c3a25ff54321cff53301cff4b2815ff4e2c19ff4f2c1bff4d2c18ff472714ff52301bff462614ff432211ff492a16ff452715ff4a2b19ff795947ff725240ff71513fff755540ff76563eff8d6b51ff816149ff755239ff7c5c43ff78573cff8b6b4dff8b6a4eff8a684fff755541ff8c6a4eff7d5c43ff805e47ff8d6d54ff74543dff795840ffa08160ff73533cff7c5a41ff8e6d50ff7b5a42ff805d45ff836145ff8c684cff7d593dff826244ff7b5b40ff866448ff7e5c41ff7c5a43ff7d5b41ff916f52ff836145ff8a6749ff76563dff75553bff79593fff75553dff76553fff785841ff7b5b44ff73533dff785840ff7a5a41ff76563cff836146ff7e5c45ff7a583eff8a694dff836049ff7d5c44ff7a5a3fff7e5d44ff7c5b43ff74533dff72533cff7b5c43ff795740ff7b5842ff73503aff76553fff71513bff715136ff78583fff6d4d32ff805e43ff78583fff7e5e45ff84624aff6a4833ff6a4832ff704d35ff674530ff704e37ff694731ff6f4d35ff714f37ff724f38ff6d4931ff845f46ff704e30ff745037ff69472eff624029ff634029ff5c3928ff714f38ff5e3c27ff69472eff6f4b33ff5f3c26ff745139ff704d36ff5e3c28ff6d4a36ff5f3c26ff6e4c32ff624029ff68452eff78553dff6a4831ff603e28ff623f29ff5b3923ff603d25ff735038ff573520ff5e3c26ff65422dff5d3a24ff53301cff5f3c27ff5c3926ff5b3925ff593622ff57351fff4d2b16ff522f1eff543220ff4e2b19ff4d2a17ff563622ff502f18ff472818ff795943ff7d5d49ff775741ff785840ff785841ff795943ff816148ff73533cff75553eff785842ff74553dff75553dff775942ff77563eff7a5b44ff7c5b41ff836048ff7b5d44ff836247ff97765eff83634bff775740ff7e5d45ff775740ff7b5b43ff76553dff76563fff826247ff816042ff8c6848ff84624bff7c5b43ff836145ff846446ff81624aff805e47ff826249ff95765cff795942ff87664cff8f7051ff785740ff75553dff7e5e45ff795844ff7c5c45ff785940ff7a5a40ff7c5c43ff795945ff7f5e48ff7b5a43ff7b5d44ff89684aff7d5d45ff815f47ff7e5e45ff775741ff84634bff856548ff86644affb18f6aff7c593eff78563dff75553eff73533cff73533fff715139ff74543cff846249ff73533aff72523aff7b5a40ff8b684dff745036ff7e5a3fff7b5841ff694634ff6c4933ff7b5942ff7d5a42ff6f4d33ff68452fff714f34ff623f29ff5f3c25ff643f26ff5e3c25ff6a4730ff624027ff714e32ff704d35ff6a4830ff62412aff6e4c34ff6f4c34ff694831ff714f39ff805c45ff755239ff634129ff64422cff66442cff68452eff6a4831ff78563eff5b3825ff725036ff5c3922ff5e3d27ff553123ff54321fff613e29ff593825ff67432aff613e2aff67432cff55331cff54321eff58341eff573320ff5d3925ff4e2c19ff5a3722ff573420ff522e1dff593620ff68422cff7d5c46ff795942ff755640ff765740ff775741ff795941ff77573fff7b5b43ff75553dff765641ff75553cff785840ff806045ff967358ff806046ff826349ff785843ff775940ff785840ff927258ff8e6e52ff7c5c44ff84644bff7b5b43ff795940ff7f6046ff886850ff85644aff866449ff836349ff8d6c4fff84644bff8a6952ff7e5d46ff8a694eff8b6a4fff907056ff7b5b46ff7d5d45ff846249ff806047ff836045ff97785eff785843ff7d5d45ff7e5e46ff907050ff7d5d44ff7d5d46ff7e5e4aff7c5d47ff7b5d46ff80624aff7c5c45ff7c5c45ff7a5a43ff7c5c46ff7c5c43ff836349ff785840ff7e5b41ff86644cff77563dff77573dff76553fff75553eff71503eff755540ff73533eff7a573fff73543bff76563fff8e6e53ff724f37ff88664aff74523aff6e4c34ff734f36ff6b4933ff6d4a33ff68462fff65422dff78563dff6e4c33ff704d37ff704d32ff7f5d41ff7b573cff916b54ff79543aff623f27ff6d4b31ff76543cff644228ff815f45ff6a4831ff6a482eff64402aff7b563dff6c4a31ff65432cff65432aff65432aff6c4931ff69472fff6b4931ff6c4a33ff6d4a34ff5c3926ff613c25ff603d25ff6e4b37ff5f3d28ff704b35ff5e3a26ff5d3b26ff5b3825ff5e3c26ff5b3825ff5f3c29ff5a3525ff583422ff512e1dff593624ff4f2c1aff512f1fff62402eff4f2e1fff755740ff765841ff775941ff7c5e46ff7e6147ff785b43ff795c45ff7c5f47ff7b5b42ff8a6b4cff7f5f43ff826249ff816143ff84634aff806149ff7b5c44ff7f5f46ff8c6e51ff88694fff7f5f44ff856249ff86654eff85654aff7f5f43ff8f6f53ff7c5c44ff88694fff89694eff7f5f46ff7a5a3dff7e5e43ff7f6148ff816149ff826248ff806048ff87674eff89694fff82624bff7e6147ff816149ff7d5d45ff88694cff84644cff7f5f46ff84644eff81614cff84644aff866552ff94745bff886751ff83634dff896b56ff866850ff86664eff84644bff7e5e48ff7d5d42ff836348ff7b5a42ff7a5b44ff795941ff785842ff7b5942ff7d5b41ff7c5c41ff7e5f43ff795940ff75553cff7f5f46ff7f5c43ff7e5b44ff74523aff745239ff6f4d35ff7e5c41ff77553eff7d5b40ff6c4a33ff6f4d34ff694934ff6e4e36ff6d4b30ff735138ff66442fff6b4933ff715035ff664431ff6a4932ff67452eff69462fff68462eff704c32ff7b583dff744f37ff77553aff77553aff6d4b33ff684632ff664430ff66442eff66432cff6c4a31ff69472eff735139ff6f4d35ff5d3b25ff6f4b36ff6b462dff603d27ff68452eff5b3723ff5e3c26ff583522ff64422eff5a3724ff5a3721ff5d3a27ff64422dff5a3823ff603d28ff5c3927ff5d3a28ff5d3b25ff623f29ff613f2bff5e3b27ff61402eff60402dff7c5c47ff92725cff896b54ff7b5d49ff82644eff7f5f48ff80604aff84644eff7e5e46ff82624cff7f5f48ff7b5a44ff7d5d45ff7b5b44ff85654dff85654dff82624aff85654bff87674fff8a6b52ff85654cff7d5d44ff85654dff82624bff83634cff7d5f47ff82644eff886b53ff886a51ff7b5d46ff866850ff83634cff816148ff806049ff85634bff80604bff816048ff89674fff8e6e56ff88664eff826248ff8c6c53ff88674fff8f6f57ff836349ff846448ff86694fff8f7159ff886a53ff8d6f59ff8d6f59ff8a6c57ff876952ff81634cff80624bff83644bff8c6c53ff806048ff806047ff7a5a41ff85634bff7c5c43ff806047ff7d5d46ff7e5f46ff806048ff76563fff75553fff785842ff76563fff74543fff74513dff704e3aff73503dff6f4c3aff70503bff6a4a31ff73523cff74523aff674731ff6c4c33ff725037ff846248ff6a472fff69492fff755338ff826044ff714e34ff69452fff6e4b32ff65412dff67452cff7e5c42ff6f4c36ff6d4a35ff74523bff6a4832ff704d36ff61412dff856348ff624130ff75553cff6d4a32ff63402aff704e35ff664330ff5f3c26ff623f28ff633e2aff65412cff6f4d35ff5c3a24ff5c3a26ff5b3a26ff6f4c36ff704e35ff684832ff674731ff63422cff603c26ff674530ff63402dff5b3b27ff593827ff5d3d2bff5c3c28ff5b3b27ff5e3d2bff82644cff866851ff84654fff84664fff8c6e57ff85664fff84644dff8a6a54ff7f5f48ff82624bff80614aff82634cff82624aff7f5f48ff7d5d47ff8d6d54ff7e5e45ff8d6e53ff87674fff86664eff94745dff8c6d56ff866651ff83644eff876851ff83654eff886b53ff886952ff896b53ff886a51ff84664fff907158ff85654cff866750ff84624dff876751ff8a6952ff84634cff86654fff856550ff8e6e57ff86684fff876950ff886a53ff886a53ff886a55ff896c53ff8b6d56ff876953ff8c6f58ff8c6e57ff896b54ff8b6d55ff8b6e55ff876a51ff8c6e57ff896a52ff886952ff85654eff775840ff7f5f46ff7c5c44ff7f5e45ff816148ff7a5a41ff7e5e44ff816148ff86664dff785940ff775840ff7f5e46ff715138ff71503aff7e5c45ff7c5a43ff7d5d43ff705037ff654430ff6b4c35ff684832ff6b4a34ff6d4a34ff6f4f37ff694933ff6f4c34ff6a4933ff694932ff79553cff714f37ff735136ff6a4632ff735137ff78563cff7f5d43ff724f39ff694633ff795740ff704d36ff78583fff6d4a35ff6c4b34ff75553dff7c5a3eff674532ff704e38ff704e36ff603e2cff674532ff61412bff64432eff63412cff64422cff613f2bff64422cff5f3f2aff6b4a32ff6c4c36ff6c4b35ff664530ff654632ff654532ff644332ff60402cff684733ff644430ff63432eff664531ff64432fff876952ff896c55ff8b6d56ff876952ff876a53ff886a53ff896c55ff8d6f59ff8c6e57ff8a6c55ff80624cff856851ff80604bff886852ff83634dff896952ff886851ff876954ff896b55ff8d7057ff8c6e55ff8c6f55ff866853ff846651ff846652ff8d6f58ff856750ff886b53ff896b54ff907058ff8c6e57ff886a56ff876952ff896b54ff86654aff8f6e56ff8d6d56ff8c6d55ff90725bff93755eff896b54ff8b6d56ff8a6d56ff8a6c55ff8d6f58ff8b6d59ff8e7059ff8b6d55ff8a6c57ff8d6f58ff8c6f59ff8a6c57ff8e705bff8e705bff8c6e59ff8b6d56ff8a6c55ff90725cff8a6c53ff876952ff80624bff84644aff886749ff7f5f46ff805e45ff7f5c44ff805e46ff7e5c43ff836549ff7d5d44ff7e5c41ff7f5d40ff78563bff815f43ff7d5b43ff74523aff815e46ff78563dff7b583cff725037ff714e3aff76543cff846044ff724e36ff714f37ff7d5a40ff6d4c36ff73513bff75533aff6e4b34ff6a4831ff745139ff74513bff74523aff6e4b36ff74513cff6e4d39ff6f4d39ff6b4835ff705038ff6a4a34ff74543eff78583eff6a4a34ff664531ff684833ff78573eff6c4935ff6d4b37ff6f4e39ff674431ff684833ff664431ff674632ff674733ff6a4a36ff674632ff654530ff674733ff6a4a36ff674733ff684834ff674632ff654430ff674733ff664630ff795941ff694834ff866953ff886a54ff896b56ff866a55ff846854ff856750ff8a6c57ff8c6e59ff896b56ff8a6c58ff8a6c57ff886a55ff876953ff886a53ff84664fff856851ff8a6c55ff8a6c55ff8b6f58ff8a6e58ff8b6f5aff876b56ff896e59ff886d57ff896c57ff896e58ff886c56ff8c705bff8d715cff8a6e59ff896e58ff896e56ff8c6d59ff876b56ff8a6e59ff886d57ff886c57ff896e59ff876b56ff876b56ff896d58ff856a54ff8e725dff876c56ff896d58ff896e59ff8b6f5aff8b6f59ff8b6f58ff8c705bff8e725aff8d7159ff8c705bff8c7059ff8b6f58ff957962ff896d56ff8b6f58ff8f715aff8b6e57ff83654fff80624eff83644dff86664fff82624bff86664dff7c5c43ff7c5f46ff7a5c42ff7a5a41ff7a5a43ff7a5940ff78563eff7f5e43ff7c5a40ff725139ff7a5a41ff76543fff765538ff7f5d43ff6f4e38ff775740ff6e4d38ff75543fff75553eff75543dff7b5840ff76563fff77553aff735138ff714f38ff75523bff76563eff6f4f38ff7b5b42ff73533bff74543bff6d4d37ff6c4c37ff6c4c39ff76533dff71513bff6f4f37ff704f3aff745238ff725138ff6e4b2fff7f5940ff75553eff715037ff6d4b34ff6c4b35ff6a4a34ff6b4b35ff6a4a36ff6c4c36ff6b4b34ff6e4e3aff694935ff6a4a35ff6a4935ff684733ff694932ff684832ff6a4a34ff6a4a36ff6a4935ff6a4935ff907156ff9c7d62ffa88868ffb19273ffaa8a6fff8d6f58ff97785fff917259ff8c6d56ff8d6d57ff8b6c56ff8d6e5aff8c6d5aff8c6e5bff8b6d59ff8b6d57ff8b6d59ff8b6d59ff8c705bff8a705bff8a705bff8c715dff8b6f5bff896e5aff896e5aff886d58ff8a6e59ff8b705aff8c715cff896f5aff8a6f59ff8b6f59ff8b6e59ff8a6f59ff876c56ff896d58ff8a6e59ff896e59ff896e58ff8a6f5aff8a6e5aff8a6f5bff8a6f5bff8c715cff8b6f5aff8c705bff8b6f5aff8d715dff8b6f5bff8c705bff8f735eff8e725dff8f735eff8e735dff8d715bff90755fff8e725cff8d715bff8c705aff8b6f59ff886b56ff866853ff846652ff81634fff82644eff81634cff7e6048ff80634aff7b5c45ff7e5e45ff7a5a44ff7f5f44ff7c5d44ff785840ff7a5b40ff7c5c41ff7e5d45ff836448ff7a5a41ff846345ff77563eff73533aff7e5d46ff795944ff76573cff70513aff73543aff7e5d42ff73533bff73533bff795740ff735238ff75563dff73533cff75563cff75553aff72503bff73533cff72523cff70503cff74533dff6f4f3aff73533dff6f4f38ff71513aff6b4a35ff6e4d37ff6c4a35ff6d4c38ff785841ff6b4b34ff6c4b36ff6e4e38ff6d4d37ff71513bff705038ff73523cff71513cff704f3aff6e4d39ff72513dff6e4e39ff75553dff6c4c36ff6f4f39ff6c4c36ff6d4d38ff6b4b36ffba9669ffd1ad80ffc29c72ffd5b185ffdbb78affe2c28fffeac997ffebcb98ffe9c898ffe7c696ffefce9fffefce9effe8c89affedce9effedce9bffc7a778ffcbaa82ffb89776ff9e7e63ff8f7259ff8f725bff8c6f59ff8b6e5bff8c6e5bff896c5aff886e5bff896f5bff896f5cff8a705dff8b725eff8a705cff8b705bff8c705bff8c705bff8c705bff8c705bff8b6f5aff8d715cff8d715cff8e725dff8d715fff8b6f5cff8d715eff8d715cff8c715cff8d715cff8c715cff8e725dff8e725dff8d715cff8d715cff8e725dff8e725dff8e725dff8f735eff8f735eff8e725dff8e725dff8c705bff8b6f5aff886d58ff876b56ff856954ff846652ff80634cff80624bff7c5e47ff7b5e46ff795c44ff7a5c45ff795b44ff7b5c47ff7e5d49ff7f5f48ff795942ff77573fff76563fff775642ff785840ff785841ff7a5a40ff816146ff765842ff7c5b43ff79593fff76563eff7b5b40ff755640ff73533aff74543bff7f5e43ff77583fff715239ff76563dff83634bff755640ff785740ff7b5b43ff73533dff73533bff7b5a44ff705039ff6f4f38ff6d4e38ff6c4c38ff6e4d37ff6f4f38ff6c4c36ff6e4d39ff6f4f3aff6d4d37ff71513aff6e4e38ff6c4b37ff704f3aff72513bff77573fff72523cff71513aff71513dff6f4e3aff6f4e3aff6e503cff705039ff705039ff71513bff71513bff6c4c36ff8d715cff8a6e5bff8c705cff8a705aff896f59ffc5a683ffd6b58dffeccc9dfff0d09dffeed29cfff5d49ffff1d29fffeccd97ffe7c892ffedd09bffe7c995ffdfc290ffe7c997ffe5c998ffe5c996ffeacd9bffefd0a0ffe9cb9cffedcf9efff1d4a3ffebcd9dffdfc096ffc9a984ffb69674ff997e60ff8f725bff8e715bff8d735eff8d7363ff8c735eff8d715cff8d715dff8c735cff8e725dff8f745fff8e735eff8f745eff8f745eff8d745eff8d745eff8e7560ff8f7562ff8f7561ff8e745fff8f745eff8f745eff917661ff8f735eff907560ff907560ff907560ff8f735eff8f735eff8e725dff8d715cff8c705bff886d57ff886c57ff846853ff866854ff7f624bff7c5e47ff7b5d46ff7a5c45ff7b5d46ff785a44ff7b5e47ff785a43ff785a43ff785a43ff775740ff74543eff73533cff775740ff775740ff7e5e47ff795942ff775942ff755740ff785a43ff7e6148ff75563dff7f5f46ff775740ff78563eff826148ff7b5c40ff7e5e42ff7e5e44ff816148ff775741ff7b5b42ff7b5b42ff7f5f46ff816149ff7a5a42ff75563bff795940ff77573fff73533dff72523bff76553cff7e5c44ff8e6b54ff715139ff725239ff75553dff6f503aff846246ff79563fff72523eff73543eff7a5942ff74543fff7b5b42ff7c5a41ff73513aff77553dff76543eff714f3bff71513aff705039ff6e4b35ffa27c5effa17c5fff9d795eff9a785fff9a7961ffa07d62ff9d7a62ff9c7a61ff94735dff93725cff8f6d57ff917158ff92725cff92725eff94745eff91735dff90735aff997e62ffbea07dffb99875ffc1a380ffbb9c75ffc3a27affbf9e74ffddbe8fffd4b68affdec092ffdbbd90ffdbbd90ffd9bc8fffe1c497ffdbbc8fffddbb8effdfbf92ffe7c89cffddbd91ffaf8f6dffba9b7bffa08163ff92745cff90735cff937763ff927862ff8f7661ff8f7562ff917662ff927662ff937764ff957965ff937762ff937864ff937764ff917860ff927864ff927865ff917764ff917763ff907663ff907560ff8f745fff8e725dff8c705bff8b6f5aff886d58ff866a54ff856954ff82644dff80624bff7b5d46ff7a5c44ff7a5c45ff785a43ff795b44ff775a43ff765841ff775741ff76563fff775640ff785841ff765741ff755841ff765942ff755740ff785a43ff795b45ff785b44ff785a43ff7a5a43ff7a5c45ff765942ff795b43ff765942ff73553eff795b44ff785a42ff7c5e46ff7c5e47ff7c5e46ff765841ff775842ff75553fff73533cff785640ff75553cff73533bff73533dff75533bff78543eff78553eff74533cff755540ff795942ff977554ff7a573fff79573eff916f52ff836144ff7c5c41ff76573bff7c5a43ff7a5841ff7b5841ff815f47ff76533dff74523dff704e36ff724f39ff714e36ffa27b5dffc09a7cffa57f61ffa27c60ffad8767ffac8666ffa88364ffa88262ffa4805eff9e7a5dff9c775bffa48061ffaf896bffa58062ffb68c6dffab8566ffa88364ffb08e72ffa7876eff9b7c64ff927762ff917460ff917661ff90765fff907460ff93755cffad8d6effbd9e7affbf9f79ffccaf88ffebcda1ffedd4a3ffecd09dffe5cb96ffe9cf9bfff1d4a4ffd3b587ffd3b388ffc8aa7effdbbc96ffc4a57fffcaab83ffb99c73ffb3946dffb99a75ffccad88ffd0b08affbf9e7fff9e7e61ff8f745bff907561ff927663ff937865ff937865ff937865ff917764ff917764ff917764ff907560ff917661ff8f745dff90745fff8f735eff8d715cff8c7058ff92765fff8a6e57ff876a53ff83664fff7f634bff7a5d48ff795c47ff7b5d48ff765841ff785943ff795942ff76563fff75553fff765740ff74563fff795b44ff775944ff7a5c45ff775942ff775944ff775b44ff775b44ff795b44ff775a43ff7a5c45ff755741ff775b44ff755a42ff7b5d46ff795b43ff7e6047ff785b44ff775941ff775a43ff795c45ff7c5d46ff785842ff7e5e48ff76563fff7a5a41ff72523eff7e5d46ff785740ff7c5a43ff74533dff775640ff826347ff846248ff7b5a44ff7b5d45ff7b5d44ff7c5e47ff896951ff7e5d46ff795941ff7a5941ff826148ff916f55ff7b5941ff815f47ff937155ff7a5840ff89674cffa78163ffa17b5effa78164ffae8767ffaf876bffa58164ffa68265ffa88363ffa9856affa37d61ffa27c60ffbb9371ffae8667ffaf8b6effb08c6dffa48264ff987960ffb08a6bffae896affaf8c6effaf8a6dffae896cffaa886affab896bffaa876cffa58066ffa68165ffac886cffa28162ffaa8a6eff9d7c64ff9d7b64ff98765fff92725eff927561ff91735eff92735eff997d62ffa08367ff987b63ff9f8168ffa28263ffa98a68ffceb08bffdabe93ffddbe96ffdcbf95ffe5c89bffe5c89affe4c899ffe7c99affefd1a1fff1d5a5ffeace9effe6ca9fffd2b78dffc1a582ffa88b6dff91775bff8f745dff8f755eff8d735fff8d725fff8d725fff8c715eff8c715eff8a6f5bff8a6d58ff987b66ff866a54ff846650ff846650ff82644fff7d604aff7b5d48ff795b44ff785a43ff785a43ff785a45ff785b44ff7b5d48ff7b5d4bff82644fff80624bff7b5d46ff7b5d46ff7e6049ff7e614aff7e6049ff7f614aff795c45ff7c5f48ff7c5e47ff7c5e47ff7a5c45ff7e5f49ff84664dff83634aff7d5d44ff7f604aff7e5e47ff7e5e47ff7d5c47ff7a5a44ff7b5b45ff76563fff775641ff795945ff7a5945ff785944ff785a45ff775945ff7a5c47ff7b5d46ff866851ff84664dff85674fff8e7057ff7f6149ff7b5d46ff7d5d44ff806048ff7a5a43ff785942ff7b5940ff866749ff795a40ff856649ffa37c5dffb38b6bffab8363ffaa8566ffa37e61ffa47e60ffab8465ffad8666ffa78162ffb78f6effb18969ffae8667ffb08a6bffa88468ffab8467ffaf8a6affa78466ffab8569ffa78367ffb28a6dffb28d6dffad886bffa48266ffb79574ffb58f72ffb99173ffb68f72ffb58e6effac8664ffae8c6bffa78368ffa88265ffb6906fffb89271ffaa8767ffaf8b6dffa7836bffa7886dffa3836aff997a62ff997b65ff937661ff92765dff927763ff947761ff927864ff947b66ff927863ff927762ff917661ff917762ff927763ff947862ff977c64ff947861ff987b62ff967a64ff937860ff987a66ff957763ff987b61ff987b61ff9b7f64ffa0846aff91745dff8e715aff8d705bff8b6d57ff8b6d58ff8d6e58ff8c6c57ff8d6d59ff8a6b57ff866652ff816450ff7b604aff7b5d48ff7c5e49ff7d5f4aff7d5f4bff7e604cff80634dff7c614cff7b604bff7b604aff7d5f4aff7c5e4aff7a5c48ff795d48ff80624eff7e614bff7e614aff7e604aff7c5e49ff7e604bff7f614cff805f4bff7f5f4aff83634eff856550ff856551ff856652ff7d5e4aff7c5c46ff7c5c45ff7d5c46ff84644dff7b5b45ff876751ff7d5d47ff7c5f47ff7c5e49ff7d5f49ff7f624bff886a53ff84654fff83634eff7d5f4bff7e604bff7c5e48ff82624bff795942ff765942ff795942ff765640ff775742ff775740ff7c5c43ffb28864ffa68162ffbc9372ffb08869ffaa8263ffa57f60ffbb9574ffa78364ffa47e5effb08968ffad8466ffa57f63ffa57f60ffa38062ffb58f70ffae8a6bffa98569ffa98569ffa78365ffa88465ffab8666ffa78266ffad896effaf8b6cffa88265ffba9274ffa78165ffae8769ffc09877ffac8a6affbb9575ffac8663ffb18c6dffaa8567ffa98569ffb08c6dffac886affb08c6effb79475ffac8a6bffae8a6dffa58464ffa68568ffab876cffb28d6effaa8468ffbd9674ffac8c6fffb49375ffa18167ffa78669ffa1806aff987a63ff93755eff947760ff937864ff947861ff997d5fffb09473ffcaae8affe6caa0ffe7cc9ffff0d2a4ffefd2a4ffe9d09ffff1d5a6ffdec097ffd2b38effaa8b69ffbfa07fffb89978ffc1a280ffd3b590ffc9a988ffbea07fffc7aa8dff9f826bff886b56ff886a55ff8a6a55ff896a55ff8c6e58ff8a6d5aff876b56ff896d58ff8a6e57ff82644fff84644dff826752ff826752ff846853ff836551ff81634fff82644fff856753ff8c6e5aff886955ff886a54ff8b6d57ff8a6c56ff8d705bff8c6f5aff8b6d59ff7e614bff7e6049ff80604aff7f6049ff7f5f49ff7f5f4bff81624dff846651ff876a53ff83654fff83654eff7f614bff83654dff8f6f56ff84664fff856850ff8b6e54ff83634dff7e5f48ff7b5d46ff7e5e47ff7c5c46ff775740ff775741ff7b5b43ffa57d5aff9a755affbd936dff9b7556ffb08967ffa07a5cffa37b59ffa37c5dffa6805effa47e60ffa57f5fffa67f64ffa88163ffae8867ffbb9373ffa37e5fffad8765ffac886affb08b6dffad8769ffaa8566ffb38e6dffab8667ffb48e6cffaa8364ffb08a6cffae8a6affaf8969ffa68265ffb28d6bffb08b69ffa88465ffaf8b6cffaa8669ffaa8668ffad8b6effae8c70ffac8667ffab876cffb48f71ffae8a6bffa8866bffb08e70ffb79276ffa7856affbe987affba9475ffa98769ffb28c6effad896bffb18f72ffa78567ffb38e70ffb28e71ffb89476ffb69175ffb28d6fffae8a6cffaf8b6dffb18e6fffa88669ffb28f71ffa7846bff977961ff91725fff917461ff907461ff8e7360ff8c715dff957a65ff977c65ff8e735dff8e725dff8d715eff8b705dff896f5cffc9ad8effd8bc91ffd2b284ffceae7fffbc9b71ffd0b088ffd4b68fffc1a581ffa98c6bff8f7156ff8f7159ff8d715bff8d715cff8e725dff90745fff90725eff91735eff8e715cff8e735dff8f735eff8f7360ff8f745fff90745fff927661ff8f735eff8f735eff8d715cff896d58ff836853ff846651ff846550ff866652ff82624eff876854ff8b6d56ff876952ff896b54ff896b54ff836851ff876b54ff8b6e57ff886a54ff856751ff856751ff81644dff80614bff8b6b54ff7c5c44ff7a5a44ff775640ff7a5a42ff7c5c42ffa37d59ffa37957ffae8562ffa17955ff9b7454ffa07c5bffa47d5cffa07756ff9b7254ff9d7557ffa1785cffa37b5effa98262ffb58d6effa17b5dffa37e5dffb08964ffa88262ffa88263ffb79172ffae886bffa98569ffb18d6fffab876affab8668ffae886affa98568ffaa8465ffba9476ffa37d60ffa48062ffa58267ffa88368ffae8a6effb08b6dffb28f6fffa88569ffaf896fffae8c71ffad896affad8b6cffad896bffa9896cffb18b6effb59174ffb38e70ffab876affb08c6dffac876affa58166ffaa886cffb38f6fffb28e6effad8b6cffaa886bffad896dffba9375ffaf8b6dffaf896bffb69072ffad8769ffb08c6dffb38d6cffb4916bffaf926bffb59373ffad896bffad896dffad8a6dffa38065ffa17f62ff93725bff8d745dff8f7561ff907664ff957b67ffba9c7fffd5b793ffdfc09affedcfa4fff4d4aafff2d4a5ffeed2a4ffc6a780ffc1a37affe9ce9bffbfa376ffb0926affc0a57effdfc398ffa98c6dff967960ff92755eff937563ff90755fff907661ff8f735eff8e745eff8d7360ff8f7561ff8d735fff8d725fff8d725fff8c715eff8a705dff8a6e5bff886a58ff876856ff846855ff846855ff856954ff876b57ff896c58ff886d57ff876c56ff886c57ff866b55ff866a55ff886c57ff856954ff816550ff7f624eff785c47ff795b46ff775843ff785944ff7e5f49ff795b45ff9b7351ffa57e5cff9d7453ff946c4eff9b7554ff9b7457ffa07757ffa77e5effa87e60ff957050ff9d7657ff9d7759ffa07b5dffa57f5fffa17b5dffaa8461ffb08b69ff9c7659ffa57f60ffaa8667ffa47f62ffa78365ffa78265ffa78366ffa98468ffa98367ffa68265ffa78166ffaf8c6dffaa8467ffac876bff9d7b60ffaa846affb89070ffb18d70ffa98668ffa58569ffaa876aff9e7c63ffa8856dffa6856affae8d70ffaa886dffae8a6effaf8e71ffb29173ffb08d70ffa98668ffaa886bffb28e70ffb28f72ffab8669ffae886affa68364ffab8869ffaf896cffa98567ffb28b6bffb08b6fffb49072ffb28d70ffb58f6fffc69a73ffbf9d74ffad8c68ffa78567ffa37f66ff8f715dffa58162ffaa8767ffa98566ffad8966ffbf9773ffcda178ffb89475ffac8a6dffa08267ff957862ff937660ff907560ff91755fff93755fffa08067ffceb08cffe3c49affe4c498ffebcea1ffdcbe93ffddc195ffd3b68cffc7a980ffcfb18effb5997affa88a70ff8f745dff8c735fff8c715eff8b715eff8a705dff8b715eff8c725fff8c735fff8c725fff8e7361ff8e725eff8d715dff8d705eff8a6e5dff886c58ff8a6e5aff886e5bff896e5bff8b705dff8c705cff8b6f5cff8a6e5bff896e5aff876b58ff866a56ff856954ff846853ff816650ff7f634eff7b5f4aff7a5d48ff785a46ff795b46ff795b46ffa67c58ff9c7552ff9f7755ffa27755ff98704fff9d7556ff9e7656ff967151ffb9926affab815fffb08562ffad8563ffa0795affa17a5cffa47e5dffa27b5fffa27c5effa17d5effa17e5dffa27e5dffa68264ffa68467ffa07e64ffa58168ffa47f64ffad896dffa37e64ffa68268ffa17d62ffa48064ffb28e70ffa07f63ffa88467ffb29070ffa48368ff9f7f66ffa2826bffa68569ffab896effa7856cffac8a71ffac8b6effa8866cffae8c6fffab8b6fffa9896effa58469ffa38169ffa78567ffa68269ffab876dffad896fffaa8569ffa98468ffb08c6fffa58165ffa57f62ffaa8466ffaa866affac8869ffa68267ffae8a6dffc2976fffbe986fffa68467ffb18d6fffb08b6bffb08b6dffba9171ffb89576ffb18d6effae8969ffad8768ffb08c6bffc09772ffb48c6affaf8a6affaa886bffb39070ffa18063ffa8896bffab8c71ffac8d72ff9b7e64ff977962ff94755eff91715eff957a67ff917865ffa0866fffae9078ffb5997cffb08f73ffa3846cff8d735fff8c725eff937865ff8d725fff8d725fff8e725fff8a725fff8a705fff8b7260ff8d7460ff8c735dff8c735dff8d715cff8d715dff8b705cff8b715dff8b715eff8b715fff8d725fff8e725fff8e725fff8e725fff8b6f5cff896d5bff896d5aff886d58ff886d57ff876c56ff856954ff856954ff826651ff81634eff80624dff826450ffab805bff9f7655ff956f4fff967052ff9b7252ff9c7350ffa17755ffa17654ff9d7253ffa97e5bffa27856ffa27a5affac8564ffae8867ffa5815effa27d5eff9d795cff9d795eff9e7b5effa07e5dff9b795cff9b795cff9d7961ffaf8b6effa68367ff9e7c5fffa17f64ffa88569ffa18063ff9e7d63ff9b7a60ffac8c71ff97765fff95765dffa58169ff9e7e69ff9c7c67ffa57f67ffaf866affa6846cffa2826affb18f71ffa78568ffa8886bffa8886dffa38368ffad8e72ffae8d6effac8a6effa6846affaa876cffa28065ffa7856affa78669ffad8b6cffb69270ffac8768ffa58162ffa48366ffa68368ffae8a6effb08c6effcb9f77ffcc9e76ffb38c6effac876bffa98569ffa58268ffa78368ffa8866cffb08b6cffa88569ffa78669ffae8b71ffb38f71ffc09776ffab8464ffb49273ffa98a6cffa38369ffa38368ffa8886dffaf8f72ffab8768ffa58268ffcea077ffbb926effce9f76ffb3906effb19374ffad8c6effaf8f6effa28263ffa88367ffa98b6dff9c7f64ff8f745cff90755dff927764ff8d715dff8f755fffd1b897ffddc39cffc5a784ffd0ae8bff9d7f68ff8c705cff8f7361ff8d715eff8c715eff92755fff8f735aff8e725cff8c7261ff8e725fff8d725fff8c705dff8a6f5cff896f5cff896f5cff8c705dff8c705dff8e725fff8a6f5cff896e5bff876b56ff866a55ff856954ffa57b54ffa97d5aff94694aff946b4cff956e4eff9a7154ff9f7452ffa17953ff9a7050ff9e7651ff9c7355ff9c7557ffa27b5cff9d7859ff99775bff9d7a5bffaf8a6aff9d785eff9e7a5eff9c7a5eff9f7b63ff9e7b5dff9b795dff9a785eff9c7b62ff9a795fffa18164ff9c7a61ff9b7960ffa37f63ff99785fffaa7e5effb58760ff9d7a61ff9e7c63ffaf8363ffbd8360ffcd8f68ffb08b6effa48267ffa5846bffa5836affb59378ffb09173ffa5866affa6866affab896effa58368ffaf8b72ff9f7d64ffa9876dffa68164ffa98265ffa27e63ffa07e64ffb08b6effa88467ffa48165ffb49071ffa78365ff9e7b61ffaa8869ffc29b78ffcda275ffb18d6affab876affa18063ffa07f66ff987960ff9f7d67ffc79672ffa4826aff997960ffa5826affac8a72ff987964ffa9896effa28266ffa5856cffa88870ffb89980ffaf8f75ffa78769ffa88466ffbf946fffbb9777ffa9856affcb9d75ffa58466ffb99773ffbf9b73ffb99670ffb7946fffc19c75ffb59470ffbc9a75ffa28569ffb69977ffab8d6dffad8f6fffa08266ff937762ff91765fff907360ff91715bff9f7f64ffc3a883ffe4c9a1ffefd2a4ffefd29fffebce99ffeccf9dffe1c593ffd4b88bffdabe90ffc9ad82ffb59571ffba9978ff9a7c60ff8a6e58ff896e5bff8b705dff8c7161ff89705cff8a6f5cff886e5bff876b58ff886c59ffa87d57ffaa7f5affa87c52ff9d7450ffa97f5bffa37754ffb2845effa57d55ffaa825cffa47d59ffa17959ff9c7557ff9c7559ff9f785dff9e775cff9e785fffa37e61ff9b755bff9b755bff9c7a60ff9c7960ff9d7b5effa17d61ff9f7d62ff9d7c64ff9a785fff96765aff9b795bff9e7c60ffad8464ffb0815effd99b66ffa67c57ff927258ff9a795fffbe845effd58f5dffe1ad7cffab8668ff9a7a61ffaa886fffa5836bffa17f65ffab8b70ffa8886dffa9896effa38267ffaf8d70ffac896cffa9856bffa37f65ff9a7860ffa17f66ffb38f73ff9c7a61ffa48268ff9d7a60ff9e7c62ffad8a68ffa78569ff9b7961ffa17f64ffa07c5dffc2976dffa5815fff9f7d62ff9d7b60ff9b7b64ff9f7f65ffa07f66ffb08767ffab8669ffa17f63ffa38066ffab886dffa07e64ffa38267ffa5856affa9896fffa9896fffa5856dffa8896fffa18168ffb18d6fffba926dffa4846cffa38367ffc49771ffa28367ffbd9972ffc59b71ffb7956fffb8956fffb6936cffba9572ffc59c77ffae8f6fffbf9972ffbe9b77ffc8a07cffcda579ff9f8068ffc09775ff9c7f67ff9e8166ff9b7e63ff997d64ff947962ff8d735fff8d735eff8e725cff8a6f56ffab8f70ffd7bc91ffeace9dffebcd99ffebcb97ffedcf9bffe6ca9bffecce9effd6b687ffe0c192ffd2b487ffd8ba91ffb19272ff94785eff8a6e59ff886c59ffaf835effa47a57ffa9805bffa17859ffa37b5bff9b7453ffae8560ff9f7959ff9f785affa17b5bff956f51ff946d4fff926b4eff987252ff967053ff977258ff947050ff906f54ff97745aff876753ff936d57ff967155ffa17c60ffa68061ff957257ffab7e5dffaa7b59ff947457ff98765cffb08662ffbd895effdb9c63ffae8766ff9e7b5fff997659ffc18860ffda9768ffab8764ffa38163ff9f7d62ffa38167ffa18166ff9d7e63ffa58369ff9d7d62ffac8a70ffa58369ffa58368ffa07f64ff9b7960ff96745bff9d7b60ffa6846aff99775eff94755dff98795eff99775fff9e7c64ff92705aff94725aff93725aff937157ff9b775bffb78a62ffb68c65ff9c785cffad896bff9a7860ffaa866affa58165ffa68265ffa07c62ffa9846affa27d61ffa57f63ffa38065ffab896effa78569ffa48267ffa18268ffa3856cffa88870ffa18169ffa68469ffae8969ff9d7c64ffa18269ffbd926fffad8c70ffc29a75ffd3a177ffb48f6cffc19873ffb6936dffbe946fffbd956fffa88868ffc29b76ffc89f78ffbc936dffd1a37affa98a6fffa2846affa08669ff9f8566ffa58a6cffa18669ff9c8067ff9f8267ffa48669ffad8e6dff9f8466ffa8896cffa68668ff8e715aff927560ff8c735cff8c7058ffbb9d7dffe9c99fffedce9fffe8c996ffdfbf8effedcc9affd5b386ffd0ae81ffc19f75ffbc9974ff936f55ff8c674aff966d52ff966f53ff906950ff946f51ff9c7457ffa17859ffa27757ff977155ff967054ffa57d60ffa17957ff936c4fff92694bff986e50ff9d7656ff9a704fffa7734dffad714cffc77e4fffd89966ffa47d5effc19971ffd39e6effce8553ffb58960ffab8666ffaa8464ffcb9e75ffc79064ffe3a76dffa67f5fffa47d5bffa98160ffac7b56ffd08f62ffa27d60ffa98162ffa47f63ffa07c60ffa17e61ff9d7a5eff9f7d62ffa17f64ffa38066ffa17e65ffa58165ffa17c60ff9e795fff9e795effa98268ffa68165ff9f7a5effac876bff9e795dffab8666ff9f785bffaa8363ff9b7558ffa37e5eff9f7a5eff9f7a5dffb58b6affaf8665ffa68063ffa78367ffa88468ffad896dffa48064ff9e7c60ffa48167ffa17e64ff9d7b61ff9e7c63ffa07e64ff9d7d66ffa68469ffa07e63ff9b7a62ff997962ff987761ffb69272ffa7856cffb38c6bffa07e66ffad896fffba9070ffa8886dffbb936fffd0a178ffbb936bffc1956effb7936effc49a74ffc39b71ffae906fffba9470ffc3986fffc69c73ffc69976ffa6856bffa7896effa6896cffa3866affa48669ff9f8265ffa08367ffa88869ffaa8b69ffb79671ffb4946fffb2916dffcb9f77ffc09a70ffd4a375ffdfad78ffd7a879ffcda077ffb18c6fff99785fff94755fff90705cff95755cffa48566ffb7997bffbe9e7dffb29373ff8d684fff8e694fff987154ff956d51ff9c7458ffad8463ffa17959ffa17755ff9e7251ffab805dff9f7453ff9f7453ffae845dff9f7553ffa17753ff9a704fffa27856ffb9885dffce8f5dffc77e47ffe4a772ff9d7554ffa9815dffc89d74ffda9b67ffd88c55ffab8361ffab8461ffa87e5affc59469ffd99a62ffbf8b59ffa8815fffaa805dffb38662ffb37d55ffd69565ffb38866ffad8664ffaa8162ffaa8262ffa78162ffb58f6effb79170ffb48d6cffac8564ffb68f70ffae8767ffaa8466ffa88163ffac8567ffa47c5effa77f62ffae876affa88164ffa78367ffa17b5fff9a7357ffa07a56ff9d7756ff9e7959ff9e785affa07a5bffa88162ffb38968ffa27d61ff9d795fff94725aff977459ff9c7860ff9a785fff98775dff997960ff997960ff9e7d62ffb59372ff96765fff9e7b61ff967259ff9a775fff927059ffac896eff987357ff9f7c62ffa78064ff977760ff9d7b61ffa17f65ff987a61ffb28c69ffd9a275ffbe946cffcc9b73ffbd9269ffd1a178ffcca078ffac8b69ffd2a278ffbb9770ffbd946cffb78d6bffa8876cffa98b6effa28468ffa48568ffb1916dffa08463ffac8c6dffad8c6affb2916dffba956fffb7926effb79572ffbf9974ffca9c71ffd09f72ffdea873ffe5ad75ffe7b07affc19067ffd1a37affb18c6fffb38d6fffac8b6effab8a70ffaa896cffa6866bff997d69ff9e7553ffa27a59ff9e7255ffa07553ffa27652ff9f7453ff976f4cffa87f5dff9f7553ff986c50ff9c7254ff956d4fff8e674bff8c6548ff976c4dffb1845dffa07654ffca9563ffdc9f69ffe2a368ffad835fff9f795dffa57c5affc49467ffd8935effdd9863ff9c7559ff9a7457ffab8060ffbb8a5fffd89761ffddab70ff9d7656ffa57d5cffa57756ffad7750ffd9945effac805bffaf8667ffb28b6dff997559ff9f785cff9c755affa88264ffa57f62ffa98162ffac8667ffa57f62ffac8669ffa17b5fffa27c60ffa57e60ffaa8464ffa47c5effa2795dff9c7559ff9d7758ffb58b67ff9f7758ff9d785aff9c795aff956e54ff997357ffa98365ff997256ff9a765bff977359ff98735bff987358ffa27f63ff916c56ff93705bff95725cff9a785eff96735bffa28168ffae886dff8f6b53ff916c53ff8e6c54ff96735bff99775fff906e55ff9a785dff9e7a5eff93735cffa17e66ff9d7c62ffa57f64ffa88567ffca976dffba9068ffcc9b70ffc59870ffc8976cffc19670ffb39371ffb8936effbf956fffd09b71ffb48e6dffa4856affaa8a6bffa78768ffb59470ffad8e68ffb3916dffb08e6affb4916effb2906cffcb9e74ffb3906dffc49972ffba916affcf9f75ffca996effd7a275ffcc9d73ffefb883ffd49f71ffbd8f6dffbe9271ffb28b71ffae8d6effba9779ffa8886cffac8c6fffaf8b70ffae825effa47854ffad825dffa57b57ffaf8461ffa17755ff9a6f4fffa57a58ffad805eff9f7250ff9e7353ffa27652ffa97e5cffb38864ffaf825cffb28562ffbf9169ffdaa26effe4ab70fffcc788ffa87d5affa37959ffbf946bffbb865affca8855ffe09c66ffb0855dffb28763ffaf8462ffa8774effd79660ffdca66affaa7e59ffb0845fffac825bffa3714affc88655ffe4b078ffa67c5dffa87e5fffae8664ffa9815fffa8805effa57d5effab8363ffa57c5cffa47b5effa98162ff997358ffa37d5fff9c765affa37b5fffad8766ff977153ffa07a5cff9d795cff9a7458ff9e7859ff9a745aff9e775cff9e775dff977055ffa47e62ff916d52ff8f6a51ffa07b60ff9c775effa67f62ff967258ff967157ff977357ff8e6c54ff9f795bff9a765bff9f7b60ff98745cff8c6950ff85644dff88674fff8f6c53ff9d7657ffa8825effa17b5dff9a785dff9d7b61ff98765eff927258ff9a775fff99775dff98785dffb48762ffba8c62ffc1946bffc59871ffc2946cffc89771ffc29871ffb9956fffce9e75ffb88e6affad8b6effa28567ffa38162ffa38160ffaf8c66ffb8916affbf976effb9926cffba946effbe956effd09e73ffbf936dffcd996dffcc986dffd49f6fffce9b70ffc99770ffba8f6dffb8906fffd5a37bffc6956cffb68c6bffb28c6cffab896cffa7876cffa28269ffa28368ffab8b74ffa67a56ffab7f5dffad8059ffaf835effb1845effb98c65ffb0835dffb0825cffb78963ffb0815fffaa7e59ffac7f57ffa47955ffa37857ffad8161ffaa7f5fffbe8a5effca9059ffd89b61ffe7b57dffb98e6eff9f7859ffb9926dffba8359ffcd8854ffab774eff997359ffa47d5effc4956cffb17a50ffc38451ffe6ae72ffa17654ffa87e58ffb1865cffab744bffbf8152fff1b772ffab7d5cffaa8162ffb08763ffb38b67ffa27a58ffab8060ffad8361ffa77d5cffb08666ffa2795cffa47c5dffa47d5effa37b5effa37b5cff9f775affa1795aff9e7658ffa0785bffa47e5eff9b7458ff997358ff9f795fff916a52ff926d55ff946e54ff9b7456ffa37d61ff9e775bffa78062ff9c765aff977157ff997259ff977158ff997356ff957255ff8f6a4dff987458ff997558ff947055ffb88e68ff947054ffa67d5affd5a877ffb38561ff9e795dff987359ffa27e64ff9d7960ff9d795fff967257ffb18e6dff987459ffaa8466ffb38b67ffc49a73ffbf946fffad8564ffcb996fffc29873ffb6906dffc59970ffc79c76ffa58366ff9d7c5dffa07d5eff9d7a57ffbb9066ffc7976cffc1946bffbf946affbe956dffc0956effd09c70ffd5a073ffd9a06fffd19e72ffb68b63ffcd976cffcf9e7affcea682ffa7866dffa58368ffc99f7cffc79b79ffb28969ffbc9677ffad8a70ffa8866dffc09d7dffb59377ff9a7251ff88634bff9a7357ff957053ffa07858ffbb8c67ff956c51ff997257ff916c50ff89654bff8d6647ffb58a65ff8f684fff956f53ffa17b5cff9f785affbe8b5effc28756ffde9f62ffd5a678ffa27c5dffc4a17cffab845fffac794fffba7846ffc38c60ff9a7458ffa77c5bffc68c5effc0814dffe29d5fffe1a96cff9b7457ff8f684effa57959ffa46b43ffa06136ffe39a55ffac7b53ffa67c60ffa07a5cff9d7757ffaa8263ffa98163ffa57d5effa17a5bffa57d5fffab8569ff9f7859ffac8462ffa47b5cff9f7757ffab8260ff9a7051ffb18662ff9e7453ffa47b5dff9d7456ff9c7255ffa07758ffa17859ffa98060ff9d7555ff997254ff946f53ffa27b5bffa67e5dff986f54ff9a7254ff9e7458ff987054ffa0785bff9d7757ff997154ffa47b5bff9f7557ffa47c5bffa0785bff986f51ff956d51ff9d7858ff957054ffa37c61ffa0795eff99745affa78367ff977357ff9f7b60ff906c52ff98735bffaa8668ffab8566ffb58d6affac8564ffa78063ffbc9472ffbd936fffb48d6affc79d78ffb38d69ffa38061ffa27e5cff967252ff9f7a58ffb48960ffc59569ffc99669ffc89367ffc8996effc7986effcf996cffdda371ffdca06fffc1936affb18765ffc3956fffc59671ffa68065ffa7866bffa7856bffa8866cffad8c70ffab886cffac896dffad8a6fffa7856dffbb987bffaa886eff8f694cff9a7357ffa98160ffa37c5cffa98160ffaa7f5dffb08563ffa37859ffa27758ffa37856ffa77c59ffb38862ffaa7f5fffa07657ffa27a5bff9f7757ffcb8a59ffc07c48ffda985effb88b63ffc7a17cffa57f5bff99714bffa36f46ffbd7d4bffc68c5fffa27a5cffae7d56ffba7d4bffd38e54ffda9456ffd39e6bff926a4dffa98362ffa87a5bff9d623affad673cffe4934fff9e7253ff9a775dff97725aff9a775cff937159ff9c795fff916f57ff94725aff916f57ff8f6c54ff98745bff926d53ff916d53ff997558ff977155ff9e7659ffa17859ffa98062ffa67b5dff996e4fffa67b57ff976f4eff9d7556ff956e51ff977053ff997154ff9b765aff8d664bffa47653ffa57851ffa67853ffa77a58ff966d4dffb28660ff9a7154ff996f4dff8d6544ffa67a55ffac7f56ff9f7653ff9f7551ffa77c52ff936c50ffbe8f5cffa57953ff996e50ff9c7557ffa67f5fffa98264ff9b7355ff987255ff936f53ff997659ff916d51ff9e7759ff9b7455ffa17a5bffaa8263ffb88f69ffb18a65ffba9170ffad8864ffa0795dffa68060ffa07a5affa7815fffb18760ffb38961ffcc996bffd19a6dffc59368ffc09165ffd19a6bffd39b6dffce9769ffad8869ffae8767ffae8664ffbb8f6dffa68266ff9f7e66ffa5836bffa1816affa17f68ffa7846affa8856cffa6846dffa6846cff9f7d65ffa38169ff986f51ff987053ffa98162ff997257ff977055ff987055ff986f56ff9a7156ff91684dffa0795eff997257ff926b4eff89664fff916d53ff977155ffaa7f5bffbc7b4cffb8703dffd89660ffa07756ffb18b6affa37d56ff976e49ffaf805bff916340ffa77349ffbb8053ffc38658ffbd7a4affd49055ffc88549ffc08b5eff9c7350ff8f6a4cff9f7152ff985d39ffb0673dffe68d48ffc28f6eff9b745bff987259ff9e7a60ff977258ff9b775dff967158ff957157ff987458ff946f56ff967258ff936f55ff8c684eff9a7559ff8c674dff89644bff936f55ff8e684eff8d664cff8a644bff8e684eff805a42ff9f7659ff8c6549ff936e50ff956e4fffa47b5fff9e7557ff936a4dff986c4dff966c4dffa37653ff8d6549ff90684cff866043ff9d714eff8c6346ffae7e54ff9e724bff9f7452ff9c7150ff946842ff916749ffb38258ffa57751ff9f7453ff926d50ff9b7050ff9c7557ffa37b5dff946f53ff987357ff967056ffa67e5fffa47c5fffa17a5bffa88060ffa27a5affb08666ffa98361ffab8464ff9a7656ff9e7858ffac8662ffac8563ff9e795cffad835fffa67f5affad815effb38863ffb78b63ffb98b62ffc89264ffc59269ffaa8164ffad866affaa846affa28267ff9f8065ffa28067ffa07f67ffa07e68ff9d7d67ff9c7c66ff9e7e68ffaa8973ffa3836cffa2826bff9e7e68ff9e7d68ff90684bff91684bff90684dff966f56ff9c755aff916b51ff946d53ff977056ff9a7255ff91684dff91684eff926b51ff896147ff8e674cff8f664affc39565ffaf6d3fffa5623cffb37144ffac7550ff9b7254ffb78f69ffab845fff98724fff9c724fff966744ffa36e46ffad6f41ffbe7b49ffce894effdb9a5aff986947ff956d52ffb8906affb08059ff915a34ffb87141ffec944dffad7c57ff997257ff946d52ff9d795dff9c785bff977158ff9f795cffa98268ff9c7458ff9d7559ff956c4fffab825dffaa805dffb08664ff966d4fff946c4eff9f7656ffa17555ffa27652ffaf835fffa07450ffa07653ffa77b56ff946b4aff98704effad8361ff976c50ffad8160ffa37753ff9f7452ffad815eff997052ffa37757ff956d52ff7f5941ff9a714eff936b49ffa57955ff946546ff8f6345ff9f7655ff8f6647ff996e4cff9e7351ffae7e57ff9a7153ff997254ff9b7251ff9d7358ff987157ff967157ff9a7358ff8d674eff987257ff947057ff967157ff8e6b52ff936e55ff926f56ff9f795dff9a7456ff916d51ff936e56ff967156ff916d54ff987459ffa27b5dff9a7659ff987457ff9a7558ff9c7656ffa0795affca9469ffb18968ff9e785dff9a755eff99745cff97785fff997b60ff95755bff997860ff95735dff95755fff987862ff987763ff9d7c69ff977764ff9a7965ff967660ff9f7c66ff956c51ff986f55ffa47d64ff8e674eff8f684eff916b50ff966e50ff976e51ff91684aff8a6145ff8c6348ff8a6146ff8d6447ff936b4dff91674affc89567ffb16b38ff9f5b30ff965633ffaa6337ffaf754cffae8462ffaa8359ff9d754cff926944ff926641ff9b673dffa2663bffb3713fffcc8347ffe5a35fffb38560ff9e7655ff9e7458ffb1835eff885533ffac6b3cffe08d4cffa97853ff957056ff8e6a52ff98745aff906b55ff8c6650ff9a7358ff9d765bff946c50ff9f765aff976e53ff936d51ff886347ff835f44ff976e4dff936a4eff8d6649ffad8361ff8a6348ff8f664aff92694bff9e7656ff9b7354ff8e6548ff936a50ff90674bff9b7053ff916649ff966b4bff8f6447ff8f6445ff92694dff8d6447ff885f45ff80593fff986d4dff956c4bff9b704dff8e6245ff916649ff996d4fff896247ff92694bff8f684bff9b6f4eff91674cff9a7056ff986e4effa07556ffa2785aff9d7457ff9a7054ffa1795affab8162ffa77b5bffa77b5affae8463ff9b7252ff9f7659ffa47a59ffaf8361ffa17759ffa77f5dff9e785aff9e795bffa0795bffa07759ff966f52ff987054ff926a4fff987354ff9d7455ffb3845fffa27a5cff9b755aff98745bff977259ffa07b60ffa47f63ffac866cffa68164ff99735affa88469ff9f7c61ff9a775fff9f7a63ffa37f6affa07c64ffa48165ff9e7961ff91684bff92694eff9c745affb08566ff8f654aff936a4dff966d50ff92694aff8d6445ff9b7254ff865d42ff875e43ff8f664aff946b4dff966d51ffa0714cffad6d37ffaf6735ffa76237ff9b5a36ffa45e31ffbc7c4effb0855fffa67e56ff976f4bff956942ffba7e4effa96638ffb9723fffd68548ffe49952ff986944ff8f6a4fff906951ffa2744fff855132ffaa6d40ffea9652ff9b6e4cff8c694fff8c6a52ff906d55ff8e6a52ff947056ff926c52ff916a51ff916a51ff997056ff9a7158ff8a6348ff8e674aff896248ff8d674aff8f684dff855e45ff956c51ff9e7457ff8e664bff8c654dff85593eff93694bff8f664eff8e654bff8f674bffa2785bff9e7457ff996e4fff956b4bffa17453ff90674aff966c4fff91684cff80583eff906545ff926848ff8f6545ff8e6445ff926746ff996c4aff8e664aff996f50ff946c54ff92694cff90674bff976c4effa27a5cffa77c5dff9b7254ff9d7557ffa27a5bff997254ffa77e5eff9e7455ff9d7354ff9c7456ff9e7558ffa2795bffa37958ffad8362ff9c7355ffa77e5fffa87f5fffa57c5affa47b5bffa27758ffb08768ff9c7253ffa17758ffa37b5bffa47b5affb08663ffa77d5affa1795dff9c7455ffa57e60ffa0795bff98735aff9b755bff98745aff957159ff9f7961ffa88468ff977359ffa17961ff98745dffc29c7dffa78269ffa27b61ff946b4fff91684bff8f6448ff9f7456ff956a4eff926a4eff906649ff926848ff896144ff91694bff8e6647ff8e6245ff845a40ff896042ff92694dff9c704effb87945ffad6736ffa25c30ff93522eff92532fff98582fffb06d3fffaf8660ff946b47ffbc8457ffb0693cffb0693affbc713cffd48042ffea9750ffcc905cff987258ff976f51ff8c5836ff895231ffab6938ffea9247ffa57553ffa07a57ff946d53ff977155ff936e54ff906a52ff926b52ff9a7458ff936d53ff8d654bff9c7358ff90674aff8a6147ff8c6348ff91684dff886148ff8a6349ff855d43ff8a6247ff8d654cff7c5640ff7f573fff91684aff8f664aff876046ff8d6348ff90684bff8f664eff92694aff976d50ff8c6445ff8f6748ff865d44ff865e44ff855e44ff8d6447ff94684bff896249ff9d7450ff875d42ff986c4dff8d654aff9b6e4cff886248ff8e6549ff90664aff8d664aff936a4fff926b52ff8f684eff8b6649ff8c664dff876248ffb78d68ff8c664dff936d53ff8b664cff8e694fff916c53ff8c654dff8f6a51ff88624bff88654eff8b684fff936f54ff977158ff926e54ff946f54ff916a4fff8a644bff896449ff916d52ff977053ff9b7457ff916a50ff997357ff967053ff9b7557ff9a7458ff9f765affa0785bffa47c60ff957158ff987459ff9f7b61ff9b755dff99765dff95735aff97735aff99755aff92694aff906647ff986e4fff996f51ff976c4dff8b6044ff91664bff885e43ff8e6449ff8c6143ff8a5f42ff976947ff865f41ff876042ff8d6549ff966946ffbb7942ffa45c2cffae6231ff9b572fff874b2aff794429ff854b28ffc7966bffc39061ffb26e3effaa6235ffc07441ffbe713cffc87639ffe38f48ffdf9351ff9f724fffb08060ff8f5b38ff8e5633ffbe753fffed9246ffc78755ffa17758ff966c4fff8d644aff8c654aff967054ff9b755bff9b7259ff8e674cff956d4fff9f7658ff986d4eff966b4bff986d4cff8f6447ff8c6345ff91664aff8a5f45ff9e7458ff8d6347ff9b7050ff94694dff986e50ff926649ff855c40ff9f7458ff92654affa2714dff875d43ff8d6144ff896046ff8a6046ff8f6649ff835a40ff815941ff8b6245ff825c40ff845d45ff8d6246ff94684aff93694aff936a4eff946a4bff896348ff8d644aff956d51ff8a614aff976f53ff8e674dff987256ff9e765aff87624aff8c674eff89644bff8c654dff8f694fff936d52ff9e765aff926e53ff997255ff9e7557ffa47b5affa97e5effa67c5dff9f7355ffa57859ffa77c5dff9c7454ffa2785aff987058ff956f54ffb28560ff9b7255ff987052ff966e53ff946d54ff8e694fff926c51ff916c52ff987257ff967156ff997358ff9d785cff997459ff9c785eff967159ff9d765cff936c51ff956f57ff956f58ff976d50ff8b6348ff916a53ff8e6547ff986e4fff8d6346ff8c6147ff9c7151ff966c4cff93694bff997150ff946948ff966c4cff926749ffa07658ffb27d4fffb56d36ffb4642fff9e5427ff8d4a24ff794228ff703d22ff764328ffa56333ffb56e3cffae673cffa86139ffac653bffb36634ffc4733bffd98242ffca7737ffb98154ff834f33ff855133ff8d5532ffbd7139ffe58b40ffca8954ffa37554ff986d51ff986f54ff946b50ff966d52ff926950ff92694fff90674bff966d4fff91694bff926a4dff987051ff976f50ff946b4cff936949ff986d4eff996f4cff956849ffa77850ff956946ff966642ff986a46ff986846ff916547ff8e6142ff976a49ff9c714cff986b4bff976a48ff9b704eff9e7150ff9e714eff916648ff93684aff936849ff9d7353ff996f51ff996d4dff9a6e4bff9a6d4bff966c4eff9f7251ff9d7151ff9b7151ff9b704effa17551ff986f4cffa37855ffa17756ffa9805fff956d4eff986d4eff9f7858ffab8261ff9f7354ffa87e5cff966d50ff976f51ff996f4fff9a7052ffa07757ff9e7558ff9a6f53ff946d50ff9e7554ffa47c5bffa17757ff9e7557ff9c7155ffa3795bffa57c5eff9c7358ff9c7358ff997154ff9e7559ff966e53ff986f54ff9d775bff946e55ff8c654dff916c55ff97705aff926c58ff85634cff8c6a53ff8a6752ff896955ff8c6954ff866450ff8c6349ff90684bff94694dff91684aff926749ffa07453ff9c7151ff906446ffa27554ff926647ff936949ff9c7250ffa47957ff956b4aff906445ffbd7e49ffb1632bffaa5b28ff914b21ff854220ff804325ff824624ff8e502bffb77541ffb06836ffa66039ffab6437ffc3733fffa86032ffa2592cffbd6e34ffca7a3bffa36a3eff885235ff925835ff9a5d35ffd07f42ffec9749ffd38d55ffa57754ff9d7254ff996f54ff9f7556ff986f53ff9b7158ff996e51ff987052ff956b4cff9d7255ff976e50ff956b50ff966b4dff9d7253ff99704fff8f6543ff8e603dffa27140ff855732ff88593aff905e36ff8c5e38ff926038ff744c35ff99693fff9e6e43ffa5764dff8e5e36ff9f6f45ff956947ffa07150ff8f6247ffa97a55ff956a4bffb6865eff9e724fffb27e56ff9f724fff996e50ff986b4aff8e6448ff906548ff8e6447ff9b7052ff986f53ff8e654bff845f46ff835d47ff855e49ff835e45ff8b664cff876148ff896449ff8c684fff835e47ff8d6851ff916d52ff946e55ff8c644cff8c654dff906a4eff9c7456ff976d54ffab8161ff89634dff86624bff866049ff8b6650ff8a654fff88634fff8c6850ff86614cff8a6551ff896550ff886553ff83604cff83604cff815e4bff987259ff856252ff825f4dff81604fff8a6550ff85634fff84624fff866350ff876655ff956b51ff9b6f51ff92674cff997052ff956b4effa07455ff8f6448ff8d6548ff976b50ff92654bff926549ffa37b58ff90664bff926748ff926749ffa17656ffa26d48ffc57333ffad5b27ff9b4e1dff964d22ff86431fff874524ff884b26ff9b5830ffae6334ffb06739ff9e5c34ffac6538ffab6333ff9e592bffa45d2effb2652fffcd8248ffa5714affa06837ffebae6affc98147ffc17337ffea994fffd79255ff9a6f4eff9e7355ff9e7457ff9e7356ff926a4cff946b50ff956a4fff8d6548ff956b4cff956a4bffb07f5bff9c7151ffb28056ff9c714dff9e714bffa1714bff8e613bff8f5e3aff8e5d3cff926237ff986744ff865433ff9b653dff815740ff8c5c3fff92623dff956239ff986741ff9f6d3eff956641ff986540ffa17145ff976841ff9e6f45ff8e6040ffa4744cff9c6945ffa3754aff986c4fff895e45ff8b6249ff835e48ff7f5944ff825d46ff89634aff7c5743ff805c44ff87604bff835e49ff86624aff825e49ff7b5743ff906b53ff835f47ff835f48ff84604aff8b6751ff845f4bff865f4aff89624eff8a6650ff825f4cff815e4aff7d5a49ff7e5c49ff7e5b48ff83624dff815f4cff866450ff815e4dff856251ff815f4aff825f4dff7e5c4bff83604fff7f5c4aff82604dff7f5c4bff8d6950ff956f53ff987155ff89644cffa47858ffa47a58ff9b7155ff87624dff8a644fff9a6c51ff91664bff9a704fff94694aff976c4eff986e4eff9a7051ff94674dff926748ff956a4cff94694cff996f51ff9b6f51ff93684bffa47a58ff976c4dffb97546ffbe662cff9c4c1eff974b1fff90471cff89431cff7f4021ff894b28ffa2572cffa35a2effab6435ff9b5a36ff9d5d36ffa26336ffa16433ffa86839ffffc57cffc68445fffbcc84ffe6a862ffffd07cfff1b66affde914effec9a51ffe09d5dffa47757ffa0775bff946c50ff9d7456ff946b4fff8e6549ffa17758ff946b4bff9f7455ff996e4dffa97b59ff956845ff996c47ff95694aff936440ffa36e40ff9c693dff855535ff865735ff8c5d3dff815134ff915c37ff8b5838ff996742ff7f5036ff875535ffa46f43ff91603cff95653aff986741ff86583affa26f40ff8a5b3aff976940ff916243ff865d47ffa1724eff8f6649ff93684aff8e654bff7f5842ff89644cff8b654fff8e6850ff89624aff7f5a45ff7c5945ff7c5946ff84604aff84604bff805b49ff87604cff7f5b46ff7e5b48ff7a5743ff795744ff7c5a4aff87624bff7e5948ff805b49ff7e5c48ff7f5d4bff7f5c4aff825f4eff815e4cff7a5846ff7e5b4aff7d5a49ff866351ff815b44ff87634eff8e6952ff8b654cff966b49ff865f49ffa07556ffaa7857ffab7b56ff976a4cff8f6548ff865e49ff896048ff93684aff8d6650ff92684fff845f4aff7d5c4cff956c53ff976e53ffa37755ff976c4cff926848ff926749ff94694bff9f7556ff92684bff9b7052ff93684cff956a4cff956b4cff996e50ff986f50ff906447ffbf6b33ffb4602bffb2602cffa75726ff9b4e22ff8f4a24ff793d1fff773f20ffa65e31ffa2592dffa35c31ffa56338ffa66637ffab6d3bffae7342ffa76f38ffe9b268fff7cc85ffffd68affd39e58ffeebb71ffecb466fff1b367ffe79d54ffb87f53ffa6795aff9d7255ff9c7154ff906a4fff966d50ff9a7050ff8f664aff9f7658ffa3785aff966c50ff976e4fffa2754fff93694cff9c6f4dff885b3effb37c4aff9c6840ff7d4d2fff82553aff905f39ff905e3bff97643eff8e5d37ff8e5b3aff885b3eff835639ff7c4d31ff855941ff966640ff8f6345ff865837ff94643fff976542ff9a6845ff9a6c48ff8f6245ff886149ff946a49ff96694bff8e6346ff8b6248ff8d664fff865f48ff8e674fff8a634cff8b644eff835e4aff86624dff9b7056ff88614cff86614dff825b49ff825d4aff815c49ff825d4aff85604aff8d6853ff90694eff88614cff815d4aff835f4dff845e4bff87634eff86614cff8a624eff875c48ff866148ffa07456ff8c6146ffa17550ff9c6f50ff986d52ff9c7051ffa4734dff8f634aff9c6f4bffa67652ffa7744dff875f4aff95684bff966850ff976c51ff9a7154ff886556ff876350ff806155ff8c7069ff96766cff9c7d74ffa17757ff976f52ff966c4dff9b7051ff996e50ffa17655ff9b7051ff9f7354ff9a6d50ff986d4fff996e51ffa07453ff94694dff936445ffc56b2effb25f2bffa95523ffa95623ff8f451cff7c3a17ff753a1aff894b24ffab6230ffa95d30ff9d592fff955730ff9e5f34ffa06435ffe9ac6cffbc8249ffe1a763fff9d082ffd39d5affd4a25cffffe395fffad387ffffe696ffffcf7fffa17351ff986e51ff966d50ff966d50ff9a7152ffa5795bff976b4affa17657ff966d4fff986e51ff956a4cffa97851ff8f664affa97e5eff916441ff9b6e49ff9a673dff895a3cff976745ff84563aff8e5b36ff875636ff996843ff895a3bff9a663dff84573dff986540ff855436ff8b5a39ff976847ff855636ff895a38ff9f6d46ff996943ffa27148ff9e6f4cff8a5c3eff986b4eff946b53ff9a6a48ff885d44ff9a6f4fff876148ff8b654cff926b50ff8b644dff8c654dff8a654dff86614aff845e4bff88624eff866049ff876149ff88634fff85604dff8c6751ff8f6b54ff896450ff86614eff845e4aff92684eff90674eff946a51ffa0724eff956a4cff92674cffad7d54ff8c624aff865c46ff8f654bff986b4bffa47552ffa47451ff976b50ffaa7b59ff8f674dff966d56ff9c725dff9c7159ff8e6c62ff917065ff947365ff907066ff967464ff8f7a77ff907672ff927973ff907b77ff937a77ff977f79ff996e52ff9e7355ff9d7256ff9c7154ff9c7153ff956a4affa17657ff956a4eff956d4fff9a7051ff9d7254ff9c7153ffa17555ff9e7150ffc4692dffb25d29ffac5927ffaa5627ff954a1dff7e3a14ffb16c38ffa5612bffa05829ffa25a2dff9f592dff90512bff9c6139ffc3854fffc3884efffcc77effa7743bfffed486ffb38547ffffe79cfffbda8ffff2ca7ffffbd68affe1a158ffb5865dffac8263ffa37957ff9a7154ff9a7153ffa47a59ff996b4fff8a6143ff9e7352ff9b7153ff9a6e4eff9a6d4cffa07655ff9a6e4dffa2734dff9f6f4dffa3734aff986744ff9b6b4bff996641ff926340ff8d5d3fff9e6b44ff9d6a49ff9f6c47ff926341ff9a6841ff9a6842ffa17250ff9f6e45ff976741ff976844ffa97854ffa9774fffab7a51ffa87852ffaf7e55ffa07451ffa17558ffa17351ffa47957ffa87e5dffa07657ff926950ff8d634bff936a52ff906750ff956f56ff8f6851ff916b52ff86614dff8e684fff86614cff88624fff896450ff87624fff8d6652ff8a6552ff9b7257ff916750ffb17f58ff9e7255ffa2785bffb2835eff906752ff91674cff9b7257ff98715aff88665aff917268ff9c7768ff967a74ff977970ff8f736cff97796fff937366ff9b7b71ff9d7d72ff977769ff92746cff8f746cff947770ff93776eff907770ff927a76ff927873ff947b75ff907c7aff9a817bff967e78ff9f7357ff9a6f51ff966c53ff9d7557ff966d50ff9c7154ff976d4fff9d7455ff966d51ff91684dff8f674aff9d7356ff8f6649ffb1825effb05e27ffb25e25ffac5a28ffa85624ffa15328ffb16634ffa7612dffa25927ff9d5324ffaa5b28ff985225ff9d5c30ffaf6d37ffe9a55effba8045ffe1a566fffac87bffce9e56ffffd98cfffedb8dffffeca1ffeac57bffffeb9fffe4b163ffc08f54ff956e53ff956d53ff87604bff986e52ffb7875fff865e46ff78513aff8d644bff91674fff926343ff936746ff946b4fff976b4dff966b4fffa27350ffa2704bff906140ff946543ff976540ff966744ff89593fff986641ff906144ff936442ff98694aff906144ff986947ff94664bff976747ff996a48ffa5714cff906448ffa0704cff946441ff9d6d4eff91654bff946948ff936750ff9b6e51ff88614eff92684cff926951ff936c53ff7f5946ff88624eff876150ff866150ff87624eff8a6550ff8a6253ff87604fff8b6856ff896654ff82604fff866250ff87634fff98715aff886961ff8e736eff9d7f74ffa28273ff937b77ff9c8178ff937b7aff886e6bff947d79ff8a726dff8c736fff937873ff9d8077ff977c76ff997d74ff9a7f76ff967a72ff94766dff92776fff987e77ff8f7671ff927772ff8f7670ff937873ff967b74ff967b74ff9a817aff927a74ff967d77ff9a817cff937d79ff927c78ffa1765bff996f52ff9b7055ff9c7255ff946b4eff966c52ffa2785cff9d7357ff986f54ff966d53ff9c7255ff986f54ff936b4cffa67955ffa45223ffae5b28ffae5a26ffa95724ff924315ffb66d34ffa96028ffad612affae5f2dffa95a26ffa05726ff9c5627ffca803cffedaa63fff6b96dffcf9457fff3bd6effffd382ffffdd8cffffe192ffffe89bfffbdc90ffffe595fffcd382ffb7804bff755648ff735448ff805947ff795747ff7b5644ff8b644dff956b4aff966d50ff886149ff7f5746ff835d46ff7f5b47ff8b6043ffa97955ffbd8e64ffb58454ffb6855bffac7b51ff9c6c47ff9d6d46ff8d5e3effa3724cffa07050ff976a4dffa47450ff976c4dffa47352ff936a4dff946747ff9c6f50ffa16f4bff8b6450ff94674bff8f654eff936549ff875f4bff8f654bff805b4aff86614dff9a6f54ff855f4cff89634fff8b6552ff866350ff8b6757ff8b6551ff966f56ffa27a5cffad8568ffb88a6affb88c6affb98d6affbb8d67ffb68f6fffa58574ff9e8172ffad8569ff917b77ff8b797aff8e7878ff8b7775ff927b78ff917c78ff917976ff8f7774ff907b78ff947870ff9f8178ffa3857cff9c827aff937a77ff927670ff917974ff977b75ff927a74ff977c74ff937c77ff947a76ff8e7874ff917873ff9f827bff917a77ff937975ff967d76ff967c77ffa58b80ff9d837bff927d7aff8e7a76ff99735fff9e7860ffa27a5fff9d745aff9f755bffa4795cffa77d5effa4795aff9f7456ffa87d5dff9c7055ff956c51ff90674dff8f664cffb65b28ff9d4a19ffb25d28ffb15d27ffae5e28ffb1662dffb5672bff9c5222ff954a1effa1511fffa05625ff955124ffd1803bffeb9c4effe8a153ffe8a559ffebac61ffebb365ffffdd8bfffedc8bffffe191ffffe395fffad382ffffce7aff855a3aff785648ff7a5a48ff8e684cffaa7f5cffaf815bff865f46ff7b5741ff846047ff92694eff9f7353ffb0805affbd8d61ffba895effb8865affc19062ffb98958ffb07f54ffb28054ffb68356ffb48256ffb7865bffa67851ffa77752ff875d46ff9d6b4aff835945ff895f46ff87624eff8d6249ff8e634aff976748ff8b614cff9d6f53ff8a6755ff8c6452ff977160ff8f6e60ff916e61ff866356ff816054ff825e4fff7a5c53ff8b6752ffb88d69ffc0936cffbe926affbc926cffb69070ffb68c6cffc49c7cffa68877ff917d7cff8e7e82ff8f7e7fff907e7fff907f7eff917d7bff917e7eff8d7b7bff927c77ff8d7b7cff8e7a7aff927c7aff907978ff8d7a78ff907c7aff917975ff8e7878ff8d7979ff8e7977ff907b7aff907877ff927c79ff967d78ff8d7775ff917b78ff917976ff927c77ff8e7b77ff8f7874ff927a75ff927979ff977e78ff937d75ff8e7a77ff947e79ff967f77ff8f7c78ff917d79ff97766eff95766dff917369ff92736eff987770ff997871ff93736dff98766dff967263ff987360ff97725cffa07860ffa27a5effaf8467ffaf6b45ffbb642dffb8622bffac5723ffb8672fffb96a2effb16229ff944920ff954b22ff9f4f1dffa15523ff7b370fffae682fffe3984dffffc973fff1b264fffec576ffffd481ffffdd89ffffe08dffffdf8efffed989ffffde8bfff0b361ffbe8e63ffb88d65ffbb8e62ffbc8e63ffb88960ffba8c60ffb88a5dffba8c60ffb2845affba8a60ffb18157ffb4845affb8885effb9895fffb98b61ffba8a5effb8885cffb18156ffac7d54ffb17e52ffa6754effb07f56ffb5855cffb7865cff9d7e6effa7816cffa88e7effa8938affa89895ffa6918dff9d9293ffa19496ffa5999affa49a9dffa69c9effa79b9effa89d9fffa6999cffa79694ff7b5f57ff7d5e50ffb48d72ffbb9676ffa68978ff968380ff8d8082ff8c8085ff8a7f81ff8a7e81ff8b7d80ff8d7e7fff8e7e7fff8c7e81ff8b7d7fff8b7d7eff8a7c7dff8a7c7fff8c7c7bff8c7b7dff8a7a7bff8e7b7aff887a7aff8d7a79ff8d7b7aff8d7878ff8c7b7cff8d7b79ff8d7978ff8d7a78ff8c7a79ff907a79ff8d7a78ff8f7c79ff8b7978ff8e7a78ff8d7775ff98807dff9b817aff927d78ff8c7a78ff917b77ff8d7876ff8d7979ff8e7978ff8e7a77ff897978ff8d7b79ff917f7cff8b7a79ff8b7a77ff96776eff95756bff8f706bff96776fff8f706bff94756fff92736dff91726bff95756fff8f726bff8d706bff967770ff94756bff92736dff987467ffaf5d27ffbc652bffb66028ffb06126ffab5d25ffac5d25ff9c5123ff9b5126ffa5521fffa0511fffa15828ff89481cffd98f47ffe79f53fffbbc68ffe9b266ffe1a75effeab76cfff8cb7bffffe093ffffe69cffffe799fff8bc68ffcd9966ffbc8e64ffbd8f63ffbc8e64ffbc8e62ffbd8f63ffbc8d62ffbc8e63ffb7895effbd8d5fffb9895effb7865dffb18259ffb8895fffb5875dffb9895dffb3845bffb1825bffb7875effad7e53ffa67752ffb1825cffa67a54ffc29264ffa2999dffa29598ffa3999bffa39a9fffa49a9fffa1969affa09699ffa49697ffa79b9dffa79ba0ffa69c9fffa69b9dffa79c9effa89c9fffa79b9effa79b9cffa79d9effa59c9effa99ea0ffa79c9fffa99ea2ffa99d9fffa89d9dffa79b9affa49997ffa19595ff9e9093ff988a8dff928487ff8e8083ff8c7f82ff8c7e81ff8c7e81ff8e7c7dff8a7c7fff917d7cff8c7d7eff8a7c7dff8f7c7cff8b7a7bff8c7b7aff8c7c7dff8e7c7cff8e7c7cff8e7b78ff8c7a7aff907c7aff8d7b7bff8f7b78ff8e7c7bff8f7c7bff907c7aff8d7a79ff917b79ff947e7bff947d7bff8e7a77ff8d7a77ff8e7a79ff8f7b78ff8c7a77ff8b7976ff8c7a78ff8e7b7aff8f7c79ff8f7c79ff93736bff96756dff92736cff8f716cff90726bff957670ff95756eff8e6f6aff94746dff92756fff94756fff91736dff8f716bff93776fff94736bffa25e39ffab5926ffa55624ffad5d22ffb46026ffb36129ff9e5121ffa25020ffa4521eff964719ff9d5223ff803b13ffbc7d42ffa7682effde9f59ffa3692fffb57c42ffc38c53ffd5a762ffffe095fffee196fff6d387fff1b46cffb68e7effb48b68ffba8c61ffbb8d65ffbb8d63ffbc8d63ffbc8e64ffba8c62ffb98b61ffba8b5fffbc8d62ffb8875bffb6875dffb6875dffb8895effb6875dffb1835dffae805affae7f5affaa7c55ffab7d57ffb2845effb2855dffb28259ffa69997ffa0969bffa2989cffa39da0ffa39a9effa1999dffa0979affa59596ffa49ca1ffa6999cffa49b9fffa69a9dffa89d9fffa89d9fffa79c9effaa9ea0ffa99ea0ffa99ea0ffa99ea0ffa99ea0ffaa9ea0ffaca0a2ffaca0a1ffaca0a0ffaa9f9fffab9fa0ffa99fa1ffa89ea0ffa89ea0ffa89ea0ffa89ea0ffa69c9effa49b9dff9d9295ff978c8fff938487ff908184ff8b7e81ff8d7f80ff8c7b7bff8e7e7dff8f7d7fff907d7dff8e7d7cff8f7c7bff8d7d7cff8f7d7cff8b7b7dff907c7aff8f7c7bff8e7c7bff927c7bff8f7c7bff8c797aff8c7b7cff8e7b7aff937d7aff947f7bff927e7cff94807aff917d7bff8e7c7aff907e7bff907e7bff8f7d7aff8e7c79ff95756eff91736cff967771ff9b7a6fff91736cff94756cff8f736dff967670ff98766dff96766fff97776fff94756eff977870ff96776eff94756dff9c7267ffaf5929ffb15e26ffb6652bffb96329ffad5b28ffa05429ffa95724ffa35222ff99481eff98481aff92481dffa96c38ff985f30ff885425ffda9f60ffefbe7affdfad70fff6cb81ffefd086ffffe89cffffe393fff0bc74ffa89b9affa19a9dffa39a9effa79a9effa89b9effa69b9fffa59b9effa39ba0ffa39a9fffa39aa0ffa49ba0ffa29a9fffa49ba0ffa49ba0ffa59ca1ffa79ca1ffa59898ff8e6c57ff976c4bff9c704dffa67957ffaf8259ffb2937bffa2989bffa59ca0ffa3999effa1989affa49ea1ffa39ca0ffa49b9fffa2999bffa69b9effa29da0ffa59b9effa49b9dffa49ca0ffa79da1ffa89d9fffa89d9fffa89d9fffa89ea0ffa79d9fffa79d9fffa89ea0ffaa9ea0ffa89ea0ffa99da0ffa89ea0ffa79d9fffa79d9fffa79d9fffa79d9fffa79d9fffa89fa0ffa89fa0ffa79d9fffa3999dffa49b9fffa69ca0ffa49a9cffa2999dffa39b9fffa29a9dff9d9599ffa29a9fffa19799ffa1979bffa09498ff9b9092ff96898aff918484ff8f8081ff8f8081ff8c7e7fff8e7f80ff907f7eff8e7e7dff8c7c7bff8b7b7cff8c7d7aff8c7c7aff8c7b7cff8b7a7dff8e7d7dff927e7bff96827dff95817dff8d7d7aff8b7a79ff887b79ff8f7269ff93766fff8f726eff95766fff90736fff8e726fff90726cff94766fff917673ff9d8580ffa58d88ffa28d8bff9f8d8fffa08f8fff9d8d8effa19394ffa8887fffb15f29ffb15d26ffbb662bffb25e27ff9f5024ffb6632effa95929ff9c4c20ff8f4016ff96471cff9a5522ff9d5e2cffa46c3affa8743dffdead6bffd5a164fff6c982fffbd58bfffad78bfffbd384fff0c690ffad9e9fffa29ba1ffa49b9fffa49b9fffa49b9fffa49b9fffa49b9fffa49b9fffa49b9fffa59ca0ffa59ca0ffa49a9fffa69b9fffa69ca0ffa49ca0ffa59ca0ffa39a9effa2989dffa59a9cffa58b7effac9180ffa79c9fffa59ca0ffa49a9fffa79da0ffa79da1ffa79b9cffa79da2ffa79ea2ffa39c9fffa59da0ffa69d9fffa49da1ffa59ca0ffa49d9fffa49ca0ffa69da1ffa59ea0ffa89fa1ffa79e9fffa89fa0ffa79d9fffa89ea0ffa89ea1ffa79da1ffa79da1ffa79da1ffa69da0ffa69da0ffa79da0ffa79da0ffa79da0ffa79da0ffa89ea0ffa89ea0ffa89ea0ffa59b9fffa59ba0ffa59ca0ffa59c9fffa49a9fffa49b9effa59b9fffa3999effa19a9effa19a9effa19aa0ffa2989dffa0999dffa0999dff9f989effa0979dffa2989dffa0999dffa0999dffa1989cffa0979bffa0979bff9e969aff9c9498ff968d91ff93888cff918588ff8f8386ff8f8184ff8e8081ff8c7e80ff8e7e80ff8f7e7eff8c7d7dffa19696ffa19598ffa19699ffa19494ffa19799ffa2999bffa2999bffa2989cffa3999dffa1979cffa99590ffa3989dffa29698ff9e9294ffa29596ffa2969affa19799ffa58f8cffaa6138ffb4602affb8622affa15121ffa15224ffa55626ff9b4b1eff914720ff92471cff974b1fff975121ffc6864dffaf753dffc78d4effeeb36cffce9a56ffffd690ffffd78bfff5c372fff8c475ffb6a192ffa19ba2ffa19aa0ffa19aa0ffa19aa0ffa29ba1ffa29ba1ffa29ba1ffa39ba1ffa29a9effa29a9effa59ca0ffa69b9fffa59ca0ffa49ca0ffa59ca0ffa59b9fffa49a9effa49b9fffa59b9fffa49b9fffa79da1ffa79ea3ffa49b9fffa69da0ffa99fa3ffa79d9effa69ea1ffa69fa2ffa59ea0ffa79fa1ffa89fa3ffa69ea1ffa7a0a2ffa9a1a2ffa8a1a3ffa59ea0ffa8a1a3ffa7a0a1ffa69f9fffa8a1a3ffa8a1a3ffa8a1a2ffa8a0a1ffa69fa2ffa59ea1ffa59ca0ffa49ca0ffa49ca0ffa49ca0ffa59ea1ffa69da1ffa69da1ffa79da0ffa79d9fffa79d9fffa59ca0ffa59ca0ffa59ca0ffa59c9fffa69ca0ffa39a9cffa59ca0ffa49a9fffa39b9fffa39b9fffa19aa0ffa1999dffa19a9effa0999dffa0999effa1999effa1999dffa0999dffa0999dffa1999dffa1999dff9f989cff9f989cff9f989cff9e989bff9e989cff9f989cff9e979aff9e979aff9c9498ff978f95ff968e94ff958d94ff978d93ffa0979cffa0989bff9f989cffa3989bffa2999dffa0999dffa2979affa1979bffa2989fffa09599ffab9993ffa1989bffa29798ff9d9393ffa2979bffa1979affa1979aff9f9394ffa59291ffac7356ffbf672dffb15d29ff96481cffb25f2cff964615ff8d4118ff7d330dff91451cff8f4c20ffa96a36ffbd844dffae7745ffebb376ffddac67ffeec077fff7c77bfffbd482fffcce80ffbaa798ffa19c9fffa29b9fffa29b9fffa59ca0ffa49ca0ffa59ca0ffa59ca0ffa49ca0ffa59ca0ffa59ca0ffa59ea1ffa49ca0ffa59ea1ffa59ea1ffa69fa3ffa49da1ffa69ca1ffa69da1ffa59c9effa59c9fffa59ea1ffa7a0a3ffa59c9effa79fa0ffaaa1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a2ffa8a1a3ffa8a1a3ffa7a0a1ffa9a2a4ffaba2a2ffa9a2a4ffa9a2a4ffaba4a5ffaaa3a4ffaba4a5ffa9a2a3ffa9a2a4ffaaa3a2ffaca3a3ffaca3a3ffaca3a3ffaca3a4ffaca5a6ffaaa3a5ffa9a1a2ffa7a0a1ffa69ea0ffa59ea1ffa59e9fffa69da0ffa59ca1ffa59ca0ffa39a9effa39a9effa59b9fffa59ca0ffa2999dffa49ca0ffa59ca0ffa39a9effa49b9fffa29ba1ffa0999effa19aa0ffa1999dffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dff9f989cff9f989cff9f989cff9f979bff9f989cff9f989cff9f979bff9e979aff9e979aff9e979aff9d959bff9c949aff9d9499ffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dff9f989cffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dffa1999dffa1999fffa1999effa2989dffa4999effa29a9eff9d8883ffbb7954ff92481fff8a411affbf662aff9f4d19ff934418ff8a3e15ff803811ff8f4d1fffb17743ff90592cffe7b370ffd5a266ffd7a267ffedbc71fff8c97afffcca89ffa69f9effa29da0ffa39b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49da0ffa49da0ffa59ea2ffa59ea1ffa59ea1ffa49da1ffa69fa3ffa69fa3ffa69fa3ffa59ea0ffa59c9fffa89ea0ffa69e9fffa8a1a2ffa8a1a3ffa7a1a2ffa9a0a2ffaaa1a1ffa9a2a3ffa9a2a4ffa8a1a3ffa9a2a4ffa8a1a3ffa9a2a4ffaba1a3ffa9a2a4ffa9a2a4ffaba2a2ffa9a2a4ffa9a2a4ffaca3a3ffaca3a3ffaba4a3ffaca3a3ffaba4a3ffaca3a3ffaca4a3ffaba4a3ffaba4a3ffaba4a3ffada4a3ffada4a3ffada4a3ffada4a3ffaca3a3ffada4a3ffaca2a3ffaba1a3ffa99fa2ffa69ca0ffa49a9fffa49c9fffa39ca0ffa29b9fffa39a9effa29b9fffa2999effa49b9fffa49b9fffa19aa0ffa19a9effa19aa0ffa1999effa0999dffa1999dffa0999dffa0999dffa0999dff9f989cffa0999dff9f989cff9f989cff9f989cff9f989bff9f989aff9f989aff9f989cff9f989cff9e979aff9e979aff9f989cff9c9599ff9b949affa19aa0ffa19aa0ffa19aa0ffa09aa0ffa19ca1ffa19ca1ffa19ca0ffa29ba0ffa29ba0ffa29ba0ffa29ba0ffa29ba0ffa29ba0ffa29ba0ffa29ba0ffa29ba0ffa29ba1ffa19aa0ffa29aa0ffa19aa0ffa29aa1ffa3999dffb3958dffa66342ff924319ff954216ffb05d26ff934416ff9d4f1effab6735ffb57b44ffcf9960ffc38f55ffb37f4affc78e51ffe3ac62fffacf7fffd0b29dffa39da0ffa39da0ffa49ca0ffa49ca0ffa49ca0ffa59ea1ffa59ea1ffa59ea1ffa59ea1ffa59ea1ffa69fa3ffa69fa3ffa69fa3ffa7a0a4ffa7a0a2ffa7a0a2ffa69fa1ffa8a0a2ffa89fa1ffa7a0a2ffa8a1a3ffa9a2a4ffa8a1a3ffa9a2a3ffaba2a3ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffaba1a3ffa9a2a4ffa9a2a4ffaaa3a2ffaba4a5ffaba4a5ffaba4a3ffaca3a3ffafa6a5ffafa5a4ffafa6a4ffafa6a4ffafa6a3ffafa6a3ffafa6a3ffafa6a4ffafa6a3ffafa6a3ffafa6a3ffafa6a3ffafa6a3ffafa6a3ffafa6a3ffaea5a2ffaea5a3ffada3a2ffaba2a0ffaba2a1ffa69e9effa49b9fffa29a9effa29ba0ffa0999effa29b9fffa49a9fffa39aa0ffa19aa0ffa19aa0ffa19aa0ffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dffa0999dff9f989cffa1999cffa1999dffa2989dff9f989aff9f989cff9f989cff9e979aff9e979aff9e979aff9e979aff9c9498ffa19c9fffa19c9fffa19c9fffa19ca1ffa19ca1ffa29ba0ffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca2ffa79ca0ffa89598ffaa9692ffb8938affa9623bffc16b33ffb96127ffad622cffb67e4affc9925bffbf8a50ffd7a465ffc88e4affe6b167fffed180ffddb998ffa49ca0ffa49ca0ffa59ea1ffa59ea1ffa59ea1ffa59ea1ffa59ea1ffa69fa3ffa69fa3ffa7a0a4ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa7a0a2ffa8a1a3ffa79fa0ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a3ffaba2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a3a4ffaba3a5ffaba1a1ffada3a5ffaaa4a5ffaca3a3ffaca3a5ffaba4a3ffaba4a3ffaea5a4ffafa6a3ffafa6a3ffb1a8a6ffb1a8a5ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb2a9a4ffb1a8a4ffb1a8a4ffafa6a3ffafa6a2ffaea5a2ffaea5a2ffaea5a3ffaca2a1ffaba1a1ffa59c9effa59c9fffa69b9effa69aa0ffa49ba0ffa39aa0ffa399a1ff9f989cffa0989dffa0999dffa0999dffa0999dffa0999dffa0999dff9f989cffa0999dffa1999cffa0999dff9f989aff9f989affa0989cffa1999bffa1999bffa1999bffa0989aff9e9798ff9e979affa19c9fffa19c9fffa19c9fffa19ca1ffa19ca1ffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49d9fffa49d9effa59ca1ffa79a9dffb79b96ffc79c82ffb17742ffc08851ffba8852ffb17c42ffce924ffff5c073fff1b973ffb7a19effa59ea1ffa59ea1ffa69fa3ffa69fa3ffa8a1a3ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a3ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa69fa0ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a3ffa8a1a3ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffaca2a4ffaba4a5ffaba2a2ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaba4a3ffaea5a4ffafa6a3ffb0a7a4ffb1a8a3ffb2aaa5ffb5aaa4ffb5aaa4ffb5aaa4ffb5aaa4ffb5aaa4ffb4aba5ffb4aba5ffb4aba5ffb4aba4ffb5aca5ffb5aca5ffb6aca5ffb6aca5ffb4a9a3ffb2aaa3ffb1a9a1ffb0a8a1ffb0a7a3ffafa6a3ffaea5a2ffaea5a1ffada4a1ffaea5a2ffaca4a1ffaea5a2ffb1a5a2ffafa4a1ffafa4a1ffb1a4a0ffb1a49fffafa3a1ffa89d9dffa2999dffa0999dff9f989cff9f989cff9f989cff9f989cff9f989affa0999bffa0989affa39a9cffa39a9cffa2999bffa2999bff9f989aff9f989aff9e979affa19c9fffa19c9fffa19c9fffa19c9fffa29c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa39c9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49da1ffa69da1ffb89a8affc48e58ffd5a169ffecb878ffc48c50fff1b976ffdfa95bffeeb776ffaca0a0ffa59ea2ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa7a0a4ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffaba4a3ffaca3a3ffaca3a3ffaca3a3ffaea5a4ffaea5a4ffafa6a5ffafa6a3ffb0a7a2ffb2aaa5ffb5aaa5ffb5aba4ffb6aca5ffb6aca5ffb6aca5ffb6aca5ffb6aca4ffb6aca4ffb6aca4ffb6aca4ffb8ada4ffb8ada4ffb9aea5ffb9aea5ffb9aea5ffb7ada4ffb6aca3ffb6aca3ffb5aaa4ffb4aba4ffb3aaa3ffb3a8a1ffb0a8a2ffb0a7a3ffb0a7a2ffb2a7a2ffb2a7a2ffb1a6a1ffb1a6a1ffb1a6a1ffb1a6a0ffb1a6a0ffb1a6a0ffb1a6a2ffb0a5a3ffaaa19fffa0999bff9f989cff9f989cff9f989aff9f989affa2999bffa2999bffa2999bffa2999bffa2999bffa2999bffa2999bffa2999bffa2999bffa19c9fffa19c9fffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa39c9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49d9fffa59ea1ffa89da0ffbd9675ffa06e3cffb88653ffdeac6bffc1884effe4ac69fff5c073ffd5b497ffa69fa0ffa69fa1ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffaba4a3ffaca3a3ffada5a4ffafa6a5ffafa6a3ffafa6a3ffafa6a3ffb1a8a4ffb2aaa5ffb4aba6ffb6aca5ffb6aca5ffb8ada6ffb9aea7ffb9aea7ffb8ada6ffb8ada5ffb9aea5ffb9aea5ffb9aea5ffb9aea5ffbbb0a7ffbbb0a7ffbbb0a7ffbbb0a7ffbaafa6ffb9aea5ffb8ada4ffb8ada4ffb6aca4ffb7ada5ffb4a9a3ffb2a9a2ffb1a7a1ffb1a8a3ffb3a8a2ffb3a8a1ffafa6a1ffaea5a0ffaca4a0ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffaca3a0ffaba3a0ffaba2a1ffa39b9dff9f989cff9f989aff9f989aff9f989aff9f989affa2999bffa2999bffa1999bffa2999bffa2999bffa2999bffa2999bffa19c9fffa19c9fffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa59ea0ffa59e9fffa59ea0ffab9d9effa87648ffa27444ffa57747ffbc8750ffdba164ffdaa25cffe8ac64ffbfaa9effa69fa0ffa69fa0ffa69fa2ffa69fa2ffa69fa3ffa69fa3ffa69fa3ffa69fa3ffa7a0a4ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a3ffa9a3a2ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffaba3a2ffaca3a3ffaea5a3ffafa6a3ffafa6a3ffb1a8a4ffb1a8a4ffb2a9a5ffb2aaa5ffb5aba4ffb6aca5ffb8ada6ffb9aea7ffb9aea7ffb9aea7ffb9aea7ffb9aea7ffb9aea7ffbaafa6ffbbb0a7ffbbb0a8ffbbb1a6ffbeb1a7ffbeb1a6ffbcb2a6ffbcb2a6ffbcb2a7ffbcafa4ffbaafa4ffb9aea5ffb9aea5ffb8ada4ffb8ada4ffb6aca3ffb5aba2ffb5aba4ffb3aaa3ffb1a9a1ffb1a9a2ffb1a9a1ffb2aaa3ffb1aaa3ffafa8a1ffafa8a1ffaea6a1ffaea5a0ffaea5a0ffada5a0ffaca6a0ffa79e9dff9f989aff9f989aff9f989cff9f989aff9f989cff9f989affa2999bffa2999bffa1999bff9f989affa2999bffa19c9fffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca1ffa49d9effa49c9fffa9a2a2ffa49da1ffa49ca0ffa49d9fffa49d9effa59e9fffa49e9fffa59ea0ffab9c91ffa37547ffd5a267ffdfaa6affdc9d5affa06129ffcd8845ffde9e6bffaaa09fffa69fa0ffa69fa0ffa69fa0ffa69fa0ffa69fa1ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a4ffa9a2a4ffa9a3a3ffa9a3a4ffa9a2a4ffa9a3a3ffa9a3a2ffa9a2a4ffa9a2a4ffa9a2a4ffa9a2a4ffaaa2a4ffaba2a2ffaca3a3ffaca3a3ffaea5a2ffafa6a3ffb0a7a4ffb2a9a4ffb2aaa5ffb5aaa6ffb6aca5ffb6aca5ffb8aea6ffb9aea7ffbbb0a7ffbbb0a7ffb9afa7ffb9aea7ffbaaea7ffbaaea5ffb9aea5ffbbb0a7ffbbb1a6ffbfb2a8ffbfb2a8ffc0b4a9ffc0b4a9ffbeb1a6ffbeb1a6ffbcb2a6ffbcb2a6ffbbb1a5ffbbb1a5ffbaafa5ffbbb0a5ffb9afa3ffb8ada2ffb6aca3ffb6aca3ffb5aaa4ffb4a9a3ffb3a9a2ffb4aaa3ffb3ada2ffb0aba1ffafa9a1ffaea8a0ffaea8a0ffaea8a0ffaea8a2ffaba7a1ffaba7a1ffa29c9cff9f989dff9f989cff9f989aff9f989aff9f989aff9f989aff9f989aff9f989aff9f989affa0989affa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa39ca0ffa39ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca1ffa69a97ffa3907dffbda68dffb6a798ffada3a4ffa59da0ffa59e9fffa59e9fffaa9e9bffa2856eff9d754bff9a7045ffb38455ffce9a63ffe09d5cffd6914bffbf7331ffd8a787ffa8a0a0ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a2ffa9a3a4ffa9a2a4ffa9a2a4ffaaa3a2ffaba4a3ffaba4a3ffaba4a3ffaba4a3ffaaa3a4ffaaa3a3ffaaa3a3ffaba4a3ffaba4a3ffaba4a3ffaca3a3ffaea5a3ffaea5a3ffafa6a3ffb1a8a5ffb3aaa5ffb3a9a5ffb5aaa5ffb6aca5ffb6aca4ffb9aea8ffbbb0a7ffbbb0a7ffbbb0a7ffbcb1a8ffbaaea5ffbbaea5ffbbafa6ffbbb0a7ffbcb2a7ffbeb3a7ffc0b4a8ffc3b5a8ffc2b6a7ffc1b5a8ffc0b4a7ffbfb3a7ffbeb1a6ffbdb2a6ffbdb2a6ffbdb2a6ffbeb2a5ffbeb1a6ffbdb2a5ffbab0a4ffb9aea5ffb8aea4ffb7ada3ffb7aca3ffb5aba2ffb5aba2ffb4aba2ffb5aca3ffafaba2ffaea8a0ffaea8a0ffaea8a0ffada7a0ffada79fffada8a0ffb0a7a0ffa8a09eff9f989bff9f989bff9f989aff9f989aff9f989aff9f989aff9f989aff9e9799ff9f989affa29b9fffa39b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29ba0ffa49ca0ffa49c9fffa59ca0ff604c43ff694d36ffc09669ffeabf82ffcdb192ffa69a98ffa39a9bffa98d73ffa77a4affac7e51ffac8157ffa97d4dffaf7e48ffbf884dffb17538ffeca155ffba763dffb1a09bffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a3ffa8a1a2ffa8a1a1ffa9a3a2ffa9a2a4ffa9a2a4ffaba4a5ffaba4a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaea5a4ffaea5a2ffafa6a3ffb0a7a3ffb1a8a3ffb2aaa5ffb4a9a5ffb6aba6ffb6aca5ffb7aca5ffb8ada4ffb9aea5ffbbb0a7ffbbb0a7ffbbb0a7ffbbb0a7ffbbb0a7ffbcb2a6ffc1b4a8ffc2b5a8ffc3b6a7ffc5b7a8ffc4b8a8ffc4b8a8ffc2b5a8ffc0b4a7ffc0b4a7ffbfb3a5ffbfb3a5ffbfb3a5ffc0b4a6ffc0b4a7ffc0b4a7ffbfb3a5ffbcb2a4ffbbb1a5ffbbb0a5ffb9afa3ffb9aea4ffb8ada3ffb6aca2ffb6aca3ffb7aca3ffb2a99fffb1aaa2ffafa9a1ffafa9a1ffb0aaa3ffafa9a1ffafa9a1ffb0a9a1ffaba29dffaea59effa39a99ff9f989aff9f989aff9f989aff9f989aff9e9799ff9e979aff9e9799ffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29ba0ffab9a97ff876345ff9a785affab8567ffc29f7bff5a3b25ffd2a46dffdfb379ffdeb27bffc3986cffaf8154ffab7e4fffb48553ffbb8b56ffd09c61ffdca463ffde9c55ffe3994effee9f51ffd29b76ffb1a4a1ffa9a1a1ffa7a0a0ffa7a0a0ffa7a0a0ffa7a0a1ffa7a0a1ffa7a0a2ffa8a1a3ffa8a1a3ffa8a2a1ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffaaa3a2ffaba2a2ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffafa6a3ffb0a7a4ffb1a8a3ffb2a9a4ffb2aaa5ffb5aaa4ffb6aca5ffb6aca5ffb7aca5ffb8ada4ffb9aea5ffbbaea5ffbcb0a7ffbbb0a7ffbcb1a5ffbeb1a5ffc2b3a7ffc6b7a6ffc6b7a6ffc7b8a9ffc8b9a8ffc8b9a8ffc5b7a8ffc3b6a8ffc2b6a8ffc1b5a8ffc1b5a8ffc1b5a8ffc3b6a9ffc3b6a8ffc3b6a7ffc1b5a7ffc1b4a7ffbfb3a5ffbcb2a4ffbcb2a4ffbcb2a4ffbbb1a3ffbaafa4ffb9aea3ffb9aea3ffb9aea3ffb8ada2ffb4aba2ffb2a9a0ffb4aca3ffb2aaa1ffb3aba2ffb2aaa1ffb1a99fffaea6a1ffafa69fffaca39dffa39a9cff9f9799ff9e9798ff9e9798ff9e9798ff9e9799ff9e9798ffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa49a9fff8e6440ff9b724bffb48757ffce9a63ffb98654ff49210eff845731ffe3b378ffecbd7fffe6b878ffdead72ffcd9b63ffbc8a58ffca9760ffd4a063ffe1ab68ffe8b16bffe6aa5cffeca75cffb9a399ffa9a0a0ffa7a0a0ffa7a0a0ffa8a2a1ffa8a2a1ffa8a1a2ffa8a1a2ffa8a1a3ffa8a1a2ffa8a2a1ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffaba2a2ffaca3a4ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaea5a3ffaea5a2ffaea5a2ffafa6a3ffafa6a3ffafa6a4ffafa6a3ffafa6a3ffafa6a3ffafa6a3ffb0a7a3ffb1a8a4ffb2a9a4ffb2aaa3ffb4aba4ffb5aaa4ffb6aca5ffb6aca5ffb8ada4ffb8ada4ffb8ada4ffb9aea5ffbbaea5ffbdaea4ffbdb0a6ffbeb1a6ffc2b3a7ffc7b7a8ffcab9aaffcab9a8ffc8b9a8ffcab9a8ffc9b9a8ffc8b9a8ffc7b8a8ffc7b8a8ffc7b8a8ffc7b8a8ffc7b8a8ffc6b8a8ffc7b8a8ffc6b7a8ffc3b6a7ffc1b5a7ffc0b4a7ffc0b4a7ffbfb3a5ffbeb2a4ffbcb2a4ffbcb2a4ffbbb1a3ffbab0a3ffbab0a3ffbab0a3ffbbb1a4ffbab0a4ffb6aca1ffb3a8a1ffafa59fffafa59fffaea59fffaea59fffb2a8a1ffaea39effaca29fffa79f9dffa49a9cff9e9798ff9e979aff9e9799ff9e9798ffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29a9bff8b6544ff8c6743ffae8155ffd29e64ffe2ad6dffd9a977ff4c220bffa5744bffdbaa6cffe2b272ffe5b573ffecb772ffd8a261ffd39d60ffe4b06dffe8b56effe6b36dfff4c274ffd89a58ffafa2a0ffa8a1a2ffa8a2a1ffa8a2a1ffa8a2a1ffa8a2a1ffa8a2a1ffa8a2a1ffa8a2a1ffa9a3a2ffa9a3a2ffa9a3a2ffaaa2a2ffaba2a2ffaba2a2ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaea5a3ffaea5a2ffaea5a2ffafa6a3ffafa7a3ffb1a8a4ffb1a8a4ffb1a8a4ffb1a8a4ffb1a8a4ffb1a8a4ffb1a8a5ffb2aaa5ffb2aaa5ffb3aba4ffb5aca5ffb6aca5ffb6aca5ffb6aca4ffb7ada4ffb9aea5ffbaaea5ffbaaea5ffbaaea5ffbcafa4ffbaafa4ffbeb1a6ffc0b3a6ffc4b6a7ffcab9aaffcab9a8ffcbbaa9ffcbbaa9ffcbbaa9ffc9b9a8ffc9b9a8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8b9a8ffc7b8a7ffc7b8a7ffc6b7a8ffc6b7a8ffc3b6a7ffc1b5a6ffc1b5a8ffc1b4a7ffc0b4a7ffc0b4a7ffbeb2a5ffbdb2a4ffbcb2a4ffbcb2a4ffbcb2a4ffbdb3a5ffbdb3a5ffbcb2a4ffb8ada1ffb3a8a0ffb1a5a1ffaea5a0ffafa69fffafa59effaaa19effa89f9effa89f9cffaa9e9cffa99e9effa79c9bffa39a9cffa0989affa19a9cffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa19899ff825b3cff916c4cff95683fffc08d5bffcf9860ffdba664ffe6b174ff72401bff491e0cffa1754cffdfae6effe6b36effeab46effe5b06afff6c57effefbf78ffedbc75ffedbc73ffecba79ffb2a39effa8a2a1ffa8a2a1ffa8a2a1ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffa9a3a2ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffada4a3ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffafa6a3ffafa7a3ffb1a8a3ffb1a9a3ffb2aaa4ffb2a9a3ffb1a9a4ffb1a9a2ffb3aaa3ffb3aaa3ffb5aaa4ffb6aca5ffb6aca5ffb6aca5ffb6aca5ffb8ada6ffb8ada4ffb9aea5ffbbaea5ffbaaea4ffbaaea4ffbcafa4ffbbb0a5ffbeb1a6ffc0b2a6ffc3b5a8ffcab9a8ffcbbaa9ffcbbaa7ffcbbaa7ffcbbba9ffcbbaa9ffcbbaa9ffcab9a8ffc9b9a8ffc9bba9ffc9bba9ffc8baa8ffc9b9a8ffc7b8a7ffc7b8a7ffc6b7a8ffc6b7a8ffc4b6a7ffc4b6a7ffc3b6a7ffc3b6a7ffc2b6a7ffc2b5a6ffc1b5a7ffc0b4a6ffc0b4a5ffc0b4a5ffc1b5a6ffc2b5a6ffc1b5a6ffc0b4a5ffbeb3a5ffb8aea3ffb3a89fffaea59fffaca4a1ffaba29effa9a09dffa99e9cffaa9e9cffa89f9cffa89d9bffa89d9bffa79c9affa69d9affa19a9cffa19a9cffa19c9fffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa19a9dff8b7061ff7c5739ff815b3cff86613fff7a5435ffaa8058ffd29b5dffe7b474ffe8b271ffad7245ff451f10ff4a2b1cff7d583bffb68759ffcb9962ffddac6fffe5b577ffefc079fff0bf75ffeebf7affb4a49effa8a2a1ffa9a2a1ffa9a3a2ffa9a3a2ffa9a3a2ffaaa3a2ffaba2a2ffaba2a2ffaba2a2ffaca3a3ffaca4a1ffaca3a3ffaca3a3ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffafa6a3ffafa6a3ffafa6a3ffafa6a3ffb1a8a3ffb1a8a3ffb2aaa3ffb4a9a3ffb5aaa4ffb5aaa4ffb5aaa4ffb5aaa4ffb6aca4ffb7aca5ffb6aca4ffb7ada5ffb8ada4ffb8ada4ffb9aea5ffb9aea5ffbaafa6ffbbb0a7ffbbb0a7ffbbb0a7ffbaafa6ffbbb1a5ffbeb1a8ffbfb3a7ffc2b5a8ffc9b8a9ffccbbaaffccbca8ffccbca8ffcbbaa7ffccbca8ffccbca8ffcbbaa8ffcab9a8ffc9b9a8ffc8b9a8ffcbbaa9ffc8baa8ffc9b9a8ffc7b8a7ffc7b8a7ffc7b8a8ffc6b7a8ffc6b7a8ffc7b8a9ffc8baa8ffc7b9a7ffc7b8a7ffc6b7a6ffc6b7a7ffc6b7a8ffc6b7a8ffc6b7a7ffc6b7a6ffc5b7a6ffc5b8a7ffc4b8a6ffc2b5a5ffc2b6a6ffb7ada1ffb0a59fffaca29fffaaa19dffaaa19effa9a09bffaaa09dffaba09dffaba09dffaba09bffaba09bffaca19cffa19a9cffa19a9cffa19a9cffa19c9fffa19c9fffa29b9fffa29b9fffa29b9fffa29b9fffa19c9fffa19c9fffa29b9fffa29b9fffa49b9fff856042ff845632ff7e5130ff82552fff8f5f38ff98663bffd09c5effe5b474ffefc180ffeab874ffe3b478ff693c19ff593521ff81654fff361b11ffc09669ffd49e62fff2c077fff1be72fff1c486ffb5a7a2ffaaa3a2ffaaa3a2ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca3a3ffaca4a1ffaca4a1ffaca3a2ffaea5a4ffaea5a2ffaea5a1ffafa6a3ffafa6a3ffb0a7a4ffb0a7a2ffb0a7a2ffb1a8a3ffb1a8a3ffb2a9a4ffb2aaa3ffb3aaa3ffb5aca5ffb6aca5ffb6aca4ffb7ada4ffb7ada5ffb8ada3ffb8ada4ffb9aea5ffb9aea5ffbaafa6ffbaafa6ffbaafa5ffbbafa7ffbbb0a7ffbbb0a7ffbbb1a7ffbcb1a7ffbcb2a6ffbcb2a6ffbeb1a6ffbfb2a7ffc2b5a7ffc9b9aaffccbbaaffccbca9ffccbca8ffccbca8ffccbca8ffcdbda9ffcdbdaaffccbca8ffccbca8ffccbca8ffccbba9ffcbbaa9ffcbbaaaffcab9a9ffc8b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc7b9a8ffc8b9a8ffc8b9a8ffc8b9a8ffc8b9a8ffc8b9a8ffc8b9a8ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc6b9a7ffc5b8a6ffc3b6a5ffc0b4a4ffb7aca3ffb0a69fffaca4a0ffaba29fffaca29fffb0a69fffb4a99fffb3a99effb3a99effb6aa9effb8aba0ffa19a9cffa19a9cffa19a9cffa19a9cffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa49b9eff8f6a4cff895a36ff8c5c34ff966237ffa56f41ffbe894effe7ba7afff1c786fff1c785ffefc27ffff8cd89ffedbd79ffe6ba79ff855d34ff6e4930ff3c1f14ffca9459fff3be76ffefbd70ffe6bd87ffb2a49fffada3a1ffaca3a1ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffada4a2ffaea5a2ffaea5a2ffaea5a2ffafa6a3ffafa6a3ffb0a7a4ffb1a8a3ffb1a8a3ffb1a9a4ffb2aaa5ffb2aaa5ffb2aaa3ffb2aaa3ffb6aba5ffb7aca5ffb8ada6ffb8ada4ffb9aea5ffb9aea5ffb9aea5ffbaafa4ffbab0a6ffbbb0a7ffbbb0a7ffbbb0a7ffbcb2a9ffbcb2a9ffbcb2a8ffbcb2a6ffbeb1a6ffbeb1a6ffbeb2a6ffbfb2a8ffbfb3a6ffc1b5a8ffc4b6a7ffc9baa9ffcebba8ffcdbdaaffcdbdaaffcebeabffcdbdaaffcebeabffcfbea9ffcebea9ffcdbca8ffccbca7ffcdbda8ffcdbda8ffcdbda8ffccbbaaffcab9a9ffcab9a8ffcab9a8ffc8baa8ffc8baa8ffc8baa7ffc9bba8ffc9bba8ffcabba8ffcbbba8ffcbbba8ffcabba8ffc9bba8ffc9bba8ffc9bba8ffc9bba8ffc9bba8ffc9baa7ffc8baa7ffc9b8a7ffc6b8a7ffc2b6a4ffc1b5a6ffbdb2a3ffb5ab9fffb2a89fffb6ac9effbdb1a0ffbdb2a2ffbdb2a2ffbeb2a2ffbcb2a2ffbbb1a1ffa29b9dffa29c9dffa29b9dffa19a9cffa19a9cffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa19c9fffa29b9fffa29b9fffa29b9fffa89794ff89592fff925f35ffa56d36ffdeaa66fff2c584fff7d392fff7d392fff5cf8ffff6ce8cfff3ca88ffecc07effecbe7effe6b577ffe3b272ffcf9b64fff1ba76ffedb86dfff5c375ffdab68affada3a0ffaca4a1ffada4a1ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffaea5a3ffafa6a3ffafa6a3ffb0a7a3ffb0a7a2ffb1a8a3ffb2aaa5ffb2aaa3ffb2aaa3ffb3aba4ffb3aba4ffb3aba4ffb5aaa4ffb6aca5ffb6aca3ffb8aea4ffb9aea4ffbaafa5ffbaafa4ffbbb1a7ffbbb0a7ffbcb2a7ffbcb2a5ffbeb1a6ffbeb1a6ffbeb1a6ffbeb1a6ffbeb1a6ffbfb3a5ffbfb3a5ffc0b4a7ffc1b5a8ffc1b4a7ffc3b4a8ffc4b5a7ffc7b7a7ffcab9a7ffcfbca8ffcdbda8ffcebea9ffd0bfaaffd1bfa8ffd1c1a9ffd2c2aaffd1c1a9ffd1c1a9ffd1c1a9ffd1c1a9ffd1c1a9ffd1c1a9ffd1c1a9ffd1c1a8ffd0bfa8ffcdbda8ffccbca9ffcdbdaaffcdbdaaffccbca8ffcdbda8ffcdbda8ffcdbda8ffcdbda8ffcebea9ffcebda8ffcdbda8ffcdbda8ffccbda9ffcabca8ffcabca7ffcbbba7ffcbbaa7ffc9bba7ffc8baa6ffc7b9a5ffc5b9a7ffc2b6a4ffc1b5a4ffc1b5a4ffc1b5a4ffc3b7a5ffc2b6a4ffc1b5a4ffc0b4a2ffbfb3a3ffbeb1a2ffa29c9dffa29c9dffa29c9dffa29c9dffa29c9dffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa49d9effa49d9effa49d9dff9b755aff955f32ffb77f4afff4c680ffffdc95ffffe4a1ffffe3a1fffee09efffad493ffcba270ffaf8558ff9b6f43ffa67849ffb78654ffd29d60ffeab36cfff7c378ffffd587ffccb297ffafa5a1ffafa6a2ffafa6a2ffafa6a1ffaea6a3ffada6a2ffafa6a2ffb0a7a3ffb0a7a3ffb0a7a2ffb1a8a3ffb1a8a3ffb2aaa3ffb1a9a1ffb3aaa3ffb4aba4ffb6aca3ffb6aca3ffb6aca3ffb6aca5ffb6aca5ffb6aca3ffb6aca3ffb7ada4ffb9aea4ffbab0a5ffbbb1a5ffbcb2a7ffbdb2a7ffbeb1a6ffbeb2a7ffbfb3a8ffc0b2a8ffbfb2a8ffbfb3a7ffc0b3a6ffc0b4a7ffc1b5a8ffc1b5a8ffc2b6a9ffc3b6a7ffc4b7a8ffc6b7a7ffc8b9a9ffc9baa9ffccbba8ffcebda9ffd0bfa8ffd1c0a9ffd1c1a8ffd2c2a8ffd4c3a9ffd4c3a9ffd3c3a9ffd5c3a9ffd4c3a9ffd5c3a9ffd5c3aaffd5c2a9ffd4c3a9ffd4c3a9ffd3c2aaffd2c2aaffd1c0a9ffd0c0a9ffd0bfa8ffcfbfa8ffd0bfa8ffd0bfa8ffd0c0a9ffd1c0a9ffd1c0a9ffd0bfa8ffd0bfa8ffd0bfa8ffd0bfa8ffd0bfa8ffd0bfa8ffcfbfa8ffcdbea8ffc9bba6ffc9bba6ffc9bba7ffc8baa6ffc6baa6ffc6b9a5ffc6baa6ffc6baa6ffc5b9a5ffc5b8a4ffc3b6a3ffc1b4a3ffbfb3a3ffbeb2a2ffa49d9effa49d9effa29c9dffa29c9dffa49d9effa49d9effa49d9effa49d9effa49d9effa49d9effa49d9effa49d9effa49d9effa59e9fffa59e9fffa89996ff935f35ffa26b3dfff3c481ffffe299ffffe5a1ffffe5a2fffee09dffc29a66ffc29866ff814e25ff703818ff7a401cff874b21ffb07544ffe9b170fffcc97efff7c87cffbfab97ffb1a7a1ffb0a7a2ffb0a7a2ffb1a8a3ffb1a8a3ffb1a8a3ffb1a8a3ffb1a9a1ffb1a9a1ffb1a9a1ffb1a9a1ffb1a9a1ffb2aaa3ffb4aba4ffb7aca5ffb6aca3ffb8ada4ffb9aea5ffb8ada4ffb8ada4ffb8ada4ffb8ada4ffb9aea5ffb9aea5ffbaafa4ffbbb1a5ffbcb2a6ffbeb1a6ffbfb2a8ffbfb3a7ffc0b4a7ffc0b4a7ffc1b5a8ffc1b5a8ffc1b5a8ffc1b5a8ffc3b6a7ffc3b6a7ffc3b6a7ffc6b7a8ffc7b8a8ffc8baa8ffc8baa8ffc9baa9ffccbca8ffcdbdaaffd0c0aaffd1c0a9ffd2c2aaffd3c3a9ffd5c4abffd6c5adffd6c5adffd6c5abffd8c5abffd8c5abffd7c5abffd6c4aaffd6c4aaffd6c4abffd6c4aaffd6c4aaffd4c4aaffd3c3a9ffd3c3a9ffd3c3a9ffd3c3a9ffd3c3a9ffd3c3a9ffd2c2a8ffd2c2a8ffd2c2aaffd2c2a9ffd2c2a8ffd2c2a8ffd2c2a9ffd2c2aaffd1c1a9ffd0c0a8ffcec0a8ffcbbda5ffcabca6ffcabca8ffcabca6ffcabca6ffcabca6ffcabca6ffc9bba5ffc9bba7ffc8baa6ffc6b7a4ffc2b5a4ffbfb3a3ffbeb2a2ffa49d9effa49d9effa49d9effa49d9effa49d9effa59e9fffa59e9fffa59e9fffa59e9fffa59e9fffa59e9fffa59e9fffa59e9fffa59ea0ffa89fa0ffa89fa1ffa68267ff935f34ffb27c45ffffde97ffffe49dffffe59fffcfad77ffaa7e57ff724225ff744224ff794728ff834b28ff8a5029ff8f5129ffaf753fffeab770ffefba71ffc8b5a0ffb2a8a1ffb1a9a1ffb1a9a1ffb1a9a1ffb2aaa3ffb2aaa2ffb3aaa2ffb5aba3ffb5aba3ffb6aba2ffb5aaa4ffb6aca4ffb6aca4ffb6aca3ffb8ada4ffb9aea5ffbaafa6ffbaafa6ffbaafa4ffbaafa5ffbaafa6ffbaafa4ffbaafa4ffbbb1a5ffbbb1a5ffbcb2a6ffbcb2a6ffbeb1a6ffbfb3a6ffc0b4a7ffc1b5a8ffc1b5a8ffc1b5a8ffc3b6a7ffc3b6a7ffc4b8a8ffc4b8a8ffc7b8a9ffc7b8a7ffc8baa8ffc8baa8ffc9bba9ffcabcaaffcdbda9ffcebea9ffd1c1a9ffd2c2aaffd3c3a9ffd4c4acffd5c4aaffd7c5abffdac6adffd9c6adffdac6acffdbc7aeffdac6adffd9c6acffd7c5abffd7c5abffd7c5abffd7c5abffd7c5abffd8c6adffd8c6adffd7c5abffd6c4aaffd6c4aaffd6c4aaffd6c4a8ffd6c4a9ffd4c4aaffd5c3a9ffd4c3a9ffd3c3a9ffd3c3a9ffd3c3a9ffd3c3a9ffd2c2a8ffd2c2a8ffd1c1a9ffd1c1a9ffcec0a8ffcec0a8ffcfc0a8ffcdbea7ffcdbda8ffccbda8ffcbbca6ffcabca6ffc9bba7ffc6b8a4ffc2b5a4ffbfb3a3ffbeb2a2ffa49d9cffa49d9dffa59e9fffa59e9fffa69d9fffa59e9fffa59e9fffa59e9fffa59e9fffa59e9fffa59e9fffa79f9fffa79fa0ffa89fa1ffa7a0a0ffa9a1a0ffaca29cff905f3aff9d6838ffc79659ffffe29cfff2d292ffaf875eff723f22ff774226ff774328ff7d4828ff854d29ff8c512cff91532aff965827ffe5ad68ffeeb871ffbaad9fffb4aaa3ffb4aaa1ffb5aba2ffb5aba2ffb5aba2ffb6aca3ffb6aca3ffb6aca4ffb6aca4ffb6aca3ffb6aca3ffb7aca3ffb8ada4ffb9aea3ffb9aea3ffbbb1a5ffbdb1a7ffbeb1a7ffbcb2a5ffbcb2a5ffbcb2a5ffbcb2a6ffbcb2a6ffbcb2a6ffbcb2a6ffbcb2a6ffbcb2a6ffbfb2a7ffc0b4a7ffc1b5a8ffc2b5a8ffc3b6a7ffc5b7a9ffc6b7a8ffc6b9a8ffc7b9a8ffc8baa8ffc9bba9ffc9bba9ffc9bbaaffcabca9ffcdbdaaffcfbea9ffd0bfaaffd2c2acffd2c2aaffd4c4acffd4c4acffd6c4abffd8c6acffdac6acffdac7acffdac8acffdac8acffdac7acffdac7acffd9c6adffd9c6adffd8c6adffd8c6adffd9c7abffd9c7abffdac8abffdac7acffd9c6adffd8c6adffd8c6adffdac7aeffdac7acffdac7acffd9c7aaffd7c5a8ffd7c5a8ffd6c4a9ffd6c4a9ffd6c4a9ffd4c4aaffd4c4aaffd4c4aaffd4c4aaffd1c1a9ffd0bfa8ffd0bfa8ffcec0a8ffcec0a8ffcdbfa7ffcdbda6ffcdbda8ffccbca6ffc9bba7ffc7b9a5ffc4b6a5ffc2b4a1ffc2b4a2ffa49d9cffa59e9fffa69e9fffa59e9fffa79f9effa89f9fffa8a0a0ffa8a0a0ffa8a0a0ffa8a0a0ffa8a0a0ffa8a0a0ffa7a0a0ffa8a2a1ffaaa1a1ffaaa2a0ffaba29fffad9684ff986137ffa97540fffbd28fffccaa72ff714526ff471e0fff351507ff2c1309ff3b190dff69412dff774a30ff7f4b30ff915737ffe8b36cfff2c688ffb8aea2ffb6aca3ffb6aca3ffb6aca3ffb8ada4ffb8ada4ffb8ada4ffb8ada4ffb8ada4ffb8ada4ffb8aea3ffb9aea3ffbaafa4ffbbb0a5ffbbb1a4ffbcb2a5ffbfb2a7ffbfb3a6ffbfb3a6ffc0b4a5ffc0b4a5ffc0b4a5ffc0b4a7ffc0b4a7ffc0b4a7ffbfb3a6ffbfb3a6ffbfb3a6ffc0b4a7ffc1b5a8ffc2b6a9ffc3b6a7ffc7b8a9ffc7b8a9ffc9b9a8ffc8baa8ffc9bba9ffcabcabffcabcaaffcabca8ffcbbdaaffccbdaaffd0bfaaffd1c1a9ffd2c2aaffd3c3abffd4c4acffd5c5adffd7c5abffd8c6adffdac8acffdac8acffdbc9abffdbc9abffdbc9abffdbc9abffdbc9abffdbc9abffdbc9adffdac8acffdac8acffdbc9abffdbc9abffdbc9abffdbc9abffdbc9adffdac8acffdac8acffdbc9adffdbc9adffdbc9acffdbcaacffdbc9abffdac8abffdac8acffdac8acffdac8acffd8c6aaffd7c5a9ffd7c5aaffd6c4aaffd3c3a9ffd2c2a8ffd1c1a7ffd1c1a7ffd1c1a7ffd1c1a7ffd1c1a7ffd0c0a5ffcdbda5ffcbbba5ffc8baa4ffc7b9a5ffc6b8a2ffc4b6a3ffa79e9dffa79e9effa79f9fffa79f9effa7a09fffa7a0a0ffa7a0a0ffa8a1a1ffa9a1a1ffaaa1a1ffaaa1a1ffaaa19fffaba2a0ffaba2a0ffaba2a0ffaba2a1ffada3a1ffada4a1ff8b5e3bffa16c3affdba769ffc8a36aff6c3f21ff754224ff754228ff7c4528ff854a29ff8b502aff92542eff95562eff9a5b2cffeab56dfff5ce93ffc3b4a6ffb8ada4ffb8ada4ffb9aea5ffb9aea4ffbaafa4ffbab0a4ffbbb0a5ffbbb0a5ffbbb0a5ffbbb1a5ffbcb2a5ffbcb2a5ffbfb3a5ffbfb3a4ffc0b4a5ffc1b5a6ffc3b5a6ffc3b6a7ffc3b6a7ffc4b6a7ffc4b6a7ffc4b6a7ffc3b6a7ffc3b6a7ffc3b6a9ffc3b6a9ffc3b6a9ffc3b6a7ffc3b6a7ffc4b8a8ffc6b8a7ffc7b8a7ffc8baa8ffc9bbaaffcabcabffcbbdaaffcdbdaaffcebfaaffd0bfaaffd0bfaaffd1c0abffd2c2aaffd2c2aaffd4c4acffd4c4acffd7c5acffd9c7acffdac8acffdbc9adffdccaacffdccaadffdfcbadffdfcbadffdfcaafffdecbadffdccaacffdecaacffdccaacffdccaacffdccaacffdccaacffddcbadffddcbadffddcbadffddcbadffddcbadffdccaacffdccaacffddcbabffddcbacffdccaacffdccaacffdccaabffdccaaaffdccaaaffdbcaabffdac9abffdac9adffdac8abffd9c7aaffd6c5a9ffd6c5a9ffd5c4aaffd3c3a9ffd4c4a9ffd3c3a8ffd3c3a8ffd2c2a8ffd1c1a7ffcfbfa7ffcdbda5ffccbca6ffcbbba4ffc9b8a2ffa89f9effa9a0a0ffa7a0a0ffa7a19dffa8a19fffa8a29fffaaa19fffaba2a0ffaba2a0ffaba2a0ffaba2a0ffaba2a0ffaba2a0ffaba3a0ffaba3a0ffaca4a1ffada39fffaea5a1ff917059ff9b6637ffb17a42ffd9a96cff6c3c20ff764124ff764227ff814728ff884d28ff905129ff95552aff995729ff9a5b26fff3bf74fff3cf98ffbcb0a4ffbaafa4ffbaafa4ffbaafa4ffbbb0a5ffbbb1a5ffbbb1a5ffbdb2a4ffbeb2a4ffbeb2a4ffbfb3a5ffc0b4a7ffc0b4a7ffc1b5a7ffc3b6a7ffc4b6a7ffc6b7a8ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a9ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc7b8a7ffc5b9a7ffc5b9a7ffc5b9a7ffc7b9a7ffc8baa8ffc9bba9ffcbbdaaffcdbfa9ffcfc0aaffd1c0aaffd2c2abffd2c2aaffd3c3abffd4c4acffd4c4acffd6c4acffd8c6acffdac8acffdac8acffdbc9adffdbc9adffdccaacffddcbadffe0cdadffdfceadffdfceadffdfceadffdfceadffdfceadffdfceadffdfcdaeffdfceafffdfceadffe0cfaeffe1cfaeffe2cfaeffe3d0afffe2d1adffdfcfadffe0cfaeffdfceacffdfceadffdfceadffdfceadffdfceadffdfceadffdfceadffdecdacffddccabffddcbadffdccaabffdbc9abffdbc9acffdbc9acffdbc9acffdac8aaffdac8aaffdac8aaffd9c7abffd9c7abffd7c5a9ffd6c4a8ffd3c2a6ffd2c1a5ffd0c0a7ffcebea6ffccbca4ffa7a09fffa8a09fffa9a29fffaba29fffaba2a0ffaba2a0ffaba2a0ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffaca4a1ffada4a1ffaea5a0ffaea5a0ffaea5a0ffafa6a1ffb4a89fff946641ffa26c3dffc3915aff8b552fff764226ff784124ff854a29ff8d4f29ff935428ff955528ff995828ffe0ac75ffd7a869ffe5c593ffbaafa4ffbbb1a5ffbbb1a5ffbbb1a5ffbcb2a6ffbcb2a4ffbcb2a4ffbfb3a5ffc0b4a6ffc2b5a6ffc2b5a6ffc6b7a8ffc7b8a9ffc7b8a8ffc8baa8ffc7b8a7ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8b9a8ffc8b9a8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffc8baa8ffcabca9ffccbdaaffcebeaaffd1c0aaffd3c2abffd3c3abffd5c4acffd5c4acffd6c4abffd7c5abffdac7adffdac7adffdbc9adffdccaaeffdccaaeffdeccafffdecdaeffdfceafffe0cfaeffe2d0aeffe2d0adffe2d0adffe2d0adffe2d0adffe1d0adffe2d0adffe2d2aeffe3d2aeffe4d3aeffe5d4aeffe5d4aeffe4d6afffe6d5afffe6d6aeffe5d4aeffe4d3adffe2d2adffe2d0adffe1d0adffe1d0adffe1d0adffe2d1aeffe2d2aeffe0cfacffe0cfacffe0cfaeffdfceabffdfceacffdfceadffdfceadffdecdacffdecdacffdecdacffdeccacffddcbacffddcbacffdccaabffdbc9aaffdbc7a9ffdac6a8ffd5c4a8ffd2c3a8ffd2c2a8ffa9a29fffaaa19fffaaa19fffaba2a0ffaca4a1ffaca49fffaca49fffaca49fffaca49fffada4a0ffada5a0ffaea5a0ffaea5a0ffafa4a0ffb1a69fffb3a8a1ffb3a8a1ffb4a9a0ffb5aaa1ffbcaa9cffa47346ffa77543ffc99462ff8b4f2aff7b4324ff884a27ff8d4f27ff925127ff925424ffc79365ffa26f44ffd5a467ffe4c39affbeb3a5ffbcb2a3ffbcb2a4ffbcb2a4ffbcb2a5ffbdb3a5ffbdb3a5ffc1b5a7ffc4b6a7ffc6b8a7ffc7b9a7ffc8b9a8ffc9bba8ffc9bba7ffcabca8ffccbca8ffccbca8ffcbbca8ffcbbca8ffcabca8ffcabca8ffcbbca8ffcbbca8ffcbbca8ffcabca8ffc9bba9ffc9bba9ffc9bba9ffc9bba9ffc9bba9ffcabcaaffcbbda9ffccbda9ffcfbfa9ffd2c2abffd3c3abffd4c4acffd7c5abffd8c6aaffdac8acffdbc9adffdccaaeffdccaadffddcbadffdeccaeffdfcdadffdfceaeffe0cfaeffe2d0adffe3d1afffe3d2adffe2d3aeffe3d4afffe3d4afffe4d5afffe5d5b0ffe5d7b1ffe5d6b0ffe5d7afffe7d8b0ffe6d7afffe7d8aeffe8d8aeffe9d9afffe9d9afffe9d9afffe8d8aeffe7d7afffe7d6afffe4d6aeffe4d6aeffe4d6aeffe4d6aeffe5d6afffe3d5adffe2d3aeffe1d3adffe2d3aeffe4d3adffe2d2acffe3d2acffe2d0adffe2d0adffe2d1abffe1d0abffe1d0abffe1cfabffe0cfaaffe0cfabffe0cfacffdfceabffdeccaaffdccaabffd9c8aaffd7c5a9ffaaa19fffaba2a0ffaba2a0ffaca4a1ffaca4a0ffaea5a0ffafa59effafa59effafa59effb1a6a0ffb1a6a0ffb0a6a0ffb1a6a0ffb3a99fffb4a9a1ffb4aaa1ffb6aba2ffb7aaa2ffb7aca2ffb7aca1ffb29276ffac7846ffbf8c53ffd19c65ff91552cff8c4f2cff8b5231ff915d2fffc79b63ff865d35ff824f29ffcd975dffe7cca6ffbfb3a6ffbfb3a5ffbfb3a5ffbfb3a5ffc0b4a7ffc1b5a9ffc1b5a8ffc4b8a6ffc8baa8ffc8baa7ffcabca9ffcabca9ffccbdaaffcebea9ffd0bfaaffd1c0a9ffd0bfa8ffd0bfa8ffd0bfa9ffcebea9ffcebea9ffcdbda8ffcdbdaaffcdbdaaffcdbdaaffcbbdaaffcabca8ffcabca8ffccbeabffcdbeaaffcebea9ffd0bfaaffd1c1a9ffd2c2aaffd4c4acffd7c5abffdac7acffdac8acffdbc9adffdbc9adffddcbaeffdeccaeffe0ceaeffe0cfaeffe2d0afffe1d1aeffe1d2afffe2d3afffe3d4afffe4d6b0ffe5d7afffe4d6b0ffe6d7b1ffe6d7b0ffe7d8b0ffe8d9b1ffe9dbb1ffeadcb0ffeadbafffe9dbafffe9dbafffeadcafffebdcafffecddb1ffecddb1ffecddb1ffecddb1ffeadcafffe9dbb0ffe7d8afffe6d9afffe5d9afffe7d8afffe6d7afffe5d7afffe4d8afffe4d6aeffe3d5adffe3d5adffe4d5adffe5d4adffe5d4adffe5d4adffe5d4adffe5d4adffe3d5adffe2d3aeffe2d4acffe3d3acffe3d3acffe2d1aaffe0cfabffdecdaaffddccaaffdac8a7ffaba2a0ffaca4a1ffaca49fffaea5a0ffafa6a0ffb0a7a0ffb0a7a0ffb1a7a0ffb2a8a0ffb2a8a0ffb3a8a0ffb4a9a1ffb4a9a1ffb5aba2ffb8aca1ffb7aca1ffb7aca1ffb8aca1ffbaada2ffbbaea3ffbfb0a0ffb98f64ffbe884bffc89354ffeebc7dffefc38fffb38a56ffc29860ff986d40ff7d502eff976236ffe4b274ffc8b6a2ffc2b5a8ffc2b6a9ffc3b6a7ffc3b6a7ffc4b7a7ffc5b7a7ffc6b8a8ffc8baa8ffcabba8ffcbbca8ffcfbfaaffd0c1abffd2c2abffd2c2aaffd2c2aaffd2c2aaffd2c2aaffd3c1aaffd3c1aaffd2c2aaffd1c1a9ffd0c0a9ffd0bfaaffcebea9ffcdbda8ffcdbda8ffcdbea9ffcec0aaffd1c1a9ffd2c2aaffd2c2aaffd3c3adffd5c3adffd7c5adffd9c7acffdbc9acffdbc9abffddcbadffdfceafffdfceadffe0cfaeffe1d0afffe3d2aeffe2d3afffe3d4afffe5d6b0ffe4d6b0ffe6d7b1ffe7d8b0ffe6d7b0ffe7d8afffe8dab0ffe9dbb1ffecddb1ffeddfb2ffeddfb0ffeddfb0ffeddfb0ffeddfb0ffeddfb0ffeee0b1ffeee0b1ffeee0b1ffefe1b2ffefe1b2ffefe1b2ffeee0b1ffebdfb2ffe9ddafffe6daafffe5dbafffe4dbafffe5dbafffe5d9aeffe4d8afffe4d8afffe4d8afffe4d8afffe4d6aeffe4d6aeffe4d6aeffe4d6afffe4d6adffe3d6acffe3d6acffe3d6acffe3d6aeffe4d6aeffe3d5adffe3d5adffe3d2abffe2d1abffe0cfabffdfceabffddccaaffaca49fffada49fffaea59effb0a7a0ffb2a9a0ffb4a9a0ffb4aaa1ffb6a9a1ffb7aaa1ffb7aaa1ffb7aaa1ffb7aaa1ffb7aba0ffb8aca1ffb8aca1ffb9ada2ffbaada2ffbbaea2ffbbafa2ffbbb0a2ffbdb2a4ffc3b19fffbb916bffcf9a5bffd29e5affd09d59ffe8b36fffedbc80ff7c5130ff7f4e2dffb47e47ffd9b283ffc5b7a7ffc4b8a8ffc4b8a8ffc4b8a6ffc5b9a7ffc8b9a8ffc9baa8ffc9bba9ffcbbda9ffcebea9ffd1c0aaffd2c2aaffd2c2aaffd3c3abffd4c4abffd6c5adffd6c5abffd6c5abffd5c4aaffd5c4aaffd2c2aaffd3c3abffd2c2aaffd1c1a9ffd1c1a9ffd1c0aaffd1c1a9ffd1c1a9ffd2c2aaffd2c2abffd4c4acffd4c4acffd8c6aeffdac7aeffdac8acffdbc9adffddcbadffdfceadffe0cfaeffe2d0afffe3d2afffe2d4afffe5d6b0ffe6d7afffe7d7b1ffe7d8b0ffe8d9b1ffe8dab1ffe9dbb2ffe9dbb0ffe9dbaeffebdcb0ffecdeb1ffeddfb1ffefe1b2ffefe1b2ffefe1b2ffefe1b2ffefe1b2ffefe1b2ffefe1b2ffefe1b2fff0e3b3fff0e3b3fff0e3b3fff0e3b3fff0e3b3ffeee1b2ffebdfb2ffeadeb1ffe7ddb1ffe4dbafffe4dbafffe4dbb0ffe2d8afffe2d7aeffe1d7aeffe2d7aeffe2d5adffe1d5adffe1d5adffe2d5adffe2d6aeffe3d6aeffe3d7acffe3d7acffe3d7acffe3d7acffe4d6acffe4d6acffe4d6acffe2d4acffe3d3acffe0d1abffe0cfaaffdfceabffafa49fffb1a69fffb0a89fffb4aaa0ffb6aaa0ffb6aca1ffb9ada2ffb9ada2ffbaaea2ffbaaea2ffbbaea2ffb9ada1ffb9ada1ffbbaea2ffbaaea2ffbaaea0ffbcb1a3ffbbb1a3ffbcb2a3ffbeb2a2ffbeb2a2ffc6b6a6ff784d2fffd7a462ffefbe7bffdbc19cffcfb59affad8f75ff7c5134ff956239ffd9a764fff5d395ffc7b8a8ffc8baa8ffc8baa8ffc8baa6ffc9bba7ffc9bba6ffcabca6ffcbbea8ffcec0a9ffd1c1a9ffd2c2aaffd5c4aaffd5c4aaffd6c5abffd7c5abffd8c6aeffd8c6acffd8c6acffd8c6acffd8c6acffd8c5aaffd4c4aaffd3c3aaffd2c2a8ffd2c2a9ffd2c2aaffd2c2aaffd3c3abffd3c3abffd5c4acffd7c5abffdac8abffdac8acffdbc9abffdcccadffdfceafffe0cfaeffe1d0adffe2d3afffe4d6b0ffe6d7b1ffe7d8b2ffe8d9b2ffe8d9b1ffeadcb2ffeadcb1ffecddb1ffeddfb2ffeddfb2ffeddfb2ffeee0b1ffefe1b2ffefe2b2ffeee3b3ffeee3b3ffeee3b3ffeee3b1ffefe4b4fff0e5b5ffefe4b4ffefe4b2fff2e5b3fff2e5b3fff4e6b5fff2e5b3fff2e5b3ffefe4b2ffede2b0ffeae0b0ffe7deb0ffe5dcb0ffe3dbafffe3dbafffe2d9afffdfd6aeffe0d6afffdfd4aeffe0d6afffe1d7aeffe0d6adffe0d6aeffdfd4aeffe0d6adffe2d7aeffe4d9aeffe5d9b0ffe3d8aeffe3d7acffe3d7acffe3d7acffe3d7acffe4d6acffe4d6acffe2d4abffe2d3adffe2d3adffb2a79effb3a99fffb6aaa1ffb8aca1ffb9ada1ffb9afa1ffbcafa2ffbbb1a1ffbcb2a2ffbcb2a3ffbcb2a4ffbcb2a4ffbdb1a3ffbdb0a3ffbdb2a2ffbfb2a3ffbfb3a3ffbfb3a3ffc0b3a4ffc2b4a2ffc1b4a4ffc7b29eff966336ffe5b46effd4b99effc5b9a7ffc8b8a5ffc4ae97ff8f633dffc69155fff5c686ffeccda3ffcabca9ffcabca8ffcbbda9ffcbbda9ffccbea9ffcec0a9ffcfbfa8ffd0c1a9ffd2c2aaffd4c4aaffd5c6abffd8c6acffdac7adffdac8acffdac8acffdac8acffdac8acffdbc9acffdbc9acffdbcaadffdbc9acffd9c8acffd9c7acffd7c5abffd7c5abffd7c5abffd7c5abffd7c5abffd8c6acffd9c7aaffdbc9abffdbcaacffddcbadffdfceaeffe0cfaeffe0d1adffe2d3afffe4d6afffe6d8b0ffe8d9b1ffe9dbb0ffeadcb1ffecddb1ffeddeb3ffefe0b1ffefe2b3fff0e2b3fff0e2b3fff1e3b3fff1e3b4fff1e4b4ffeee3b1ffefe3b3ffede2b2ffece1b3ffebe1b3ffebe2b4ffede3b3ffeee3b3ffeee4b4ffefe4b2fff2e6b5fff3e7b7fff5e7b6fff5e7b4fff5e7b5fff1e6b4ffeee3b2ffe9e0b0ffe5deafffe4dcb0ffe3dbafffe1daaeffe2d8afffded6aeffded5aeffdcd3aeffdfd5aeffe1d7adffe0d6adffe0d6adffdfd4aeffe0d7aeffe4dbafffe5dbadffe5dcaeffe4daadffe2d8adffe4d8abffe5d9acffe6d8aeffe7d8acffe7d8acffe7d8acffe7d8acffe6d8abffb7aba0ffb9ada0ffb9ada2ffb9afa1ffbbb0a2ffbdb1a1ffbeb2a2ffbeb2a3ffbfb3a4ffbfb3a5ffbfb3a5ffbfb3a4ffc1b3a3ffc2b4a5ffc2b4a5ffc2b4a4ffc3b5a4ffc3b5a4ffc4b6a5ffc4b6a3ffc6b6a3ff997957ffdca661ffe1c199ffcbbca6ffc8bba9ffcabba8ffbca88dffbc8d5cffdaa668ffe8c493ffd1bea3ffcebfa7ffcebea8ffcec0a8ffcec0a8ffcfc0a9ffd1c1a9ffd2c2aaffd3c3a9ffd4c4aaffd7c6aaffdac8acffdbc9abffdbc9adffdbc9acffdbc9abffdbc9abffdccaacffdccaacffddcbadffddcbadffdccaacffdbc9abffdbc9abffd9c9abffd9c9abffd9c9abffd8c8aaffdac9abffdbc9abffdbc9abffdeccacffe0cfaeffe0cfaeffe0d1afffe2d3b0ffe4d6b0ffe6d7b1ffe9dab1ffeadcb2ffecddb3ffeddfb2ffeee0b3ffefe1b3fff0e2b4fff1e4b4ffefe4b4fff2e5b5fff2e5b5fff3e5b4fff2e5b5fff1e4b3ffeee3b3ffeae1b3ffe7ddb2ffe4dab0ffe4dcb0ffe6dfb1ffeae1b1ffede3b3ffede4b4ffeee4b4fff1e5b3fff3e7b7fff5e7b6fff5e7b4fff5e7b4fff1e6b4ffeee3b2ffeae1b1ffe6dfb0ffe4dcb0ffe1daaeffe1daaeffe1daafffe2daafffe1d9aeffe1d7aeffe3d9afffe3daafffe2d8afffe1d7aeffe1d7aeffe2d9adffe5dbaeffe6dcaeffe7dcaeffe7dcafffe4dbadffe6daadffe6daadffe9dbadffe9dbaeffe8daadffe8daadffe8daadffe9dbafffb9afa1ffbab0a2ffbab0a0ffbdb1a1ffbeb2a2ffbfb3a2ffc0b4a2ffc1b5a4ffc3b5a4ffc3b5a5ffc3b5a6ffc3b5a4ffc4b6a3ffc4b6a3ffc4b6a3ffc7b9a5ffc7b9a5ffc7b9a5ffc8baa6ffc8baa6ffcdb8a0ffebbd81ffeecb98ffcfbba6ffcfbea9ffcdbda8ffd0bfaaffd2bfa4ffddb382ffe9ba7effd8c2a6ffd2c2aaffd2c2aaffd2c2a9ffd2c2a8ffd3c3aaffd3c3aaffd4c4abffd6c4aaffd7c5abffd9c7adffdbc9abffdccaacffddcbadffdeccaeffdeccaeffdeccaeffdeccaeffdeccaeffdfceadffdfceadffdfceadffdfceadffdeceafffdeccaeffdfceaeffdfceaeffdfceaeffdfceaeffdfceacffdfceacffdfd0adffe0d1aeffe1d2aeffe4d5aeffe5d7b0ffe6d8b0ffe9dbb1ffebddb2ffeddeb2ffeedfb1ffefe1b3fff0e2b3ffefe3b3ffefe3b3ffefe3b4ffefe4b4ffefe4b4ffefe4b4fff1e5b5fff1e5b4fff0e5b5ffede3b3ffe9e1b2ffe6dfb3ffe4dcb2ffe1dab0ffe1dab0ffe5ddb1ffe6dfb2ffe8e0b2ffece3b3ffede4b4ffeee4b4fff1e5b5fff2e6b6fff0e7b6ffefe5b4ffeee4b4ffeae2b2ffe7e0b3ffe4dcb0ffe1dab1ffe0d9b0ffe1dab0ffe1daaeffe3dbafffe4dcb0ffe4ddaeffe5dcaeffe6dcaeffe4dbadffe3daaeffe1d7acffe3d9aeffe4dbadffe6dcaeffe6dcaeffe5dbaeffe6dcaeffe6dcaeffe8dcadffe9ddadffe9ddadffe8ddadffe7dcacffe9ddadffe9ddacffbeb1a3ffbeb2a3ffbfb3a2ffc0b4a5ffc1b5a4ffc3b5a4ffc4b6a3ffc4b6a2ffc7b8a5ffc7b9a6ffc8b9a7ffc8baa6ffc6baa6ffc6baa6ffc9bba6ffcabba6ffcbbba6ffccbca6ffccbca6ffcdbda6ffcfbea5ffcfbfa7ffd0bfa7ffd3c1abffd2c2aaffd2c2a8ffd2c2a8ffd2c2a7ffd9c1a5ffdfc39dffd7c5aaffd6c4aaffd6c4aaffd6c4a9ffd9c5abffd8c6acffd8c6adffd9c7acffdac8aaffdbc9abffdccaadffdeccadffe0cfafffe0cfadffe0cfadffe0cfadffe0cfadffe0cfadffe0cfadffe0cfadffe0d1aeffe1d2afffe0d1aeffe0d0aeffe0d0aeffe0d0adffe0d0adffe1d1aeffe2d3aeffe2d3aeffe3d4afffe4d5aeffe4d6aeffe6d7afffe7d9b1ffeadcb1ffecdeb2ffebe0b1ffede1b2ffede2b2ffeee3b3ffefe3b3ffeee3b3ffebe2b4ffeae1b3ffeae1b3ffeae1b2ffeae1b2ffebe2b3ffece2b4ffece2b4ffeae1b2ffeae1b4ffe6dfb2ffe1dab0ffe0d9b1ffdfd7b0ffe1dab1ffe4dcb2ffe5deb2ffe6dfb1ffe8e1b1ffe9e2b1ffeae3b2ffebe4b3ffece4b3ffebe3b2ffe9e2b2ffe6dfb1ffe4ddb1ffe1d9b1ffddd8afffddd7afffded6afffe1d9afffe1dab0ffe3dbafffe4ddaeffe5deafffe6deafffe7ddaeffe4ddaeffe4dbaeffe1d7acffe1d7aeffe1d7acffe3daacffe3daacffe3daadffe4dbadffe6dcadffe7ddadffe8dfafffe9ddaeffe7dcacffe7dcaeffe6dcacffe7ddadffc0b4a2ffc3b5a3ffc4b6a3ffc4b6a4ffc5b7a3ffc7b9a4ffc7b9a4ffc8baa4ffc9bba5ffcabba7ffcbbca8ffccbca6ffcbbca6ffccbda8ffccbda7ffcebda7ffcfbda7ffd0c0a7ffd1c1a8ffd2c2a8ffd5c3a9ffd5c3aaffd5c3a9ffd7c3a9ffd7c4aaffd9c5abffd9c5abffd9c5abffdbc7a9ffd8c6aaffdac8abffdac8acffdbc9acffdbc9acffdbc9acffdbc9abffdccaadffdccaacffddccadffdecdacffdfceadffe0d0acffe1d1adffe1d2adffe1d2adffe1d2adffe1d2adffe1d2adffe2d3aeffe3d5afffe3d5aeffe3d5aeffe2d3adffe2d4adffe3d5aeffe4d6afffe4d6afffe6d7b1ffe6d7afffe6d7afffe6d8afffe7d9b0ffe8dab0ffeadcb0ffeaddb1ffede0b3ffefe1b2ffeee2b3ffefe4b4ffefe4b4ffeee3b3ffeee3b3ffeae1b3ffe6dfb2ffe5deb1ffe3dcb2ffe2dbb2ffe2dbb3ffe3dcb3ffe4dcb1ffe4dcb1ffe4ddb1ffe5deb2ffe1dcb0ffe3dbb1ffe2dab0ffe1dab0ffe3dbb1ffe5ddb3ffe6dfb3ffe6dfb1ffe7dfb1ffe6deb1ffe5deb0ffe5ddb2ffe4dbb1ffe1dab0ffddd6aeffdcd5afffdad2afffd6cfadffd5cfadffd8d2afffd9d3afffdad5adffded7adffe1daaeffe2daaeffe5deafffe5deaeffe5deaeffe4ddaeffe3dbaeffe1d8adffe0d6adffdfd8adffe2d8adffe0d9adffe0d8adffe0d9adffe2daacffe4dbacffe7ddadffe7dcadffe7dcadffe6daadffe6dcadffe6dcacffc7b9a3ffc7b9a4ffc8baa4ffc8baa4ffc9bba5ffc9bba5ffcbbca4ffcbbca4ffcebea7ffcfbfa7ffd0c0a8ffd1c1a7ffd1c1a9ffd2c2aaffd2c2a9ffd4c2a8ffd5c3a9ffd5c3a7ffd6c3a8ffd9c5a9ffdac6aaffd9c6aaffdbc7acffdbc8aaffdbc9aaffdbc9aaffdccaabffddcbadffddcbadffddcbadffddcbadffdeccaeffdecdacffdfceadffdfceadffdfceadffdfcfafffdfd0aeffe0d1adffe0d1aeffe3d4afffe3d5adffe4d6aeffe4d6aeffe4d6aeffe4d6aeffe4d6aeffe4d6aeffe4d6aeffe6d7afffe6d7afffe6d7afffe4d6aeffe6d7afffe6d7afffe7d8aeffe8dab0ffe9dbb0ffeadbb1ffecddb1ffecddb1ffeddfb1ffeddfb1ffece0b2ffede2b2ffeee3b3ffefe3b4ffefe4b3ffefe4b3ffede3b3ffebe2b3ffe6dfb1ffe2dbb1ffdfd7b1ffded6b1ffdcd4afffdcd4afffdcd4afffddd5b0ffded6afffdfd7b0ffdfd7b0ffdfd7b0ffe1d9b2ffe3dbb1ffe3dbb1ffe3ddb1ffe5deb2ffe6dfb2ffe5deb1ffe4dcb3ffe2dab1ffdfd7b1ffddd5afffdcd3b2ffd9d0b0ffd3cbaeffcec8aeffccc6acffc9c4adffc8c5adffc9c6acffcec9afffcfcaaeffd0ccadffd6d1adffdbd5aeffded7aeffdfdaaeffe1daaeffe1daafffe1daaeffe1daaeffdfd8aeffdfd6adffded6adffded6adffded6adffddd6adffdcd4adffdcd4adffded6acffe0d9adffe1d7acffe1d8adffe4dbaeffe3daacffe4dbabffccbca5ffccbca5ffccbca6ffcebda8ffcfbea9ffd0bfa8ffd0c0a7ffd1c1a7ffd2c2a8ffd4c3a9ffd5c3a7ffd6c4a8ffd8c4a8ffd9c5a9ffdac6aaffd9c5a8ffdac6a8ffd9c7a9ffdac8aaffdccaacffdccaacffdccaacffdecbadffdfcdadffdfceacffdfceacffdfceacffe1cfadffdfd0acffdfd0acffdfd0acffe0d1adffe1d1aeffe1d2afffe2d3acffe3d3aeffe3d4aeffe3d4aeffe4d5adffe5d6aeffe5d6aeffe5d6aeffe6d7afffe6d8b0ffe7d9aeffe7d9aeffe7d9aeffe8daafffe8daafffe9dab0ffe9dbb0ffe9dbb0ffe9dbb0ffeadcb1ffeadcb2ffebddb0ffebdeb1ffebdfb2ffebdfb2ffeee1b4ffeee1b4ffefe1b2fff0e2b3fff1e3b4ffeee3b1ffeee3b2ffefe4b4ffede3b3ffede3b3ffebe2b3ffe7dfb3ffe3dbb2ffded6b1ffd9d3b1ffd9d1b0ffd8d0afffd8d0afffd8d0afffdad1afffdad4b1ffdad4b1ffd9d1afffd9d1b0ffdbd3b2ffdfd8b1ffe2dbb1ffe3dbb1ffe3dbb1ffe3dbb1ffe1d9b1ffddd5b1ffd7cfafffd1caacffcec7aeffcac5afffc7c2aeffc2bfaeffc0bdadffbebbabffbebaadffbdbbabffbebdadffbebeabffc0beabffc5c1abffcbc7aaffd0cbacffd5cfadffd8d1aeffd9d3aeffdbd3aeffddd8adffded8adffded7adffddd5acffddd5acffddd5acffdad4adffd8d1acffd5cfacffd6ceaaffd7cfacffd9d1acffd9cfabffdcd1acffe0d6adffe1d7abffe2d8aeffd3c1a8ffd3c2a8ffd5c3a8ffd5c3a6ffd6c4a7ffd6c4a7ffd7c5a9ffd7c5a9ffd7c5a9ffd9c6aaffdac7acffdac8aaffdccaabffdccaaaffdbc9a9ffdbc9a9ffdccaaaffddcbabffdecdacffdfceacffe0cfacffe2d0adffe2d0acffe3d2abffe3d3acffe4d5adffe4d5adffe4d5adffe3d5adffe3d5adffe3d5adffe3d5adffe4d6aeffe6d7afffe6d7adffe7d8afffe7d8afffe8daaeffe7dbaeffe9dbafffeadcb0ffeadcb0ffecddb1ffecddb1ffeadeafffeadeafffebdfb2ffebdfb2ffebdfb2ffebdfb2ffebdfb2ffebdfb2ffebdfb2ffebdfb0ffebdfb0ffeadfb0ffece0b1ffede2b2ffede2b2ffefe3b3ffeee3b3ffeee3b3ffede3b3ffeee3b3ffede2b2ffede3b3ffece2b2ffe7e0b1ffe5deb1ffe4ddb0ffe2dbb1ffe0d9b3ffdbd5b1ffdad2b1ffd9d1b0ffd7d0afffd7ceb1ffd3ccb0ffd3ccb1ffd4ceafffd4ceafffd2cbaeffd0caadffd5ceb0ffd9d2afffddd6b2ffdbd5b1ffdbd5b0ffd9d3b1ffd3ccaeffcdc7acffc8c3adffc4c1acffc0bdacffbebbadffbcb9acffb9b7acffb9b7abffb7b8aaffb8b9acffb9baacffb8b9abffbabaacffbabaacffbebfabffc3c2aeffc5c2abffc8c3abffccc8abffd0cbacffd4cfaeffd9d3afffd9d3aeffd9d3adffd9d1acffd8d2acffd6d1abffd5cfadffd1ccacffccc7a9ffcbc7acffc8c4a9ffcec8abffd2cbadffd3cdadffd6cdadffd9d0abffddd3aeffd8c7a9ffdac8aaffdbc9a9ffdbc9a9ffdccaaaffddcbabffdccaaaffdccaaaffdccaaaffdccaaaffddcbabffdecdabffdfceacffdfceacffdfceacffdfceabffe0cfabffe1d0acffe3d2acffe4d3abffe5d4adffe5d5aeffe4d6aeffe5d7adffe6d8adffe7d9adffe7d8aeffe7d9aeffe8daaeffe8daaeffe8daaeffe9dbafffe9dbafffe9dbafffeadcaeffeadcb0ffeadcb0ffe9ddafffe9ddafffe7ddafffe7ddafffe8ddb0ffe9deb1ffebdfb2ffebdfb0ffebdfb0ffe9e0b0ffeae1b1ffe9e0b0ffebdfb0ffebdfb0ffece0b1ffece0b1ffece0b1ffebdfb0ffebdfb0ffeae1b2ffeae1b2ffeae1b1ffeae1b2ffeae1b2ffe9e0b1ffe6dfb2ffe5deb1ffe5deb1ffe5deb1ffe5deb1ffe4ddb0ffe4ddb0ffe2dab1ffe0d8b1ffddd5b0ffd6d0aeffd6cdafffd5ccaeffd2cbafffcec7b0ffcac3adffc9c4aeffcac5aeffcac5aeffc8c3adffc8c3acffccc6adffd2cbaeffd5cdb1ffd3ccafffcfc9aeffccc5afffc7c0aeffc0bdadffbbbaacffb8b8acffb7b7acffb6b7abffb5b6aaffb6b5aaffb6b6aaffb8b9abffbabcacffbbbbadffb9b9abffb9b9abffb9baabffbcbeabffbdbdaaffbebda9ffc4c1acffc9c5aeffcac6adffccc8acffcec9adffcfc9acffcfc9acffd0cbaeffcecaadffc8c5abffc4c0abffc0beabffbfbeaaffbbbaa9ffbebdabffc7c2acffc9c4a9ffccc7abffccc8aaffcfc9a9ffd4cbabffddccaaffddcdaaffdfcfabffdfd0a9ffdfd0aaffdfd0aaffdfd0aaffdfd0aaffdfd0aaffe0d1abffe0d1acffe2d1abffe2d2abffe1d3abffe1d3abffe2d4abffe3d5acffe4d6adffe6d7acffe6d8abffe8daadffe8daadffe9dbaeffeadcafffebddafffeadcb0ffe9dcaeffe9dcafffeadcafffeadcafffe9ddafffe8ddafffe8deb0ffe8deb0ffe9deb1ffe8deb0ffe7dfb0ffe5dcb0ffe3dbb0ffe3dab0ffe2daafffe4dbb0ffe4dbaeffe5ddb0ffe8ddb1ffe8deb1ffe6dfb0ffe6dfb0ffe7dfb1ffe7dfb1ffe9dfb2ffe8dfb1ffe8deb1ffe6dfb1ffe5ddb1ffe4dcb0ffe5ddb2ffe6dfb1ffe7dfb1ffe6dfb0ffe5deb2ffe3dcb0ffe0d8b1ffdfd7b0ffdfd7b0ffdfd7b0ffdfd9b2ffe1dab1ffe1dab1ffe0d8b1ffded6b0ffd8d2afffd3ccb0ffd0caaeffd0caaeffccc7aeffc7c3adffc4c1acffc3c0afffc0bdadffc0bdadffc1beadffc4c1adffc7c3afffcbc3adffc9c4adffc7c3afffc3c0adffc0bdacffbab9abffb8b7acffb5b6abffb4b5aaffb4b5aaffb6b7aaffb5b6a9ffb5b6abffb8b9aaffbec0adffbdbeacffbebeacffbebeabffc1c0acffbebeabffbbbcabffbabcabffbcbdaaffbdbeaaffbfbfabffc2c1abffc3c1abffc2c1acffbdbcaaffbdbcabffbdbcabffbcbbaaffbbbaacffb8b9adffb6b7abffb6b7a9ffb7b8aaffbabbaaffc1beacffc5c1acffc8c3abffc8c3aaffc8c3a9ffcac5aaffe1d3aaffe2d4abffe3d5acffe3d5aaffe3d5abffe3d5acffe4d6adffe4d6adffe5d7adffe6d7adffe6d7adffe6d8abffe6d8abffe6d8abffe7d9acffe7d9adffe8daadffe9dbacffebddaeffecdeafffeddfb0ffeddfb0ffeddfb0ffecdeafffe9ddafffe7ddafffe5dcb1ffe8ddb0ffe6dcafffe4dbafffe2d8b0ffe2d8b0ffe2d8b0ffe0d7aeffe0d7b0ffded6afffded6afffdcd5aeffdcd4afffdcd4afffdcd5aeffdbd5b0ffdcd7afffdcd4afffded6b1ffdfd7b0ffe0d9afffe1dab2ffe3dbb2ffe1dab1ffe0d9b0ffe1dab0ffe1dab0ffe1dab0ffe1dab0ffe2dbb0ffe1dab0ffe1dab0ffe2dbafffe1d8b1ffded6b0ffdcd4b0ffdad3b0ffd7cfafffd4cdb2ffd8d0b1ffdbd3b1ffdbd3b1ffdbd3b1ffdbd3b1ffdbd5b2ffd4d0afffd1cbaeffccc8afffcac5adffc7c4afffc1beaeffbcbbacffbbbaacffbab8adffb8b7acffbbbaafffbfbcafffbfbcadffbfbdaeffbdbbacffbcb9adffb7b8abffb6b7acffb4b5acffb3b4abffb4b5acffb4b5abffb5b6aaffb8b9abffbabcadffbcbeadffbbbdaaffc1c0acffbfbfacffc0bfacffc2c1afffc3c3aeffbdbfadffbabcabffb9baabffb7b8abffb3b6abffb1b5a9ffb5b7aaffb5b6a9ffb1b4abffb3b6aaffb5b7abffb6b7a9ffb6b7aaffb6b7a9ffb4b5aaffb4b6a9ffb6b7a9ffb6b8aaffb7b9aaffbcbbaaffc1beaaffc2c0aaffc4bfaaffc4bfaaffc6c1abffe4d8aaffe4d8aaffe4d8abffe5d9abffe5d9acffe6d9acffe5d9acffe5d9acffe6daadffe7daadffe7daadffe6daadffe7daadffe8daadffeadcafffebddb0ffebdeafffecdfb0ffecdfafffebdfb0ffece1afffece1b0ffeadfb0ffe8dcadffe2d9adffded6aeffdcd4b0ffdcd4b0ffdbd3b0ffd7d1aeffd5cfaeffd4ceadffd4ceaeffd2ccacffd2cbaeffd2cdafffd3cdafffd2cbaeffd1caaeffd1caaeffd0caabffcfccafffd0ccadffd0ccaeffd2ccafffd7d1b2ffdbd5b0ffded6afffded6afffdfd7b0ffe0d9b1ffe0dab1ffe0dab1ffded9b1ffddd7afffddd5aeffdcd5b0ffdad4afffd7d0aeffd6cfaeffd3cdafffd1caafffcec8adffcbc5afffcbc6b0ffd0caafffd1cbafffd1cbafffd1cbafffd1cbafffd0caaeffccc7afffc9c4acffc7c2aeffc4bfafffbbbaacffbab9acffb7b8adffb7b8adffb6b6adffb6b6adffb5b5acffb8b7adffb8b7abffb6b7abffb4b5aaffb4b5acffb1b5abffb2b4abffb3b4abffb3b4abffb5b6abffb6b7abffb8b9abffb7b8aaffbbbcacffbdbeadffbdbeabffbfbfabffbfbfaaffbfc0adffbfc1afffb1b4aaffafb3a9ffb0b3aaffb0b3aaffb0b3abffb0b3acffafb2aaffafb2aaffafb2aaffafb2a8ffafb2a8ffafb2a8ffb0b4a8ffb0b4a8ffb0b4a8ffb2b3a8ffb3b4a9ffb4b5aaffb4b6a8ffb6b7a9ffbab9a9ffbebba9ffbfbca8ffbfbca8ffbfbca8ffc0bea9ffe7dcacffe9ddadffe7dcacffe7dcaeffe7dbaeffe7dcaeffe6daafffe7dbafffe7dcadffe7dcadffe7dcadffe7dcaeffe8ddaeffe8dfafffeadeafffebdfafffebdfaeffebdfaeffebdfaeffeadeacffe7ddafffe6dcafffe1d9adffded5aeffd7d0adffd2cbaeffcdc8adffccc8adffccc7acffcbc7adffcbc7aeffcac5adffc9c4aeffc9c4aeffc9c4aeffc9c4aeffc9c4aeffcac6acffcdc8aeffcfcbaeffcbc8adffc8c6abffcccaadffcec9adffd1ccaeffd5cfafffd9d4b1ffdbd6aeffddd8b2ffdcd7afffdcd7afffdcd7afffdcd7afffdbd5b1ffd8d1b0ffd2ceaeffd0ccafffcfcaafffcac8afffc9c4adffc5c2aeffc5c4adffc4c3aeffc2c1adffc5c0afffc6c2aeffc5c2aeffc5c2aeffc5c2aeffc5c2aeffc4c1aeffc1bfaeffbebcadffbab9abffb8b7acffb3b5adffb4b5acffb4b5acffb4b5acffb5b5aaffb5b5acffb3b4abffb4b5acffb4b5acffb4b5acffb4b5acffb4b5acffb4b5aaffb4b5aaffb6b7abffb4b5aaffb7b8acffbbbdadffb9bbaaffbbbdabffb9bbaaffbabcabffbabcaaffbebfadffc1c2b0ffb1b3a7ffb0b3aaffb0b4aaffafb4aaffaeb1a8ffafb2aaffafb2aaffafb2aaffafb2aaffafb2a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb2a8ffafb2a8ffafb2a8ffafb2a8ffb0b4a9ffb3b4a9ffb5b6a9ffb9b8a9ffbbbaa9ffbfbcaaffbebba9ffbebba9ffbebba8ffe6dcaeffe6dcaeffe6dcaeffe4daacffe3d9adffe2d8acffe1d9adffe1d9adffe1d9adffe1d9acffe2d8acffe3d9adffe3d9acffe6dcaeffe6dcaeffe5ddaeffe4dbadffe3dbadffe3dbaeffdfd8aeffddd5adffdbd3aeffd7d0aeffcfcbacffcac5acffc8c3adffc6c3adffc5c2adffc6c3adffc5c2aeffc6c3afffc5c2aeffc5c2aeffc4c2aeffc3c3aeffc8c3aeffcac6aeffcdc9aeffcec9afffcfcab0ffcec9adffcfcaaeffd0ccaeffd1cdafffd1cdaeffd5cfb0ffd7d1afffd9d3aeffd9d3aeffd8d3afffd5d1afffd5d0afffd4ceafffd2ccadffcfcaaeffcac8b1ffc6c5aeffc4c3aeffc0c1aeffbebfaeffbdbeafffbdbeafffbdbeafffbabbafffbbbaacffbbbaacffbcbbadffbcbbadffbcb9adffb8b9adffb7b8acffb5b5abffb3b4acffb0b3acffafb2abffafb2aaffb0b3acffb0b3acffb2b3acffb0b4aaffb1b5abffb3b5acffb4b5aaffb4b5aaffb4b5aaffb4b5aaffb4b5aaffb4b5aaffb7b8acffb4b5a9ffb7b8acffbbbdacffbfbfadffbdbdaaffc3c3acffbabcaaffb8baaaffb4b6abffb2b5aaffb0b3aaffafb4aaffb0b4aaffb0b4aaffb0b3aaffafb2aaffafb2aaffafb2a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffafb2a8ffb1b2a7ffb3b4a9ffb6b7a9ffb8b8a9ffbab9a7ffbab9a8ffbab9a8ffded6abffded6abffded6abffdfd6adffdfd7afffded6adffded6adffded6adffded6adffded6adffded7adffdfd8aeffe0d9aeffe0d9adffe0d9aeffdfd8aeffded6adffdcd4aeffdad2adffd7cfadffd3ccadffd0cbacffcec9acffc8c6acffc5c2abffc4c1adffc2c0acffc1c0acffc2c0acffc2c0acffc4c1adffc5c2adffc3c2aeffc5c2aeffc5c2aeffc8c4aeffccc8aeffcfcaaeffd1cdb1ffcfcbaeffcfcaaeffcecbaeffcfcbadffcfcbadffd1cdafffd2cdaeffd2cdaeffd2cdaeffd1cdaeffcdcbaeffcac8adffcac7aeffc9c5adffc7c4adffc3c2adffc2c0aeffbebfadffbcbdadffb9bbacffb8baacffb7bbadffb8baadffb8b9adffb7b8acffb5b7aeffb4b6acffb4b5adffb2b4abffb2b3aaffb0b3aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffb0b3abffb0b3acffb2b3acffb3b4adffb3b4abffb4b5acffb4b5acffb4b5aaffb6b7abffb4b5aaffb4b6aaffb4b6aaffb5b7abffb7b9acffb9bbacffbebfadffc2c2adffc0c1abffb4b7aaffb1b4abffb0b4aaffb0b4aaffafb4aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2a8ffafb2a8ffafb2a8ffafb2a9ffaeb1aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffafb2a8ffb1b3a8ffb4b3a7ffb5b5a8ffb6b6a8ffd7d0adffd8d0aeffd9d1adffd9d1adffdbd2aeffdbd1abffdad2acffdad3acffdad3acffdcd3adffded5aeffddd3adffdcd3acffdcd2acffdbd1abffdad1aeffd8d0aeffd2ccacffd0caacffcdc6adffccc5aeffc9c3acffc6c3aeffc4c1abffc1c0abffc2c0acffbfbfadffc0beadffbebcadffc0bdacffc1bfacffc1bfabffc4c1acffc5c2acffc6c2acffc8c4aeffcac7afffcbc8aeffcdc9afffcbc7adffcac7adffc8c6acffcac6acffcac6acffc7c5adffc7c5adffc7c5adffc7c4adffc5c2acffc4c2adffc1c0aeffbfbfafffbdbeafffbabcacffb9baacffb8b9acffb6b8abffb6b8adffb5b8adffb4b7adffb3b7aeffb3b7adffb3b7adffb1b5abffb1b4adffb1b4acffb0b3acffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffb0b2aaffb2b3abffb2b3aaffb2b3aaffb1b3aaffb4b5acffb4b5abffb6b7abffb5b7abffb5b7abffb1b5abffb1b5abffb1b5abffb0b3a9ffb3b5a8ffb8baaaffbabcaeffb0b3a9ffb0b3aaffafb4aaffafb2a8ffafb4aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2a8ffafb2a8ffafb2a8ffafb2a9ffaeb1a7ffaeb2a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a6ffc8c3acffcac5abffcdc8aeffcfc9abffcfc9acffcfc9aaffcfc9aaffcfc9abffd0caacffd1cbadffd1cbadffd1cbabffd0caaaffcfc9abffccc8aaffccc8aaffcbc7acffc9c4abffc6c2abffc3c0adffc2beadffc1beadffc0bcadffbdbcacffbcbbadffbabcadffbabbadffb9baacffbabaacffb9bbacffbcbbadffbebdaeffc1bfadffc1bfadffc1bfacffc3c0acffc4c1adffc4c1adffc3c1adffc3c0acffc1bfadffc1beadffc1beacffbfbeaeffbebdadffbdbcacffbbbcaeffbabaadffbabaadffb8b9aeffb8b9aeffb5b8adffb4b7aeffb3b6acffb3b6acffb3b6acffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb1b6aeffb0b5adffb0b5adffb1b4aaffb0b3abffafb2aaffafb2aaffaeb1abffaeb1a9ffafb2aaffaeb1a9ffaeb1a9ffaeb1a9ffafb1aaffafb2aaffafb2aaffb0b2a8ffb2b3a9ffb1b3aaffb0b3aaffb2b4abffb1b5abffb2b5abffb1b5abffb1b5abffb0b5abffb0b5abffb0b5abffafb4aaffb1b4aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffafb4aaffafb2abffafb2aaffafb2aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffadb0a6ffbebba9ffc1bdabffc4bfadffc4bfa9ffc5c0aaffc5c0aaffc7c0aaffc7c0aaffc8c1abffc7c2acffc6c1abffc6c1adffc3c0aaffc2bfacffc0beaaffc1beabffc0bdabffbdbcaaffbcbbaaffbcbaaaffbabaacffbab9abffbab9abffb8b9abffb7b8acffb7b8acffb7b8acffb7b8acffb7b8acffb6b8acffb8b9adffb9baaeffbabaaeffbabaaeffbabaaeffbabaaeffbabaaeffb8baaeffb7b9adffb7b9adffb6b8acffb6b8adffb6b8adffb4b7adffb3b6acffb2b6abffb2b4abffb2b4abffb1b5abffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5adffb0b5abffb0b5abffb1b5abffafb2aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffafb2aaffafb2aaffafb2a8ffb2b3aaffb1b3aaffb2b4abffb2b3aaffb1b5abffb1b5abffb0b5abffafb5aaffafb4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3a9ffb0b3aaffafb4aaffafb2aaffafb2aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb1a7ffacb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a4ffb7b5a7ffb8b6a8ffbab9aaffbab9a8ffbbbaaaffbbbaaaffbdb9aaffbdb9aaffbdb9aaffbcbaaaffbbbaaaffbab9abffbab9a9ffb9b8aaffb8b7abffb7b6aaffb6b5abffb4b6a9ffb4b5a9ffb5b5a9ffb3b6aaffb3b5aaffb2b5aaffb2b5a9ffb2b5abffb1b5abffb1b5abffb1b5abffb1b5abffb2b5aaffb2b5aaffb2b5aaffb2b4abffb2b4abffb2b3aaffb2b4abffb2b4abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb1b5abffb1b5abffb1b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffaeb1aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffafb2aaffafb2aaffafb2aaffb0b2aaffb2b3a8ffb0b3aaffb2b3aaffb3b4a9ffb1b5abffb1b5abffafb4aaffafb4aaffafb4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffafb4aaffafb4aaffb0b3aaffafb2a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb3a8ffadb3a8ffadb3a8ffafb2a8ffaeb1a9ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffb1b2a7ffb0b1a7ffb0b1a7ffb0b1a7ffb1b2a8ffb2b3a9ffb2b3a9ffb2b3a9ffb2b3a9ffb2b3a9ffb2b3a9ffb1b2a8ffb1b2a9ffb1b2a9ffb1b2a9ffafb2a9ffafb2aaffafb2aaffafb2a8ffaeb3a8ffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb4aaffafb4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffb0b3acffb0b3acffb0b3aaffb0b3acffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb0b5abffb1b5abffb1b5abffb1b5abffb1b5abffb1b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb1b5abffb1b4aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffafb2aaffafb2aaffafb2aaffafb2a8ffb0b3aaffb2b3aaffb3b4a9ffb3b4a9ffb1b4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffb0b3aaffafb4aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a9ffafb2a8ffafb2aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb3a8ffaeb1a7ffafb2a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffabb0a6ffabb0a6ffabb0a7ffabb0a8ffabb0a8ffabb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffadb3a8ffafb2a8ffaeb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffaeb3a9ffafb4aaffafb3aaffafb4aaffafb4aaffb0b4aaffafb4aaffafb4aaffb0b3aaffb0b3abffb0b3aaffb0b3abffb0b5acffb0b5abffb0b5abffb0b5abffb1b6acffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb0b5abffb1b5abffb1b5abffb0b5abffb1b5abffb1b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb1b5abffb1b5abffb1b5abffb0b4aaffb0b4aaffb0b3aaffb0b3aaffafb2aaffb0b3aaffafb2a8ffafb2a8ffb0b3aaffb1b5abffb1b5abffb1b4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b4aaffafb4aaffafb4aaffafb4aaffaeb3a8ffafb4aaffafb4aaffafb4aaffafb3a9ffafb2a8ffafb2a8ffb0b3a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a6ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffabb0a7ffabb0a7ffabb0a6ffabb0a8ffabb0a8ffabb0a8ffacb0a8ffacb0a8ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffadb2a8ffaeb1a8ffaeb1a9ffaeb1a9ffaeb3a9ffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2aaffafb2a9ffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffb0b3aaffb0b3aaffb0b3aaffb1b4acffb0b5acffb1b5abffb0b3abffb0b3abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb1b5abffb1b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffafb4aaffb0b4aaffb0b4aaffb0b4aaffb0b3aaffafb3a9ffb0b3a9ffb0b3aaffb1b5abffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb3a8ffafb2a8ffaeb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a6ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a5ffadb0a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffaaafa7ffaab0a7ffabb0a6ffabb0a6ffabb0a6ffabb0a8ffabb0a8ffabb0a8ffabb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffaeb1a9ffaeb1a9ffadb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffadb1a9ffadb3a8ffafb2aaffafb2a9ffafb2aaffafb2aaffafb2aaffafb2aaffb0b3abffafb2aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffb0b4aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffafb4aaffafb4aaffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb1b5abffb0b5abffb1b5abffb0b5abffb0b5abffb0b5abffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffafb4aaffb0b3aaffb0b3a9ffb0b3aaffafb4aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffafb3a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb1a7ffacb2a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb2a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffaaafa7ffaaafa7ffaaafa7ffacb0a8ffabb0a6ffabb0a6ffabb0a6ffabb0a8ffabb0a8ffabb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb1a9ffadb1a9ffadb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb2aaffadb3a8ffadb3a8ffadb3a8ffadb3a9ffaeb3a9ffafb2a9ffafb2aaffafb2aaffafb2aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffaeb4aaffb0b4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffaeb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b3aaffb0b3aaffb0b4aaffafb4aaffafb4aaffb0b4aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb1a7ffadb2a7ffadb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa6ffabb0a6ffabb0a6ffabb0a8ffabb0a8ffabb0a8ffabb0a8ffabb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffacb1a8ffacb1a9ffadb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb2a9ffadb3a8ffadb3a8ffaeb3a8ffaeb3a8ffafb2a9ffafb2a9ffafb2a9ffafb2aaffafb2aaffb0b4aaffb0b4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffafb4aaffaeb3a9ffb0b4aaffb0b4aaffb0b3aaffb0b3aaffb0b4aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b4aaffb0b4aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffb0b4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffaeb3a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffaeb2a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb1a7ffadb2a7ffadb1a7ffacb2a7ffaeb1a7ffadb0a7ffadb0a7ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffaeb1a7ffaeb1a7ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffaaafa5ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa5ffabb0a6ffabb0a6ffabb0a8ffabb0a8ffabb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb1a9ffacb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffadb1a9ffadb3a8ffadb3a8ffadb3a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a9ffafb2aaffafb2aaffafb2a8ffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb2aaffaeb1a9ffafb2a9ffafb2a8ffaeb3a8ffafb3a9ffaeb1a7ffb0b4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffadb3a8ffadb3a8ffadb2a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb1a7ffadb1a8ffacb0a7ffabb0a6ffadb0a7ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffacb0a6ffacb0a6ffadb0a6ffadb0a5ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffacafa5ffabafa5ffaaafa5ffaaafa6ffaaafa6ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffabb0a6ffabb0a6ffabb0a6ffabb0a8ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffaeb1a9ffadb0a8ffaeb1a7ffaeb1a7ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffafb2aaffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffb0b3aaffafb2a8ffadb0a8ffadb0a8ffadb0a8ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffb0b3aaffafb4aaffafb4aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb2a8ffafb4aaffafb4aaffafb2a8ffafb2a8ffafb2a8ffaeb3a8ffadb3a8ffadb3a8ffadb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffacb2a7ffacb2a7ffadb1a8ffadb0a8ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffacb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffacafa3ffacafa5ffacafa5ffaaafa5ffaaafa5ffaaafa5ffabafa5ffaaafa7ffaaafa7ffaaafa7ffabafa7ffaaafa7ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a7ffabb0a8ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb1a9ffadb2a7ffacb1a9ffadb1a9ffaeb1a8ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffadb3a9ffaeb3a9ffadb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb2a9ffaeb3a8ffafb2a8ffaeb3a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffb0b3aaffafb2a8ffaeb1a9ffaeb1a9ffaeb1a9ffacafa8ffacafa8ffacafa8ffacafa8ffacafa8ffacafa7ffacafa8ffaeb1a9ffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffb0b3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffaeb3a8ffaeb3a8ffafb2a8ffafb2a8ffaeb3a8ffadb3a8ffadb3a8ffadb3a8ffafb2a8ffaeb1a7ffadb2a7ffacb2a7ffadb0a6ffadb0a6ffadb0a6ffacb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffacb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a5ffacafa5ffadb0a4ffacb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffadb0a4ffacafa3ffacafa3ffacafa3ffacafa5ffacafa5ffabafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffaaafa7ffabb0a7ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a7ffabb0a8ffadb0a8ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffacb0a8ffadb1a7ffadb1a8ffacb2a8ffacb2a7ffaeb1a7ffaeb1a9ffaeb1aaffadb1a9ffadb0a8ffadb0a8ffadb0a8ffaeb1a9ffadb1a9ffaeb3a8ffadb3a8ffadb3a8ffaeb3a8ffaeb3a8ffaeb3a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb1a9ffaeb1a9ffacafa7ffabada8ffaaada8ffacada8ffacada8ffaaada8ffaaada8ffacafa7ffacafa7ffaeb1a9ffb0b4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb2a6ffafb2a8ffafb2a8ffaeb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffaeb3a8ffaeb2a8ffadb2a7ffacb2a7ffacb2a7ffadb0a6ffadb0a6ffadb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffacb0a4ffabb1a4ffabb0a5ffabb0a6ffabb0a5ffabb0a5ffabafa5ffacafa5ffabafa5ffabafa3ffacafa3ffabb1a4ffadb0a4ffadb0a4ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa5ffacafa5ffacafa5ffacafa5ffabafa5ffaaafa5ffaaafa5ffaaafa6ffaaafa7ffaaafa7ffaaafa7ffabb0a6ffaab0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a7ffabb0a8ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb1a8ffacb1a7ffaeb1a7ffacb2a7ffadb1a7ffadb0a8ffacb0a8ffaaafa7ffabb0a8ffaeb1a9ffaeb1aaffafb2aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffadb0a8ffadb0a9ffaeb1a9ffadb0a8ffacafa7ffacada8ffacada8ffacada8ffabaca7ffabaca7ffacada8ffacada8ffacafa7ffadb0a8ffadb0a8ffadb0a8ffafb3a9ffafb4aaffafb4aaffafb4aaffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb5aaffb0b3aaffafb2a8ffafb4aaffafb4aaffafb4aaffafb4aaffafb4a9ffb0b4a8ffafb2a7ffafb2a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffaeb1a7ffaeb1a7ffaeb1a7ffacb2a7ffacb2a7ffacb2a7ffadb0a6ffadb0a6ffabb0a6ffadb0a4ffadb0a4ffadb0a4ffabb0a5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffabafa5ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa5ffacafa5ffacafa5ffacafa5ffacafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa6ffaaafa6ffaaafa7ffaaafa7ffaaafa6ffabb0a7ffaaafa5ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a7ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffacb0a6ffadb1a8ffacb2a7ffadb0a7ffacb0a8ffabb0a8ffacafa7ffabb0a8ffacb0a8ffadb0a8ffadb0a8ffaeb1a8ffacb0a8ffadb0a8ffadb0a8ffacb0a8ffadb0a8ffadb0a8ffacafa7ffacaea8ffabada6ffacada8ffabaca7ffabaca7ffabaca7ffabaca7ffacada8ffacada8ffacada8ffacafa7ffacafa7ffaeb1a7ffafb2a8ffaeb1a7ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffadb3a8ffafb3a8ffadb3a8ffaeb3a8ffadb3a8ffadb3a8ffaeb3a7ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffafb2a8ffafb2a6ffafb2a6ffafb2a6ffafb2a6ffadb1a7ffadb2a7ffacb2a7ffacb2a7ffacb2a7ffacb2a7ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffacafa4ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffaaaea2ffabafa3ffabafa3ffacafa3ffacafa3ffacafa3ffacafa5ffacafa5ffacafa5ffacafa5ffacafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa6ffaaafa6ffaaafa7ffaaafa7ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffacb0a6ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffacb0a8ffadb0a8ffadb0a8ffabb0a8ffabb0a8ffaaafa7ffacafa7ffacafa7ffaaafa8ffabb0a8ffabafa7ffaaafa7ffabb0a8ffacafa7ffacafa7ffaaafa7ffacaea7ffabada8ffacada8ffacada8ffabaca7ffabaca7ffa9aca7ffa9aca7ffa9aca7ffaaaca7ffabaca7ffadada8ffacada8ffabaea7ffadb0a9ffafb2a8ffaeb2a8ffaeb1a7ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffafb2a8ffadb3a8ffadb3a8ffadb3a8ffaeb3a8ffafb2a6ffafb2a6ffafb2a7ffafb2a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb1a7ffacb2a7ffadb1a7ffaeb1a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacb0a3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffaaaea2ffaaaea2ffaaaea2ffacafa3ffacafa3ffacafa3ffa9aea4ffacafa5ffacafa5ffacafa5ffacafa5ffacafa5ffacafa5ffabafa5ffabafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa7ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffadb0a6ffabb0a6ffabb0a6ffabb0a8ffacb0a8ffacb0a8ffacb0a9ffabb0a8ffacafa7ffabb0a6ffabb0a6ffaaafa7ffabafa7ffabb0a8ffaaafa7ffacafa7ffacafa7ffacafa7ffacaea7ffabaea6ffacada7ffacada8ffacada8ffabaca7ffabaca7ffa9aca7ffa9aca7ffa9aca7ffa9aca7ffaaaca7ffa9aca7ffa9aca7ffacada8ffacada8ffacafa7ffadb0a9ffaeb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffaeb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffadb3a8ffaeb3a8ffaeb3a8ffafb2a8ffafb2a6ffafb2a6ffafb2a6ffafb2a6ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffacb2a7ffacb2a7ffacb2a7ffaeb1a7ffaeb1a5ffaeb1a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffabb1a4ffabb1a4ffacb0a4ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffacafa3ffaaaea2ffacafa3ffaaaea2ff65442fff61402eff5d3c28ff583622ff5b3a26ff5b3a27ff5c3b28ff5e3d28ff63422cff5f3e2bff5e3e2bff5c3b27ff5d3b27ff62422eff603d27ff603f2aff5e3b28ff5f3d29ff5c3a27ff603e28ff5c3a24ff5e3c27ff5d3a26ff5d3a26ff5c3925ff573521ff5c3925ff5f3c26ff583620ff5b3924ff593622ff5c3824ff583422ff563322ff5b3825ff553320ff5a3724ff583622ff553520ff583623ff563320ff563622ff5a3724ff553220ff55321fff4e2e1aff4d2d18ff502e1bff4c2b19ff4b2a16ff492915ff492916ff4c2c19ff4e2e1aff452615ff502f1aff4e2d18ff502e1aff4e2b19ff4b2917ff4a2917ff4a2a18ff4d2c1bff4b2a1aff6b4a34ff6d4c37ff61402bff613f29ff78563cff6f4e35ff664531ff63422eff644430ff674631ff664532ff664630ff64442dff63422eff694832ff6e4b34ff684630ff6e4a32ff62402cff64432dff63402bff64422dff66442dff6a4931ff694730ff65422cff613f2aff63412cff603e28ff68452eff623f2aff5e3d28ff684530ff613d2bff5f3c2aff5e3c29ff63402dff613f2bff66442eff5e3d28ff5e3c28ff5c3b27ff5b3925ff583522ff52301dff50301cff4f2e1bff51311cff4e2d1aff51311eff4f2e1aff4a2a17ff4e2c1aff4b2c18ff492917ff492915ff4f2d19ff4d2c18ff4f2d17ff4d2b18ff4c2c19ff482817ff4a2a19ff4b2b19ff714f39ff70503aff74523bff6c4931ff78553aff6e4d37ff694933ff674632ff6e4d35ff694934ff684733ff6e4c37ff694935ff6a4934ff6b4c37ff694933ff694833ff6d4c35ff79553cff6f4d36ff6b4832ff704c35ff6d4a36ff6f4d34ff6c4a34ff704e36ff724f39ff6e4d36ff694933ff6a4933ff694932ff6c4a34ff6a4834ff6d4934ff714d36ff6e4c34ff694733ff66442fff674230ff674430ff62402cff62402cff62412cff5a3724ff543320ff543320ff4c2c1aff4f2e1bff4e2d1bff4d2d1bff4b2a1aff4e2d1bff4d2d1bff4e2d1aff4e2e1bff4c2b17ff56341dff4b2a16ff472716ff472819ff442616ff4c2c1aff432617ff472918ff7b593fff76553dff77553cff77553bff78593eff7a5a3aff7d5c3eff75553aff78583fff77573dff7a5842ff74523aff76553cff7b5a3eff755338ff745238ff7a573dff735138ff775338ff78553bff7e5c42ff75543cff714f39ff725039ff77543bff76543cff725039ff704f39ff735139ff76553dff704e37ff745239ff74513aff72513aff715139ff714f36ff6f4d38ff714f39ff775339ff694630ff6a4830ff69472fff5d3c26ff603d26ff573621ff56341eff573520ff573620ff53321fff5a3924ff68462fff573623ff4f2e1bff51301eff4e2d1cff51301cff55331dff51301bff4a2a17ff4d2c19ff472716ff4c2d1aff492918ff472817ff775540ff75543cff715038ff73533cff7a5941ff73533aff7e5d43ff7c5b42ff7c5d44ff8c6b4eff89674cff7a593fff907052ff76553aff7b593fff7d5d41ff7b5941ff78563cff7f5e42ff836246ff7d5a40ff78563dff7c593eff7f5d40ff7b5940ff76553bff7f5c43ff79563dff89674bff77553bff7c5a40ff78573bff755339ff75543aff75533aff735137ff79573eff704d34ff715036ff91704fff6f4d31ff6b472fff6c4930ff5b3923ff5b3921ff5e3d24ff5d3b24ff6e4b31ff5e3c25ff623f2cff5e3b27ff5c3a26ff5f3d28ff5d3a25ff5e3c27ff55341fff4e2d1aff53321dff54301bff502f1aff4c2c19ff482816ff482816ff4b2c1aff785844ff75553fff7c5c44ff7a5941ff78573fff7f5f45ff7b5a44ff7f5f45ff826149ff816148ff836349ff7f5e45ff7a5941ff816045ff826042ff805e45ff805e43ff836248ff88684cff7a5a41ff7d5d43ff785740ff785842ff795940ff7b5a42ff7c5b43ff846349ff7d5c43ff7b5b43ff7b5b42ff8a694dff78553dff73533dff73533bff79583eff76563eff7d5b42ff734f36ff6e4c36ff6f4d36ff735138ff724f36ff69462dff634028ff623f29ff6b4931ff69462eff6b4931ff6a4732ff704d36ff65432bff6b4831ff6b4931ff624029ff634029ff573422ff5f3c27ff5e3b25ff5c3a24ff57341fff54311eff522f1cff52301dff55331fff785842ff775841ff795b43ff795b43ff7b5c43ff7b5b42ff86654aff7f5f46ff7e5f46ff84644aff85644bff806046ff806047ff87674dff805f45ff836349ff82624aff86664cff85654dff7f6047ff816147ff84644cff7f5f49ff85654cff85654fff80624bff82634bff7e5e46ff7e5e44ff7b5b43ff7d5b43ff79583fff795940ff75543eff7a5941ff76553eff78563eff7c5a40ff724f37ff6c4a33ff694830ff6f4d35ff6f4c34ff725037ff76523aff69472eff724f36ff76543aff68462fff6c4a33ff67442cff6b4930ff68462eff6c4932ff613d27ff613e29ff623f2bff5b3824ff5e3c27ff5d3a26ff5a3625ff5a3723ff573522ff5c3b29ff85664fff83644eff84654fff84644eff806049ff7f5f48ff7e5e46ff85654dff84644bff87674fff886850ff83644dff82634cff866851ff84664eff876850ff82634bff83624dff86644dff886750ff886950ff896a52ff85664eff8a6c54ff896c55ff8a6c56ff876952ff85674fff87674fff7d5d45ff7e5e46ff7f5e46ff7d5d44ff7c5c44ff775740ff76543eff74523dff75543eff6c4c34ff6b4b34ff6d4c34ff715038ff6d4c33ff755339ff6e4c33ff6a4730ff78563dff6e4c37ff704e37ff72513aff6d4d37ff6c4a33ff6d4b34ff613f2bff63402bff64422cff5e3d28ff6a4831ff694933ff63422dff644330ff5f3e2bff5f3f2cff60402cff876953ff886a54ff856852ff8b6d57ff8a6c56ff856852ff856650ff85664fff886a53ff8a6d57ff8a6d56ff866a55ff886b56ff886b54ff8b6e58ff896d56ff886b55ff896b54ff8a6d56ff8c6f59ff886b55ff8a6d57ff8a6d58ff8b6e58ff8b6e58ff8c6f58ff8d705aff8d705aff8b6e57ff8a6c55ff81634cff83644aff816048ff7d5d44ff7d5e43ff7c5a40ff7b5a3fff77553dff7a5840ff78563bff73513bff76533cff76543cff74523bff735138ff714e37ff73513aff74523bff6f4e39ff6c4c37ff71503aff705038ff6d4b35ff745138ff704f39ff694833ff684732ff694935ff694834ff684834ff684733ff674631ff684833ff6d4c37ffad8c68ffbb9974ffbc9c77ffbf9f79ffba9a76ffbd9d7bffbb9c7bffb29370ffa6866aff90745cff8c705bff8a6e5aff886d59ff896f5aff8a705cff8a6f5aff8b6f5aff8a6e59ff8a6f5aff8b6f5aff8b6f5bff8c705cff8b705bff8c705bff8c705bff8d715cff8e725dff8e735dff8d715cff8b6f59ff876a55ff836551ff80624cff7d5f47ff7a5c44ff7b5b44ff7c5c45ff795940ff7b5b43ff7b5b41ff79583fff7a5a43ff75553cff78583fff73533aff78573eff73543bff785840ff75553eff72523cff73533cff6f4f39ff6d4c37ff6d4c36ff70503aff6d4d36ff6d4c37ff705039ff73523cff704f3aff6f4e3aff6f5039ff6e4e38ff6d4d37ff96755cff93745cffa28267ffbe9d7bffc1a17cffc1a17bffbd9e78ffbe9f7affbb9e78ffd0b288ffd5b68bffd6b68affe3c596ffd8b98fffc0a37cffb69877ffb59878ffb79a79ffa08368ff93765eff8f745eff8f755fff8e7460ff907562ff917660ff917661ff907660ff907662ff8f7460ff8e725dff8b6f5aff876c57ff836751ff7e6049ff7a5c45ff795b44ff785a43ff765741ff74543eff775740ff785942ff765841ff795c44ff795a42ff775841ff7a5c43ff7a5b42ff7b5c44ff7b5c44ff7b5c44ff75563dff77563eff72523cff78553eff7a5941ff75553eff805f44ff7d5b43ff7a5a41ff78573fff78563fff78563fff715039ff704d37ffaa8466ffa68062ffab8566ffa78263ffa37f61ffa78163ffac8668ffad8768ffa88468ffa7856aff9f7f66ff9d7f65ff9c7b63ffaf8c6effb59674ffc4a583ffbea07bffbfa27fffb49673ffb69977ffb39473ffb89a74ffceb089ffd3b58effbda07bffbea17fffc0a483ffb79b7dffa2876dff90755eff8e745eff8d725eff8d725cff896d57ff886b55ff7e614bff7b5e48ff795a44ff765741ff765841ff795b46ff7c5e48ff795b45ff7b5d46ff7b5d46ff785b44ff7a5c45ff7b5d46ff7d5f46ff7b5c45ff7c5c45ff7a5a44ff775740ff795843ff785742ff795a44ff7c5d46ff806249ff85674fff7c5d45ff7e5d45ff7f5e46ff856449ff805f45ffab8363ffb08868ffa57f60ffae8868ffac8565ffac8466ffa88365ffaf896affa98468ffa98467ffac8769ffad8a6dffb48d6fffaf896bffb18d6bffad8769ffb28c6dffac886affaa876cffa7866bff9f7f65ff9d7e65ffa07f66ffa3856aff9d8067ff9a7d65ff957861ff947861ff957961ffa98c71ffbfa380ffc6a985ffbea27effb29375ffa08166ffa4846affab8b70ffa08369ff876954ff83644fff846651ff816651ff826650ff7f604bff7f634eff80634eff7f614cff836550ff83644fff876852ff886a55ff80624dff7d5e47ff7f5f49ff81614cff80634dff80624cff83654eff84654fff82654dff7e5f48ff795b44ff775742ff795941ffa17a59ffa9815effa27c5cffa27a5affa0795affa37c5fffad8566ffa88263ffac8665ffae896affac8769ffae8a6affac8668ffab8667ffad8769ffa88465ffab876affae8a6cffac886bffae8a6dffac896bffb08d70ffb38e72ffaf8b6dffab876affad8a6cffb08d6effb18d70ffb28d6fffb18c6effad896cffa98668ffa18267ff9e7e66ff9c7d65ff96775fff8d725eff8e7360ffcbae8cffdbbb90ffdcbc91ffd2b48dffb89b75ffa28565ffae9273ff977a62ff90735eff8f745eff8e735eff8f7460ff8e725eff8b705cff866b57ff866754ff846653ff876a54ff886b55ff866a54ff876b55ff856853ff80624dff7d5f49ff775842ff7b5c44ffa07855ff9c7352ff9a7353ff9e7656ffa8805effa57d5dffa17b5cffa47d5effa37e5fffa48060ffa58264ffa48065ffa88367ffa58065ffa78366ffa68367ffaf8a6cffa78569ffa58469ffa6836affab896effab896dffad8c70ffa8856affaa876affad896dffa98467ffab876affaa8466ffae8a6cffae8a6cffc19971ffaa8869ffa48166ffb08b6bffad8968ffba926fffb6906fffa38367ff9d7e64ff9d7f66ffad8e72ffbc9d7cffbb9d7effb89d7dffbea080ffab8d72ff8c725eff8d7360ff8b715eff8b715fff8c7260ff8c725dff8c705cff8a6e5aff896f5cff8c715dff8c705dff896d5aff866b57ff846953ff816550ff7d5f4bff7d5f4affa67b57ff946c4dff997051ffa07653ff9f7553ff9f7657ffa67f5fff9f7b5cffa17d60ff9e7b5dff9c7a5effa07d62ff9e7c61ffa17f64ff9f7d62ffa27f63ff9f7b5fffa37f66ffb28365ffaa856affa7856bffac8c6fffa5856affaa896dffa8856bffa68368ffa68266ffac896bffa78365ffa98669ffa98669ffc99e76ffae896bffa38166ffa17f66ffb08a6cffa48269ffad8a6fffaa886affa6866cffac8c72ffaa886affbb9371ffbf9470ffb08f6effb5926fffb08d6bffad8e6dff9d8166ff9d8167ffa4896fffb09477ffa7876cffb09478ffbda17fffbda17bffb39876ffaf9374ffa18368ff8d725cff8b6f5cff8b705dff886d59ff866a56ffa97e59ffa37a55ffa27957ffa87f5affa37c5aff997254ff997255ff9a7459ff987458ff957259ff98745affa17d60ff9d795dff9b7759ffa47f60ffc89061ffa17c5cffac7e5dffce9669ffa17f63ffa48369ffa38268ffa6856bffa78569ffa38166ff9b795fffa48268ff9b7a60ff9c7a61ff9e7c61ff98765dffad8461ffa58060ff9f7d63ffa38166ffa88265ffa37f64ffa48166ffa68569ffa5856bffa5866effa6846affaa8669ffb18b6cffb3906fffc09870ffb9946effbe9671ffb5926fffc29b75ffb99472ffa7886bff9f8366ff9a7f65ff977b63ff997c61ffb49675ffbda07cffbc9f79ffddbf95ffe2c393ffddbe90ffba9a75ffa38466ff8e694fff966e52ff9b7456ff9f7757ffa07656ff9e7556ffa07755ff996f4fffa47955ffba7c4fffc78c5effb58d67ffd4925fffad8562ffb88d66ffd09662ffa77f5dffae7f5bffbe8a63ffa88162ffa47f61ffaa8567ffa98466ffaa8568ffa47e61ffa57e62ffa68063ffa68164ffa17b5dffa07a59ff9f7a5bffa77f60ffaa8364ff9f7c61ffa07d62ff9d7a60ff9c7a61ffa48266ff9d7c63ff9a785fff9b7a62ffa48165ffa48065ffa98469ffab8869ffc89a70ffc0956effc89d75ffb9946fffc0976fffb28c6dffa5886cffa68869ffa28567ffac8b6affb6946fffbc9772ffcb9d71ffdeaa76ffc99b71ffab8669ffa07f65ffab8c6fffab8c71ffa47a57ffa47857ffa47956ff9f7553ffa07454ff9c7151ff9d7454ffaa7d5affc08f63ffe7ad72ffa57c5bffb88a61ffd7935effa67d5cffaf815bffd99f66ffa77d5affa87852ffcc9261ffab8264ffa37c5dffa47c5effa77f60ffa78062ffa27c5fffa17a5effa47e5eff9e785bffa27b5bff9d765aff997358ff9d785cff987358ff9c775dff99755aff926e56ff99765cff9b785fff936f57ff8d6a52ff9c785bff99765bff99775eff9a785fff9f7c61ffbc8e66ffc5976fffc4956effb9946fffc5976fffa9886affa58465ffb28f6affb6916cffb7926dffc39770ffc5966dffce9c70ffc99971ffd3a277ffbd906dffaf8b6dffaa896effa9896eff9c7353ffa27958ffb18560ffa37858ffa07657ffa67b57ff9a7153ffa57c5dffc28b5affdca56effaf8867ffb2845dffbd8052ff9f785affbe8659ffda9e63ff9c7454ffa97750ffcc8c53ffa97d5cffa7805fffa77f5fffa67d5dffa88062ffa47d5dffa27a5bffa17859ffa37a59ff9f785aff9d7558ff9b7357ff997254ff9d775affa0785bff9a7257ff9a7357ff967153ff9c7658ffa47c5cff997254ffae8561ff9e785dff9f7b61ff9a765bff9c785cffac8666ffb8906cffb68c69ffba926effc19771ffa17f5fff9c7857ffbe9166ffc49469ffc3966dffd49e6fffd19c6effbd8f68ffc19674ffa6846affb99374ffb18b6effaa876effb69477ff966e51ffa37b5dffa07859ffa1775aff9d7356ffa17857ff997156ffa07858ffbf7c4affc28b5dffb08a65ffa0734dffae774cffb37f57ffc7854fffcd9059ff997252ff9e6a47ffc97b43ffa57a5eff99755bff98745bff937057ff936f56ff947056ff946f54ff926c51ff9a7357ff956c50ff926b4dff976f52ff966f51ff9a7356ff9c714fffa17552ff996f50ff956c4cff9b6f4cffa17651ff9d724dffa57853ffa07451ff9b7455ffa0795bff957054ff997457ff9f785affa57d5effb08865ffaa8463ffa47d5dffa47e5dffad845effbf8e66ffbd8e64ffcc9669ffb48968ffaa8466ffa88467ffa17f67ff9e7e67ffa5836cffa4836bff9f7e67ff936a4fff966e55ff936c52ff956e52ff91684cff8e654bff8d6549ffaa7d57ffa96538ffa7673fffab7e5affa27b54ff956945ffa36a3fffc27e47ffc28a57ffa2795aff9e6c47ffcc7f45ffa17555ff957156ff936e55ff9f785dff9a7256ff9a7254ff997252ff956c4dff9e7455ff9a7050ff9c7250ff986f4fff997052ff9c7053ff996e4dff996f50ff93694dff8c6446ff9a704dff906446ff946a4cff956c4cff9d7151ff997052ff9d7457ff997256ff9c7458ff9e7558ff9a7356ff9c7659ff9e7658ff9b7558ff997458ff9c7558ff977054ff9c7556ffb38662ff9a755bff99765cff9f7d62ff9b775eff9c7b62ff9b7863ff9c7a65ff9d7b63ff91684cff9e7457ff92684cff92694aff906849ff8a6044ff8b6246ff996d4dffb06d39ff9d5a32ffa26137ffad7d54ff9f714affb06d3fffc77941ffcc8a50ff936c52ff8e5b39ffca7f44ff9a7151ff916d53ff916c53ff936d53ff926b51ff946b50ff8b6348ff8d654aff8a6248ff90684dff825a42ff90674bff8c6349ff976e52ff956b4dff92694aff8c6348ff885f43ff8f6548ff916647ff92684aff936a4eff90664aff966d50ff987054ff956e52ff9f7758ff966e52ff946d52ff987054ff977054ff987256ff9c7558ff9e765aff956d51ff987153ffa27959ff997256ff9d7659ff9a7459ff9c765bff9c785eff9c775effa27e64ff9e795fff91674aff936a4eff916749ff906549ff906648ff936848ff8d6445ff9d704dffb16934ff9c552aff7a4327ff99613bffb57445ffaf673affbf6f38ffd98644ffa2704dff8b5533ffd3803fffb57f55ff946b4fff936b50ff966e54ff926a4dff966d4fff976d4dff906648ff92684aff996d4dff966949ff966949ff906548ff996c4aff906446ff92684aff906547ff8c6246ff8f664aff94694aff956a4cff966b4dff966c4eff966d4eff9a7153ff987154ff926b4fff997054ff9b7356ff966f52ff9f7556ffa17759ff9d7354ffa17858ff9d7357ffa37a5bff9a7255ff987054ff936c51ff967056ff926d54ff977259ff906d55ff906c54ff8f6a54ff91684cff966b4eff93684bff95694cff9a6e4eff94694aff9a704fffac7042ffa85925ff8c4720ff844624ffa35f34ffa96236ffb16738ffa35b2dffc17339ff9b653cffb87846ffd98844ffba8152ff9c7155ff997052ff976c51ff936a4cff9e7252ff9e7150ff9c714eff926541ff90603aff905f3aff8f5d38ff86593cff9a6a41ff98683eff986945ff9c6d48ff9d6f4bffa4734dff9c704dff8e6348ff885f46ff8f674dff835d45ff845e49ff856148ff866149ff856149ff8b664fff8a644dff8b654eff8d6750ff8b6650ff835f4aff86634eff86624fff84614cff84614fff815f4bff89654fff8c6851ff8d6850ff916b52ff876350ff966b4fff9a6e4eff946a4bff986d4fff946a4cff956a4dff976b4eff986e4effba6934ffa25323ff90481fff7e4121ffa3592effa35f34ffa36437ffa76b39ffe9b16bffecba72fff2bd6fffe89e56ffb88358ff9b7154ff956d50ff956c4eff9d7354ff9b7051ff986c49ff936545ffa36e41ff825334ff8b5a39ff905d38ff8b5b3cff8a5938ff90603dff8c5e3dff95643eff976743ff8f6448ff936849ff896046ff89634cff8b654dff825d48ff88624cff845f4bff825c49ff7e5a47ff815e4aff87614bff805c49ff825e4bff845f4dff815b48ff8b644dff91684cff936a50ff93684affa37452ff9c6d4eff8f644aff93694dff8b6551ff836255ff977361ff9b7153ff9a6f52ff9a6f50ff9c7052ff986d4fff9c7152ff996c4dffbb642bffaa5625ff874018ff955428ffa55c2dff98562dffa76a3cffd89f60ffdfaf69ffd6aa66fff9d68afff6ca7dffa67a58ff9a7152ff9f7556ff966b4cff996f51ff9c6f4dff9c7252ff9b6d49ff976641ff936342ff8c5c3aff976542ff936240ff94623eff986845ff8f5f3cffa2714affa4744dff9c6e4cff9c6f50ff9b7051ff91694eff8f664eff8e6850ff8a644dff88624cff87614cff88634fff8b6652ff8d654fff9c6f52ffa27555ff91674dff9a7053ff8b6654ff9b745eff98725fff98735eff9a7565ff947163ff917369ff92746aff907874ff917a76ff967d78ff9c7155ff9a7055ff976d51ff9c7255ff956c51ff986e52ff9e7351ffad5a25ffaa5825ffa65a29ffa75e29ffa75927ff9c5628ffd38f4cffd79c5bffeebd70fffedc8dfff8dd91fff7d586ffa0744eff835e4bff90684eff875f45ff8f664cff895f45ff8d6449ffa77955ffa7764eff9c6c46ff926241ff9a6a48ff996a4aff986a4aff946749ff9e6e4bff93674bff946649ff8e644aff8d644dff8e654eff8e6751ff85614eff8b6551ff977158ffa0765dffa27a5eff987560ff9a7660ff8c746fff957b74ff947c77ff8e7673ff907873ff987c75ff987e77ff957a73ff947971ff957b74ff907773ff947a74ff947a75ff967c76ff9c837bff917b78ff987566ff987563ff9c7765ff9d7764ff9d755dff997158ff9b7257ffaf5c2cffb15c27ffb3652cffa55825ff9a4d1eff944c1effd38741fff0b060fff4bd6ffffedd8bfffedf8ffff9cc7aff9c7252ff9f7756ffb2855dff9c7350ffa07553ffac7d57ffb9895effba8a5effb48457ffb17f54ffb07f55ffae7e56ff9a715aff977664ff987b6eff987c6eff9c8075ff988078ff9d857eff8e7168ff8c6a59ff997864ffa68875ffa48877ffa08577ffa1887cff8d7d7fff8c7d7eff8d7d7cff8d7b7cff8d7a79ff8e7a79ff8d7979ff8e7a77ff8c7978ff8e7a78ff8f7a78ff8f7976ff957d79ff8f7b77ff8f7975ff907a78ff8d7a76ff927d79ff8d7b78ff94756cff91726cff91736dff91726cff92736dff91736dff92746cff9f684cffb05c27ffae5e24ffa65824ffa15120ff9c5020ffa7632dffd99850ffc88f4dffdead66fffee196fff7ca7cffbc8f6cffbb8d63ffbb8d62ffbb8d62ffb98b5fffb9885dffb5865cffb7885dffb0825bffaf7f57ffac7e58ffb3845bffa29799ffa2999dffa2989cffa29698ffa69a9effa59a9effa79c9effa79c9effa79d9fffa89d9fffaa9ea0ffa99e9dffa69b9affa19598ff9c9092ff998d90ff96898cff918284ff8c7d7fff8c7c7cff8d7c7cff8e7c7cff8d7b7aff8d7b7bff8e7b79ff8f7c7aff8e7a79ff907c7bff907c78ff907c79ff8d7a78ff8e7c7aff8e7c79ff92746cff95766fff90736dff92746dff977973ff9c817bff9a827fff9b817dffae673dffb66229ffa75726ffaa5927ff96471bff9a5424ff985f2effd39f60ffe7b875fff8d98efff6cd86ffa59b9dffa49a9effa59b9effa49b9fffa39a9fffa39a9fffa59b9fffa59ca0ff9d8d8aff9f806cffa98973ffa79895ffa59b9fffa49b9effa49c9fffa49b9dffa39c9fffa49b9effa69da0ffa79d9fffa79d9fffa79d9fffa89da0ffa79da0ffa69d9fffa79d9fffa79d9fffa79e9fffa49a9effa59b9effa39a9effa1989cffa1999dffa0979bff9c9295ff978c8fff978b8eff978b8dff968a8bff94888aff908284ff8e7f82ff91807fff8f7e7dff8b7b7bffa09699ffa19698ffa1989bffa1979affa1979cffa69796ff9f9495ffa19699ffa19494ffab7152ffb25d28ffa35324ff93461aff8d4218ffa56331ffb87f47ffe1aa67fff8cc83fff8ca7affac9f9affa19a9fffa29ba0ffa39ba0ffa39b9fffa49c9fffa49c9fffa49da1ffa49b9fffa49b9fffa59ca0ffa59da0ffa79fa1ffa79fa1ffa69fa1ffa7a0a2ffa7a0a1ffa9a1a2ffa8a1a2ffa8a1a2ffa8a1a3ffa9a1a1ffa8a0a2ffa8a0a2ffa69fa1ffa59ea0ffa59da0ffa69c9fffa49b9fffa49b9effa39a9effa49b9fffa39a9effa1999effa0999dffa0999dffa0999dffa0999dff9f989cff9f989cff9e979bff9e979bff9d9699ff999297ff999096ffa0999effa0999effa09a9fffa0999effa19a9effa19a9effa19a9effa19a9fffa1999effa2999fffa78c85ff9d6041ffa14d1cff97481aff954e20ffb17944ffcc985dffdba662ffefc487ffa39d9fffa39b9fffa49ca0ffa49da0ffa49da1ffa59ea2ffa59ea2ffa69fa2ffa69ea0ffa79ea0ffa8a1a2ffa8a0a2ffa9a1a2ffa8a1a3ffa8a1a3ffaaa1a3ffa9a2a4ffaaa2a3ffaaa3a3ffaca3a3ffada4a3ffada4a3ffada5a3ffada5a3ffaea5a3ffada4a3ffada4a3ffaca2a2ffa89ea0ffa59e9fffa29a9effa19a9effa39a9fffa19a9fffa1999fffa0999dffa0999dff9f989cff9f989cff9f989cffa0989bff9f989bff9e979bff9e979aff9c9499ffa19c9fffa19ca0ffa19ba0ffa29b9fffa29b9fffa39b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa59a9effaa9896ffad806bffb97e5affbb834dffc08c52ffdca45cffe0b98affa49da0ffa59ea2ffa69fa1ffa69fa2ffa69fa2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a1ffa8a1a3ffa8a1a3ffa9a2a4ffa9a2a4ffa9a2a4ffaba2a3ffaba3a4ffaca3a3ffaba4a3ffaea5a3ffb0a8a4ffb3a9a4ffb3a9a3ffb2a9a3ffb2a9a4ffb2a9a3ffb3aaa4ffb3a9a4ffb0a7a2ffafa6a2ffada4a2ffaaa1a0ffa99f9fffaa9fa1ffa99ea0ffa89e9dffa59c9effa0999dff9f989cff9f989cff9f989affa0989bffa1999bffa0989aff9e9799ffa19c9fffa19b9fffa29b9fffa29b9fffa29b9fffa39c9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49ca0ffb09a8fffbc8853ffd39e60ffeab36bffc5aa93ffa59ea2ffa69fa3ffa69fa3ffa69fa3ffa69fa2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa7a0a2ffa8a1a3ffa8a1a3ffa8a1a3ffa9a2a4ffa9a2a4ffaba3a3ffada4a3ffaea5a3ffafa6a3ffb2a9a4ffb5aba4ffb7aca5ffb7aca5ffb7aca4ffb7ada4ffb9aea5ffbaafa6ffb9aea5ffb7aca3ffb5aba4ffb4aaa3ffb0a7a1ffb1a7a2ffb1a6a1ffafa5a0ffaea5a0ffaea5a1ffaca3a0ffa39b9dff9f989bff9f989affa1989affa1999bffa2999bffa2999bffa19c9fffa19b9fffa29b9fffa29b9fffa29b9fffa49ca0ffa49ca0ffa49ca0ffa49ca0ffa49c9fffa59da0ffa49c9fffa49d9fffa49e9fffa8886fffbe8d56ffc4894dffdb9d5cffada19fffa69fa0ffa69fa1ffa69fa2ffa69fa2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a3ffa8a1a3ffa9a2a3ffa9a2a3ffa9a2a3ffa9a2a4ffa9a2a4ffaaa2a2ffada4a2ffafa6a3ffb1a8a4ffb3aaa5ffb6aca4ffb9aea6ffb9aea7ffb9aea7ffb9aea5ffbbb0a6ffbdb1a7ffbeb2a7ffbdb1a6ffbbb0a5ffbaafa5ffb9aea4ffb6aca2ffb5aba3ffb2a9a2ffb2a9a2ffb0aaa1ffaea7a0ffaea6a0ffaca6a0ffa49e9cff9f989bff9f989aff9f989affa0989aff9f989affa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa39ba0ffa49c9fff847063ffc7a883ffb1a29bffa59893ffa78668ffa2784dffbb8953ffd4914cffc08c64ffa7a0a1ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa7a0a2ffa8a1a2ffa8a2a3ffa9a2a4ffaaa3a2ffaba3a3ffaba3a3ffaba3a3ffaba3a3ffaca3a3ffaea5a2ffb0a7a3ffb3a9a5ffb5aba5ffb7aca5ffbaafa6ffbbb0a7ffbaafa6ffbcb1a6ffbfb3a7ffc2b5a8ffc2b5a7ffbfb3a7ffbeb2a5ffbeb2a5ffbfb2a6ffbcb1a4ffb9afa4ffb8ada3ffb6aba2ffb5aba2ffafa9a0ffaea8a0ffaea8a0ffaea8a0ffa79f9cffa09899ff9f989aff9e9799ff9e9799ffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fff9f8c85ff9b7450ffbc9166ff7e5534ffe2b57affcd9f6affb98957ffca975effe0a762ffe8a255ffb9a093ffa7a0a0ffa7a1a0ffa7a0a1ffa7a0a2ffa8a1a1ffa9a3a2ffa9a3a2ffa9a2a2ffaba2a2ffaca3a3ffaca3a3ffada4a2ffaea5a2ffaea5a2ffaea5a2ffaea5a2ffb0a7a3ffb2a9a3ffb4aaa4ffb6aca4ffb7aca4ffbaaea5ffbcafa6ffbeb1a5ffc6b6a7ffc7b8a7ffc8b9a8ffc5b7a8ffc4b6a8ffc4b6a8ffc4b7a8ffc3b5a7ffc0b3a6ffbdb2a5ffbcb1a3ffbaafa3ffb9afa3ffb8aea2ffb5aca1ffb1a8a0ffafa79fffafa6a0ffaaa09dffa1999aff9e9798ff9e9798ffa19b9effa29b9fffa29b9fffa29b9fffa29b9fffa29b9fffa29b9fff937c6cff986f48ffd09b62ffb98856ff8e5f37ffd1a267ffe5af6bffe4b06dffeab871ffe9b46effaca1a0ffa8a2a1ffa8a2a1ffa8a2a1ffa8a2a1ffa9a3a2ffaba2a2ffaba2a2ffaca3a3ffaca3a2ffada4a2ffaea5a2ffafa6a3ffb1a8a3ffb1a8a3ffb1a8a3ffb2a9a4ffb4aba4ffb5aca5ffb7aca4ffb9ada4ffbaaea4ffbbaea4ffbdb0a5ffc4b5a7ffcab9a8ffcbbaa8ffcab9a8ffc8b9a8ffc8baa8ffc8b9a8ffc7b8a7ffc6b7a8ffc3b5a6ffc2b5a7ffc1b4a6ffbeb3a5ffbeb3a4ffbeb3a5ffbeb3a4ffb8ada2ffafa59fffada49effa99f9dffa99e9cffa89d9bffa39a9affa19a9cffa19b9effa19b9fffa29b9fffa19b9fffa19b9fffa29a9eff835f43ff815836ff92663fffdba768ffdba76aff764e2fff835e41ffa77d52ffe6b472fff0c079ffaea4a0ffaaa2a1ffaaa3a2ffaba2a2ffaba2a2ffaca3a1ffada4a3ffaea5a2ffaea5a2ffafa6a2ffb0a7a3ffb1a8a3ffb2aaa3ffb5aaa3ffb6aba4ffb6aca3ffb7ada4ffb8aea5ffb9aea5ffbaafa6ffbbb0a7ffbbb0a6ffbdb1a6ffc2b5a7ffcbbaa9ffccbca8ffcbbba7ffcbbba8ffcabaa8ffcab9a8ffc9b9a8ffc7b8a7ffc6b7a7ffc6b7a7ffc7b9a7ffc7b8a7ffc7b8a7ffc6b7a7ffc6b7a6ffc5b8a6ffc3b6a5ffb7aca1ffaca39effaaa19dffaea39effafa49dffb1a59dffa19a9cffa19a9cffa19b9effa19c9fffa19c9fffa19b9fffa29b9eff926d51ff966235ffcc995efff1c989fff2c987fff0c582ffcfa268ff976d46ffe6b16cffe8bc7dffada3a0ffaca3a1ffada4a1ffada4a1ffada4a1ffaea5a2ffafa6a2ffb0a7a3ffb1a9a3ffb2aaa4ffb3aaa4ffb5aba4ffb7ada4ffb9aea4ffbaafa6ffbbb0a5ffbcb0a6ffbcb1a7ffbdb2a6ffbeb2a6ffbfb2a6ffc1b3a7ffc5b6a7ffccbba8ffcebda9ffcfbea9ffcfbfa9ffcfbfa8ffcebea8ffcfbfa8ffcdbda8ffcbbaa8ffcabba9ffcabba7ffcbbca8ffccbca8ffcbbca8ffcabca8ffc9bba7ffc9baa7ffc7b9a6ffc3b7a5ffbdb1a2ffbaafa1ffbfb3a2ffbeb3a2ffbcb1a1ffa39c9dffa29c9dffa39c9effa39c9effa39c9effa39c9effa49d9effa2928affa06a3bfff9d28bffffe4a1ffeecb8cffaf8354ff8a5730ffaf7846fff1bc74ffe0be8cffafa6a1ffafa6a1ffafa7a2ffb0a7a2ffb0a8a1ffb1a8a2ffb2a9a2ffb4aba3ffb7aca3ffb7aca4ffb7aca4ffb7ada4ffb9afa4ffbcb1a6ffbeb1a6ffbfb3a7ffc0b3a8ffc0b4a7ffc1b5a7ffc2b5a7ffc5b7a7ffc7b9a8ffcbbba8ffcfbfa8ffd1c1a8ffd4c3aaffd4c4aaffd6c4aaffd5c3a9ffd5c3a9ffd4c3a9ffd2c2a9ffd1c1a8ffd1c1a8ffd1c0a8ffd1c1a9ffd1c0a8ffd1c0a8ffd0c0a8ffcebfa8ffc9bba5ffc9bba6ffc8baa5ffc7baa5ffc6b9a5ffc3b5a3ffbeb2a2ffa49d9dffa49d9effa49d9effa59e9fffa59e9fffa59e9fffa69e9fffa89fa0ff9d785cffc5965bfffbdf9affa67c53ff754225ff7f4928ff8d512affc48c4fffd7b488ffb2a9a1ffb3aaa1ffb3aaa2ffb5aba2ffb5aba2ffb5aba3ffb7aca3ffb9aea4ffbbb0a6ffbbb0a4ffbbb0a5ffbbb1a5ffbbb1a5ffbdb1a6ffbfb3a6ffc1b5a7ffc3b6a7ffc4b8a7ffc6b9a8ffc8baa8ffc9bba8ffcdbda9ffd0c0aaffd3c3aaffd5c4abffd9c5acffd9c7acffdac6acffd8c5acffd7c5acffd8c6abffd9c6acffd7c5abffd7c5abffd8c5aaffd6c4a9ffd4c3a8ffd4c3a9ffd3c3a9ffd2c2a9ffcfc0a8ffcebfa8ffcdbea7ffccbca7ffc9bba6ffc4b6a4ffc0b3a1ffa59d9dffa69e9effa79f9effa7a0a0ffa8a0a0ffa9a0a0ffa9a1a0ffaaa1a0ffac9f99ff9b683affdab174ff66381eff542b18ff6d3d23ff874f2fffbf864effd8bd98ffb7aca3ffb8ada3ffb9aea4ffb9aea4ffb9aea4ffbab0a4ffbdb1a4ffbeb3a5ffc1b4a6ffc1b5a6ffc2b5a6ffc1b5a7ffc1b4a7ffc1b4a7ffc2b6a7ffc5b7a7ffc8b9a8ffc9bba9ffcbbdaaffcdbda9ffcfbfaaffd2c2aaffd4c3abffd7c6acffdac8acffdbc9acffddc9acffdcc9abffdcc9acffdbc9acffdbc9abffdccaacffdbc9acffdbc9acffdccaabffdbc9abffdbc9aaffdac9abffd8c7aaffd7c5aaffd4c3a8ffd2c2a8ffd2c2a7ffd1c1a7ffcebea6ffc9baa4ffc7b8a2ffa79f9fffa8a19effa9a19fffaaa29fffaba3a0ffaba3a0ffaba3a0ffaca4a0ffada4a0ff9d795cffbb8751ff784426ff7c4426ff8e5028ff975628ffd09b5effd3bc9cffbab0a4ffbab0a4ffbbb1a4ffbeb2a4ffc0b3a5ffc3b5a7ffc4b7a7ffc6b7a7ffc7b9a7ffc7b9a7ffc7b9a8ffc7b8a7ffc7b9a7ffc7b9a7ffc6b9a7ffc8baa7ffcbbca9ffd0c0a9ffd2c2aaffd3c3aaffd6c5acffd8c6acffdbc9adffdccaadffddccadffe0ceadffe0cfadffe0cfadffe0cfadffe1d0aeffe2d1aeffe3d2aeffe2d2adffe1d0adffe0cfadffe0cfadffe0cfadffdecdabffddccacffddcbabffdccbacffdccaabffdbc9abffdac8aaffd7c5a8ffd4c2a7ffcfbfa6ffa9a19fffaaa29fffaca4a0ffada49effaea49fffaea5a0ffb0a59fffb3a8a0ffb4a9a1ffb7ab9fffaa7c51ffb98251ff874c28ff8e532bffa97748ffb17e4cffd2bda2ffbdb2a4ffbdb2a5ffbfb4a6ffc4b7a7ffc7b9a7ffc9bba8ffccbca8ffcebda8ffcdbda8ffccbda8ffccbca8ffcbbca9ffc9bba9ffcabca9ffcbbca9ffcdbea9ffd1c1aaffd5c4abffd8c6abffdbc9acffddcbadffdfcdadffe0cfadffe1d1aeffe3d3aeffe3d4afffe4d5afffe6d8b0ffe7d8afffe7d9afffe8daaeffeadbb0ffeadaafffe8d8afffe5d7aeffe5d7aeffe4d6aeffe2d5adffe3d4adffe3d3acffe3d2adffe3d2acffe1d1acffe1d1abffe0d0abffdeccaaffd9c8a8ffaba39fffaea59fffb1a7a0ffb2a8a0ffb4a9a0ffb5a9a0ffb5aaa0ffb7aca1ffb8aca1ffbaaea2ffbea891ffc49159ffdfae6fffd2a469ff835632ffc1915dffc4b6a6ffc3b7a7ffc4b7a7ffc7b8a7ffcabba8ffcfbfa9ffd1c1aaffd3c3abffd4c3aaffd4c2aaffd1c1a9ffd0c0a9ffcfbea8ffcfbfa8ffd0c1a9ffd3c3abffd6c4adffd9c7acffdccaacffdfcdaeffe0d0aeffe3d3aeffe4d5afffe6d7b0ffe7d9b0ffe8d9afffeadcb0ffeddfb1ffeee0b1ffeee0b1ffeee0b1ffefe1b2ffefe2b2ffeee1b1ffeadeb0ffe5dbafffe4dbafffe3d7aeffe2d7aeffe2d6adffe2d5adffe3d6aeffe3d6acffe3d6acffe3d5acffe3d4acffe1d1abffdecdaaffb1a69effb4aaa0ffb7aca0ffbaaea1ffbbb0a2ffbbafa2ffbbaea2ffbcb0a1ffbdb2a3ffbfb2a2ffc3b3a2ffb2814dffd8bc96ffc2aa92ff99693fffebc388ffc8baa8ffc9bba8ffcbbda7ffccbea7ffd1c1a9ffd4c4aaffd7c5abffd8c6acffd9c7acffd9c7acffd8c6abffd5c4aaffd4c3aaffd4c3aaffd6c4abffd9c7abffdccaacffdeceadffe1d1aeffe5d6afffe7d9b0ffeadbb1ffecdeb1ffeee0b2ffefe1b2ffeee1b1ffeee2b2ffece2b3ffede2b2ffeee3b3fff0e4b2fff3e6b5fff3e6b3ffeee3b2ffe7dfafffe3dbafffe1d9aeffded5aeffded4aeffe0d6adffdfd5adffe1d7adffe4daaeffe3d8adffe3d7abffe4d7acffe5d6abffe4d5acffb8ada0ffbaafa0ffbdb1a1ffbfb3a2ffc1b4a4ffc1b4a4ffc2b4a3ffc3b5a4ffc5b7a4ffc6b8a5ffc5a886ffdebb8effcbbca7ffcab8a0ffd7a771ffd8c1a1ffd0c0a8ffd0c1a8ffd1c1a9ffd4c3a9ffd7c6abffdbc9abffdccaadffdccaacffddcbacffdeccadffdccbacffdccbacffdccbacffdccbabffddccabffdfcfadffe2d3aeffe5d6b0ffe9dab1ffecdeb2ffeee0b2ffefe2b3ffefe4b4fff1e4b4fff1e5b4ffede2b2ffe6deb2ffe2dab0ffe6dfb1ffebe2b2ffeee4b3fff2e6b5fff2e6b4ffede3b3ffe6dfb0ffe1daafffe1daaeffe2daaeffe3daaeffe3daaeffe1d7adffe3daadffe6dcaeffe5dbaeffe6dbadffe9dcadffe7dbacffe8dbadffbfb2a2ffc1b4a3ffc4b6a3ffc5b7a3ffc8b9a5ffc9baa6ffc8bba6ffcbbca6ffcdbca6ffcebea7ffd2c0a7ffd3c1a9ffd5c3a9ffd5c3a9ffdac4a5ffd8c6aaffd8c6aaffd9c7abffdac8acffdbcaabffdecdacffe0d0adffe0d0adffe0d0adffe1d1adffe1d3aeffe1d1adffe1d2adffe2d3aeffe4d5aeffe4d6aeffe7d8afffe9dcb1ffece0b1ffeee2b3ffeee3b3ffeae1b2ffe7dfb2ffe6deb2ffe7dfb2ffe7deb2ffe5deb2ffe1d9b0ffe1d9b0ffe4ddb2ffe6dfb1ffe7e0b0ffe7e0b2ffe4ddb0ffe0d8b0ffdad3aeffdad4afffded7aeffe2dbaeffe5deaeffe4ddaeffe2d9adffe0d7adffe2d9acffe1d9adffe4dbacffe7ddadffe6dbadffe6dcacffc9baa4ffcabba5ffccbca6ffcdbea5ffd0c0a7ffd2c1a7ffd4c2a8ffd6c3a8ffd7c4a8ffd9c6a9ffdac8abffdcc9acffddcbabffdeccacffdecdacffdecdacffdfcfadffe0d0adffe1d1aeffe2d3adffe4d5aeffe5d6aeffe5d7aeffe5d7aeffe6d8aeffe7d9afffe7d8afffe8d9afffe9dcb0ffebdeb2ffeddfb2ffeee0b2ffede2b1ffeee3b3ffede2b3ffe6deb2ffddd6b1ffdad2afffdad2afffdbd3afffdcd4b0ffddd5b1ffe1dab1ffe3dcb1ffe3dcb1ffded6b1ffd6cfaeffd1caafffc8c3adffc4bfacffc2c0acffc6c3acffcdc9abffd7d1adffdcd6aeffded7adffdfd8adffddd5acffdcd5acffd9d2acffd9d1abffdcd4abffe0d6acffe2d8abffd6c4a8ffd8c6a8ffd9c7a8ffd9c7a9ffdac7a9ffdbc9abffddccabffddcbaaffdeccaaffe0cfabffe3d1acffe3d3acffe4d6acffe5d6adffe5d7adffe5d7adffe7d8aeffe8d9aeffe8daaeffe8dcaeffe8dcafffebddb1ffeadeafffeadfb1ffeadfb1ffebdfb1ffebdfb1ffeadfb0ffebe1b1ffece1b1ffebe1b2ffe9e0b2ffe9e0b1ffe6dfb0ffe3dcb0ffdfd8b1ffd8d0afffd5cdaeffd0c9afffcec8afffcec8adffcec8adffd7d0afffd6cfafffcfc8aeffc3c0acffbcbbacffb9b8abffb7b6aaffb8b9abffb9b9abffb9b9abffbebeabffc3c0aaffcbc7acffd1ccadffd4ceacffd3cdacffcdc9abffc6c3aaffc2c0aaffccc6abffd0caabffd6cdabffdfcfaaffe1d2aaffe1d2aaffe1d3abffe2d3abffe3d4abffe3d5abffe4d6abffe5d7acffe8daacffeadcaeffeadcaeffe9dcafffe7dcafffe7dbafffe5daafffe4daafffe3daafffe1d9afffdfd7afffdfd7afffe0d8afffe3d9b0ffe3dcb0ffe4dcb1ffe4dcb0ffe4dcb0ffe2dbb0ffe3dcb0ffe3dcb0ffe0d9b0ffdbd4afffdad2b0ffddd6b1ffddd6b1ffd9d3afffcfcaaeffcbc6aeffc1bfacffbdbbadffbcbaadffc2bfaeffc4bfadffbfbcadffb9b8abffb4b5abffb4b5aaffb7b8aaffb8baaaffbebfacffbfbfacffbfc0acffb9bbabffb8baaaffb9bbaaffbabbaaffb8b9aaffb9b9a9ffb7b7aaffb5b6a9ffb7b8aaffc0bdabffc5c1aaffc7c2a9ffe6daabffe5daacffe6daadffe5d9adffe6dbadffe6dbadffe7dcadffeaddafffebdeaeffeadeaeffe9deafffe4daadffdad2adffd4ceaeffd2ccadffcfcaadffcec8adffcdc8aeffcdc8adffcfc9aeffccc9acffcecaadffd3cdafffdbd5afffddd6afffded8b0ffddd7b0ffd9d2aeffd5cfafffcfcaaeffcbc7aeffc7c4adffc9c4aeffcbc6aeffcbc6aeffc8c4aeffc2beacffbab9acffb6b6acffb5b6acffb4b4abffb6b6acffb4b5abffb3b5abffb3b5aaffb4b5abffb8baabffb9bbaaffbbbdabffbfbfacffb7b9abffafb3a9ffafb2a9ffafb2aaffafb2a9ffafb2a8ffafb2a8ffafb3a8ffb0b2a8ffb1b3a8ffb4b5a8ffbbb9a9ffbebba8ffbebca8ffe2d9acffe1d8acffe0d7adffdfd7adffdfd7acffe0d7acffe2d9adffe2daaeffe0d8adffdcd4adffd6cfacffcfcaacffc6c2acffc3c1acffc3c1acffc4c1adffc4c2aeffc5c3aeffccc8aeffcfcaafffcec9adffcfcbadffd2cdaeffd5cfaeffd3cfaeffcfcbaeffcdc8adffc7c5aeffc1c1adffbbbdadffbabcaeffb9baadffb7b8acffb7b7acffb5b6abffb2b4aaffb0b2abffafb2aaffafb2abffb1b3abffb2b4abffb4b5abffb4b5aaffb4b5aaffb4b6aaffb8baacffbfbfacffbcbdaaffb3b6aaffb0b4aaffafb3aaffafb2aaffafb2aaffafb2a8ffafb2a8ffaeb1a8ffaeb1a9ffaeb1a8ffaeb1a7ffaeb1a7ffafb1a7ffb1b3a8ffb5b5a7ffb7b7a8ffd0caacffd3ccacffd5cdabffd4cdabffd5ceacffd7cfacffd5cdabffd3ccabffcfc9acffc9c4acffc5c1adffc1bfacffbebdacffbcbcacffbcbbacffbfbdacffc2c0acffc4c1acffc7c4adffc7c4adffc5c2acffc5c2acffc2c0acffc0bfadffbebdacffbbbbadffb7b9adffb5b7acffb3b6acffb2b6adffb1b6adffb1b5acffb0b4acffafb2aaffafb2aaffaeb1aaffaeb1a9ffaeb1a9ffafb1aaffb0b2a9ffb1b3a9ffb1b3aaffb3b5abffb3b6abffb0b5abffafb4aaffb2b5a9ffb2b5aaffafb3aaffafb2a9ffafb2a9ffafb2a9ffafb2a8ffafb2a8ffaeb1a8ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffbbb8a8ffbfbcaaffc0bdaaffc2bcaaffc1bdaaffc0bdabffbdbbaaffbbbaaaffb9b8aaffb8b7a9ffb6b7aaffb5b7aaffb4b6abffb4b6abffb3b6abffb5b7abffb6b7acffb6b6acffb5b7acffb3b7acffb3b6abffb2b6acffb1b5abffb1b4abffb0b5abffb0b5acffb0b5acffb0b5acffb0b5acffb0b5acffb0b5acffb0b5acffb0b5acffb0b5abffafb3aaffaeb1a9ffaeb1a9ffaeb1a9ffaeb1a9ffafb2a9ffb1b3a9ffb2b3a9ffb1b5abffafb4aaffafb4aaffb0b3aaffafb3aaffafb3a9ffafb2a9ffafb2a9ffafb2a8ffaeb2a8ffaeb1a8ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffacb0a6ffadb0a5ffadb0a4ffadb0a6ffadb0a7ffaeb1a8ffafb1a8ffafb1a8ffafb1a8ffafb1a9ffafb1a9ffaeb1a9ffadb2a8ffaeb2a9ffafb2aaffafb2aaffafb2aaffaeb3a9ffafb3aaffafb3aaffafb3aaffb0b3aaffb0b3aaffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b3aaffafb2a9ffafb2a9ffafb2aaffafb2a9ffb0b2a9ffb2b4aaffb0b4aaffb0b3aaffb0b3aaffb0b3aaffafb3aaffafb3aaffaeb2a8ffafb3a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb2a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a5ffadb0a4ffadb0a4ffaaafa7ffabb0a6ffabb0a7ffabb0a8ffacb0a8ffadb0a8ffadb0a8ffaeb1a9ffadb1a9ffadb1a8ffaeb1a8ffaeb1a9ffaeb2a9ffafb2a9ffafb2aaffafb2a9ffafb3aaffafb4aaffafb4aaffafb3aaffb0b3aaffb0b4aaffb0b3aaffafb4aaffafb4aaffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffafb4aaffafb4aaffafb4aaffafb4aaffafb3aaffafb3a9ffafb3aaffafb3aaffafb3aaffafb3aaffafb3a9ffafb3a9ffafb2a8ffafb2a8ffafb2a8ffafb2a8ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a6ffadb0a6ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffaaafa7ffaaafa7ffaaafa6ffabb0a6ffabb0a8ffacb0a8ffacb0a8ffadb0a8ffadb0a8ffacb1a8ffadb1a9ffaeb1a9ffaeb1a9ffadb1a9ffadb2a8ffadb3a8ffaeb2a8ffafb2a9ffafb2a9ffafb3aaffafb4aaffafb4aaffafb3aaffafb3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb3a9ffafb3aaffafb3aaffafb3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb3aaffafb3aaffafb4aaffafb3aaffafb4aaffaeb3a9ffafb2a8ffafb2a8ffaeb2a8ffadb3a8ffadb2a7ffaeb1a7ffaeb1a7ffadb1a7ffadb0a7ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a6ffadb0a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffaaafa5ffaaafa6ffaaafa6ffaaafa6ffaaafa6ffaaafa7ffabb0a7ffacb0a8ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffaeb1a8ffaeb1a9ffaeb1a9ffadb1a8ffadb2a8ffaeb2a8ffaeb2a8ffaeb2a8ffafb2a8ffafb2a9ffafb3a9ffafb3a9ffafb3a9ffafb3a9ffafb3a9ffadb0a8ffaeb1a8ffaeb2a8ffafb2a8ffafb4aaffafb4aaffafb4aaffafb3aaffb0b3aaffb0b3aaffb0b3aaffafb3aaffafb3aaffafb4aaffafb3a9ffafb4aaffafb2a8ffaeb2a8ffadb3a8ffadb1a7ffaeb1a7ffadb1a7ffadb0a7ffacb0a6ffadb0a6ffacb0a6ffacb0a6ffacb0a6ffacb0a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacafa3ffacafa5ffaaafa5ffaaafa5ffaaafa6ffaaafa7ffaaafa6ffabb0a6ffabb0a6ffabb0a7ffacb0a8ffacb0a8ffadb0a8ffadb0a8ffacb0a8ffadb1a7ffadb1a8ffaeb1a8ffadb2a9ffadb0a8ffadb0a8ffadb2a8ffadb2a8ffaeb2a8ffaeb2a8ffafb2a8ffaeb1a8ffadb0a8ffabaea8ffacaea8ffabaea7ffacafa7ffafb2a9ffafb4aaffafb4aaffafb3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb3a9ffaeb2a8ffaeb2a8ffadb3a8ffadb3a8ffaeb1a7ffacb2a7ffacb0a6ffacb0a6ffabb0a6ffabb0a6ffabb0a4ffacb0a4ffacb0a4ffabafa5ffabafa4ffacb0a3ffadb0a4ffacafa3ffacafa3ffacafa3ffacafa3ffacafa5ffacafa5ffaaafa5ffaaafa5ffaaafa6ffaaafa6ffaaafa6ffaaafa6ffabb0a6ffabb0a6ffabb0a7ffacb0a7ffadb0a8ffadb0a8ffadb0a8ffacb0a7ffacb1a7ffacb0a7ffabafa7ffaaafa7ffadb0a8ffadb0a8ffadb0a8ffadb0a8ffacafa7ffacaea7ffabada7ffabaca7ffabaca7ffacada8ffacafa7ffadb0a7ffaeb2a8ffafb3a9ffafb2a8ffafb2a8ffafb3a9ffaeb2a8ffaeb3a9ffaeb3a8ffaeb3a7ffadb2a8ffadb3a8ffadb3a8ffadb3a8ffadb2a8ffaeb2a7ffaeb2a6ffadb1a7ffacb2a7ffacb1a6ffacb0a5ffadb0a4ffacb0a4ffabafa4ffabafa4ffabafa3ffacafa3ffacafa3ffacafa3ffacafa3ffabaea2ffabafa3ffacafa3ffabaea4ffacafa5ffabafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa5ffaaafa6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffabb0a6ffacb0a7ffacb0a7ffacb0a8ffacb0a8ffabafa7ffaaafa6ffabafa7ffabafa7ffabafa7ffabaea6ffabada7ffabaca7ffaaaca7ffa9aca7ffa9aca7ffa9aca7ffacada8ffacafa8ffadb2a8ffadb2a7ffaeb2a8ffaeb2a8ffaeb2a8ffaeb2a8ffadb2a8ffadb3a8ffadb3a8ffadb3a8ffadb2a8ffadb2a8ffaeb2a7ffafb2a6ffaeb1a7ffaeb1a7ffadb1a7ffadb1a7ffadb1a6ffadb0a5ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffadb0a4ffacb0a3ffabafa3ffacafa3ffacafa3ffabaea2ffabaea2ffabaea2ff674631ff5d3c27ff67462fff603f2bff63422dff61402dff61402bff65432dff64422cff603e29ff603e28ff62402aff603d28ff5f3d28ff5e3c26ff5d3a26ff5d3a27ff5b3825ff5d3a27ff5c3a26ff593724ff583522ff51301cff4f2e1aff4d2c19ff4a2a16ff4c2c19ff492916ff4e2c18ff4d2b17ff4a2917ff4b2a19ff74533bff735138ff76553aff704f37ff715139ff714f39ff705038ff6f4e36ff704f37ff755239ff735139ff6f4d37ff725038ff704e38ff6e4e37ff6e4c35ff6f4c37ff704e36ff6b4934ff6b4732ff65432dff5e3c27ff55341fff52311dff51311eff553421ff4e2e1bff4e2d1aff51301aff492917ff482918ff462717ff76553fff76553eff78583fff7d5c43ff826248ff816046ff805f44ff7e5d41ff7d5b41ff816045ff7a593fff7a5940ff79583fff7e5c43ff7d5c42ff7d5b41ff74533aff75543bff76533aff77563cff6f4d33ff644229ff613f27ff67452cff66432eff623f2aff623f29ff5b3924ff573520ff55331dff4e2d1aff4e2d1bff7d5e47ff7e5f48ff7d5d45ff816148ff83634aff83644bff83644cff83644bff83634bff84634cff85654dff84654dff856751ff83644cff7f5f46ff7c5b43ff795941ff77563fff77553eff6d4b34ff6d4c34ff704e35ff6d4a32ff735139ff6d4b34ff6a4831ff68462fff623f29ff613e29ff61402bff5d3b28ff5c3b28ff9d7d60ffa28366ffa18266ff9d7e62ff92745cff896d57ff886c57ff8a6e59ff896c56ff8a6e58ff8a6d58ff8a6e59ff8b6f59ff8d715bff8b6e58ff83654fff7e5f47ff7b5b42ff795840ff7a593fff76553eff75543cff735239ff74533bff70503aff705039ff6e4d36ff6d4c37ff6b4b35ff6c4c37ff6b4a35ff6b4b36ff9e7b60ffac896affb3906effb49270ffb69674ffb99a77ffc1a17dffbb9d7affba9d7affa7896cffa28568ffaf9376ffa78b6effa58a70ff937861ff8b705bff856953ff7e604aff785a44ff755640ff785a44ff795b44ff785b43ff7a5b44ff7b5c44ff785840ff76553fff775741ff7e5e45ff7c5d45ff7b5942ff79573fffa98160ffa57f5fffa67f60ffaa8465ffab8567ffac886affae886affac8768ffad896bffaa876bffa68469ffa9876bffa38368ffa28268ffa8876bffb69676ffab8d6fff9d7e65ff997c65ffac8d6fffac8f70ff96795dff90745cff886b56ff896c57ff886b57ff82634eff82654fff846650ff846751ff7c5e48ff785942ff9d7452ff9c7353ffa27959ffa27c5dffa17d5effa17e62ffa27f64ffa38064ffa68266ffa98368ffaa886dffa8876cffa9866affa98568ffaa8568ffb8916effa78467ffab8769ffb08b6dffa48368ffa8886dffbc9876ffb69776ffa4866aff947962ff9a7f69ff9b7f67ffa3876cff9e8269ff8f735dff866b56ff826550ff9c7353ffa17857ff9e7656ff9a7354ffa27655ffad825fffae815dffbd8c62ffa87e5cffb58764ffa58266ffa78468ffa17d61ffa27f63ff9e7a5effa27c5effa37e61ffa17e63ffa17f64ffa07f65ffa28167ffa98568ffb9926dffbf9770ffbb9570ffad8c6dffa08366ffa48567ffbd9a74ffcfa87dffc2a17cffac8d6effa17756ffa57a58ffa07554ffa17757ffd19b67ffaf8460ffb68259ffc8915fffa47754ffba875cffa57d5effa77e60ffa27b5dffa17a5aff9e7759ff9a7357ff9c765aff977157ff997559ff977156ffa07a5dff9a775effa88262ffbd926cffbe946fffa28061ffba9169ffc4976effc8976cffc09571ffb58e6fffac8b70ff987054ff9a7255ff976d50ff9b7253ffb47447ffa77d58ffa67249ffc68751ff9d704effb67a4eff967158ff977257ff967054ff976f52ff976e4fff976f50ff9a7051ff996f4fff956b4aff986d4cff9d7250ff9c7456ff987256ff9f7759ffa57e5eff9f785affa77d5cffb58761ffa47d61ffa07d63ff9e7c65ff9e7d66ff946b4eff91674aff8f6547ff936849ffa66132ff98603bffac6e41ffca7d43ff936242ffbb7b4aff926b51ff936c51ff926a4dff8e6549ff906649ff906649ff956a4bff906648ff8c6346ff926849ff93694cff976e51ff977053ff976f53ff987154ff9c7456ff9c7356ff9d7557ff987154ff977157ff97735aff97735aff956a4cff95694cff966a4cffa66d44ff994e21ff914f29ffa86236ffbd7a42ffcc9458ffcc8a51ff996f52ff976d4fff9b6f4fff996a45ff8b5a38ff8b5b3aff93623cff956641ff996b48ff916648ff8a634aff845e48ff845f49ff835f4aff86614bff87624eff85604bff8b654dff8e674dff8f674eff8f6850ff8d6855ff9a7053ff9a6f52ff986e50ffa7673bffa05222ffa25929ffab6937ffdea964fff1ce83ffcca36aff926b50ff91674bff93684bffa0704bff936340ff976645ff966645ff986947ff986b4aff94694eff8c654eff8e6851ff946c54ff916c58ff927060ff957363ff937263ff977769ff967769ff92756cff937872ff947d78ff957468ff967468ff967363ff9e6a4effb05e27ffa15321ffaa612affe1a45afff6d285ffd1a56dffb1855dffac8058ffb4855bffb5865bffae7e55ffa78269ff9c8882ff9f8b86ffa08e8cff9a847fffa48e85ffa49189ff9a8a89ff918485ff8d7c7dff8c7a7aff8d7a79ff8d7a79ff907b78ff8f7b77ff8e7a77ff8e7c78ff998582ff998583ff9e8a88ff9d8b8affac7353ffa95826ff94481cffb17841ffedc17bffcfb48dffa29a9effa39a9fffa49b9fffa2989affa48f87ffa69b9dffa59d9fffa59d9fffa69ea0ffa79fa0ffa79ea0ffa69ea0ffa69d9fffa59b9effa39a9effa2999dff9f969aff9b9295ff9a9194ff988e91ff968a8dff938689ffa09a9effa09a9effa19a9effa29b9fffa29a9fffa38881ffa36b4dffae7142ffd09b5bffc5ad94ffa49ca0ffa59ea1ffa69fa2ffa69fa1ffa79fa1ffa8a0a2ffa8a1a3ffaaa1a3ffaaa2a3ffada4a3ffb0a6a3ffafa7a3ffafa6a3ffada4a2ffa8a0a0ffa59d9effa59b9fffa39b9dff9f989cff9f989bff9f979bff9e9699ffa19b9fffa29b9fffa29b9fffa49ca0ffa49c9fffa49c9fffa49c9fffb48d69ffd69d5cffafa29cffa69fa2ffa69fa2ffa7a0a2ffa8a1a3ffa8a1a2ffa8a1a3ffa9a2a3ffada4a2ffb0a7a3ffb5aba4ffb8ada6ffb8ada4ffbbafa6ffbaaea4ffb6aca3ffb2a9a1ffb1a7a1ffaea6a0ffaaa29fffa0999affa0989affa0989affa29b9fffa29b9fffa29b9fffa19798ff9f846effb69573ffb4916effc18f58ffcd9766ffa7a0a0ffa7a0a1ffa7a1a1ffa8a1a2ffa9a2a2ffaba3a2ffaca4a2ffaca4a2ffb0a7a2ffb4aaa4ffb8ada4ffbbafa5ffc1b4a6ffc4b6a7ffc1b4a7ffc0b4a6ffbcb1a4ffb9aea2ffb5aca1ffb0a9a0ffaca49effa29a9aff9e9798ffa19a9dffa19b9fffa19b9fff96837aff9e7247ffbf8d57ffab7f50ffd6a668ffccae89ffa9a2a1ffa9a2a1ffaba2a2ffaca3a2ffada4a2ffafa7a2ffb3a9a3ffb3aaa3ffb6aca4ffb9ada5ffbbafa5ffc3b4a7ffcabaa7ffc9b9a8ffc8b9a8ffc6b7a7ffc4b6a6ffc3b5a6ffc2b5a5ffbfb3a4ffafa59effaaa09cffaa9f9bffa19b9cffa29b9effa29b9eff9e8d85ffbe8d56fff3d08fffbd905bffc7945bffc8b092ffada4a1ffaea5a1ffafa6a2ffb2a9a3ffb4aba4ffb7ada4ffbbafa5ffbdb1a6ffbeb2a6ffc0b4a6ffc6b7a7ffcebea8ffd1c0a9ffd1c0a8ffd1c0a8ffcdbda8ffcdbda7ffcebea8ffccbda7ffc9bba6ffc4b7a4ffc1b5a3ffbeb2a1ffa49d9dffa59e9effa69f9fffa89f9fffaa8562ffb8905fff6d3c21ffa56c3dffc5b198ffb5aba2ffb7aca3ffb8ada3ffbcb1a5ffbeb2a5ffbeb2a6ffbfb3a6ffc4b6a7ffc7baa8ffcbbca8ffd0c0a9ffd6c5abffdac7acffdac7abffd9c7abffd9c7abffd9c7aaffd8c6a9ffd6c5a9ffd2c2a8ffcfc0a7ffccbda6ffc5b6a2ffa8a09effaaa29fffaca39fffaea49fffad9c8fffa57246ff874c28ffb07946ffc6b6a1ffbcb1a4ffc2b5a5ffc6b8a7ffc9baa7ffc9baa7ffc8b9a8ffc8baa8ffccbda8ffd3c3aaffd8c7abffdccaacffdfceadffe1d1aeffe3d3aeffe4d4aeffe6d6aeffe3d3adffe2d2adffdfd0acffdfceabffdecdabffdccbaaffd6c5a7ffafa69fffb4aaa0ffb7aca1ffb8ada0ffbbafa1ffbd9b76ffd2ae80ffb28455ffc5b8a7ffc8baa7ffcfbfa8ffd4c3aaffd6c4abffd3c2a9ffd1c0a9ffd4c3aaffdac8acffe0cfadffe4d5afffe9dab0ffeaddb0ffecdfb1ffede1b1ffefe2b2ffefe2b1ffe6dcafffe1d8aeffe0d5adffe1d5adffe3d7acffe3d5abffe1d2aaffbcb0a1ffc1b4a2ffc4b6a4ffc5b7a4ffc9baa5ffd1b899ffcfbea6ffd8bc98ffd4c3a9ffd6c5aaffdccaabffdecdacffdfceacffdeceacffdfcfacffe1d2adffe6d9b0ffecdfb2ffebe0b2ffebe1b3ffeae0b2ffe2dab0ffe6dfb1ffebe2b2ffe8dfb1ffded7aeffe0d9aeffe3dbaeffe1d8adffe3daadffe6dbacffe6dbacffd0bfa6ffd2c2a6ffd5c4a8ffd9c6a9ffdbc9a9ffdfcdabffe0d0abffe1d2acffe3d3adffe4d6adffe6d8afffe7daafffe8dbafffe8dbafffeadfb1ffebdfb2ffeae0b1ffe5ddb1ffd8d1afffd4cdafffd5ceaeffdcd5b0ffd4ceafffc6c2acffbebcabffbebdabffc9c6abffd5cfacffd8d1acffd1ccabffd0caaaffdad1abffe2d5aaffe3d5abffe4d7acffe5d8acffe8dbadffe8dcaeffdfd6aeffdbd2aeffd8d1aeffd7d0aeffd6d0adffddd5afffe0d9afffdfd7afffdad4afffd3cdaeffd2ccafffd2ccafffc5c1adffbab9acffbab8acffbab9acffb4b5aaffb6b8aaffbcbdabffb9baabffb3b6a9ffb4b6a9ffb3b5a8ffb3b4a8ffb9b8a9ffc2bea8ffd9d1acffd9d2acffdad2acffdbd2acffd5ceacffcac6acffc0beacffc0beacffc3c1adffcac6adffc9c6acffcac6adffc6c4adffc0bfacffb8baacffb5b8acffb3b5abffb0b3aaffaeb1a9ffafb1aaffb2b3aaffb3b5aaffb2b6aaffb7b9aaffb0b3a9ffafb2a9ffafb2a8ffaeb1a8ffaeb1a7ffaeb1a7ffafb1a7ffb1b3a6ffb5b5a7ffb7b6a9ffb7b7a9ffb5b5a9ffb2b4a8ffb1b4a9ffb1b4aaffb1b4aaffb2b4abffb2b5abffb1b5abffb0b4abffb0b5abffb0b5abffb0b5abffb0b5abffb0b5abffafb3a9ffaeb1a9ffaeb1a9ffb1b3a9ffb0b3aaffafb3aaffafb3a9ffaeb2a8ffaeb2a8ffaeb1a8ffaeb1a7ffaeb1a7ffaeb1a7ffadb0a5ffadb0a4ffaaafa6ffaaafa6ffabb0a8ffacb0a8ffacb0a8ffadb1a8ffadb1a9ffaeb2a8ffaeb2a9ffafb2a9ffafb3aaffafb3aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb4aaffafb3aaffafb3aaffafb3a9ffaeb2a9ffaeb2a8ffaeb2a7ffaeb1a7ffadb0a7ffadb0a6ffadb0a6ffadb0a6ffadb0a5ffadb0a4ffacafa3ffaaafa5ffaaafa5ffaaafa6ffabb0a6ffacb0a7ffacb0a8ffadb0a8ffadb1a7ffadb1a8ffadb1a8ffaeb2a8ffaeb2a8ffaeb2a8ffadb0a8ffacafa7ffaeb1a8ffafb4aaffafb3aaffafb3aaffafb3aaffafb3a9ffaeb2a8ffadb2a8ffadb1a7ffacb0a6ffabb0a6ffabb0a5ffacb0a4ffacafa4ffacb0a3ffacafa3ffacafa3ffabaea4ffaaafa5ffaaafa5ffaaafa5ffabb0a6ffabb0a6ffacb0a7ffacb0a7ffabafa7ffaaafa6ffacafa7ffacaea7ffabada7ffaaaca7ffaaaca7ffacafa7ffadb2a7ffaeb2a8ffadb2a8ffadb3a8ffadb2a7ffadb2a7ffadb1a7ffadb1a6ffacb1a6ffacb0a4ffacb0a4ffacafa4ffabafa3ffabafa3ffabaea2ffabaea2ff6a4932ff6b4a32ff694833ff694831ff6a4831ff694730ff684630ff65442eff65432eff63412cff5c3a26ff51301cff4f2e1bff4c2b18ff4d2b17ff482817ff795942ff7c5c43ff826248ff816146ff816047ff7f5f46ff7f5f47ff7d5c42ff76553dff74523aff6b4a31ff6a472fff67452fff613f29ff5b3924ff553421ffa28164ffa98869ffa28467ffa38669ff9c8065ff997c63ff997d64ff8b6e58ff7e6049ff775840ff765740ff76563eff74553dff71513bff74543dff72513affa17958ffa57d5effa68164ffa78366ffa98569ffa8866bffa58368ffb08c6dffa68569ffa6856affa98a6bff9c7e64ff8f735eff90735bff8d7059ff7f614cffa07656ff9e7555ffb3855effba875dffae805cffa68063ffa17c5eff9e785bff9d785dff9c795dffa17d62ffb78f6affb28d6bffb08c68ffc59b73ffb39172ff956d50ff956a4cffa66c42ffb87847ffa8714aff946e54ff936b4fff936a4cff956b4cff926849ff986f50ff997155ff9e7658ffa57b5aff9c775bff9a775fff976c4fff9e6a46ff9b5125ffbb7b44ffd5a365ff946b4eff996c4aff905f3dff956542ff95694aff8a634cff8a654fff8c6956ff8e6b59ff916e5bff907163ff977c75ff9b7c70ffa95e30ffb37138ffe0ba7effa88e7cffab8f7bffa78a78ffa19391ffa19392ffa59693ff9d9192ff978a8cff958788ff948584ff918181ffa09a9effa29a9effa39697ffaa8165ffc6a179ffa59ea1ffa69fa1ffa7a0a1ffaaa2a2ffaea6a3ffb3a9a4ffb4a9a3ffada4a0ffa9a09fffa29a9bff9f979affa19a9eff9e9493ffac855fffbd915fffbaa18cffa8a1a1ffaaa2a2ffaea5a2ffb1a8a2ffb8aca4ffc2b4a6ffc5b7a7ffc1b4a5ffbcb1a3ffb2a9a0ffa59b9affa29c9dffa39998ffc49c69ffa57345ffbbac9bffb2a8a2ffb8ada4ffbbb0a5ffc1b4a6ffc8b9a7ffd3c2a9ffd5c3a9ffd3c2a8ffd2c1a8ffcbbda6ffc3b6a3ffada49effb2a79fffb2967affae7d50ffc3b6a4ffcabba7ffcebea8ffcdbda8ffd6c5aaffe0cfadffe5d6aeffe8daafffe7d9aeffe0d3acffe0d1abffddcda9ffc7b9a3ffcdbda6ffd5c2a4ffd9c7a5ffdcccabffe1d2adffe3d4adffe5d7aeffe8ddb1ffe0d7b0ffdfd7b0ffdad4afffd0cbadffd8d2acffdbd3acffddd4abffddd3abffdfd4acffdbd2acffcec9adffcec9adffd1ccadffd1ccadffc6c4adffc1c0acffb6b7aaffb6b6abffb4b6aaffb4b6aaffb0b3a8ffb0b2a7ffb6b6a7ffb0b2a7ffb0b3a8ffaeb2a8ffafb2a9ffb0b3aaffafb3aaffafb4aaffafb4aaffafb4aaffaeb2a9ffafb2a9ffaeb2a8ffadb1a7ffadb0a6ffadb0a6ffacafa3ffaaaea4ffaaafa5ffabb0a6ffacb0a7ffabb0a7ffadb0a7ffabaea7ffacaea7ffaeb2a8ffaeb2a9ffadb2a7ffadb1a6ffabb0a5ffabafa4ffabafa3ffabaea2ff72513aff75543cff74533bff725139ff6c4a34ff603e28ff583722ff512f1cffa47f60ffa48366ffa18167ff9e7e64ff907056ff8c6d53ff80634cff7c5d46ff9a7051ffb27c50ffa47757ff997254ff977053ffa27b5cffa98261ffab8667ff99735effac6634ffbc956bff9e785eff9b7d6bff957b6fff917970ff917970ffa0989bffad8b6effb3a091ffa9a1a1ffb0a7a2ffbbafa4ffb4aaa1ffa59d9bffa89f9cffb2885effbeb1a1ffc3b5a6ffcfc0a8ffddcdabffdacbaaffd2c4a7ffd4c7a7ffd5c8a8ffd6ccacffd7ceadffcfcaadffc8c5acffc3c1aaffc7c3a9ffadb0a5ffacb1a7ffadb1a8ffadb1a8ffaeb2a8ffadb1a7ffacafa5ffabaea3ff8b694fff89684fff7a5941ff694934ffa4714cffa57d5cff9a7862ff9d7e6affa99280ffb7a99effc5b8a6ffc1b5a3ffc0bba6ffc1bfaaffbcbca9ffb8b8a6ff976f51ff866650ffb8ad9bffbeb8a5ffa48e78ff
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AzureLlamaDrama4K.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AzureLlamaDrama4K.asset.meta
new file mode 100755
index 0000000..5295f20
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Https-HLS-AzureLlamaDrama4K.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 52f85a47e710c5245b016f28687c156b
+timeCreated: 1592334546
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-BigBuck720p30.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-BigBuck720p30.asset
new file mode 100755
index 0000000..074d52f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-BigBuck720p30.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Local-MP4-BigBuck720p30
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/BigBuckBunny-360p30-H264.mp4
+ _hints:
+ transparency: 0
+ alphaPacking: 1
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: 86882aff898831ff85832fff83812cff8f9030ff878a25ff959430ffd4c988fff5e0befff1d4c3ffdebeaeffcfaf9dffc3a896ffbaa294ffb8a395ffb7a499ffb4a298ffaf9c92ffac998dffa89589ffa6968cffa19388ffa09287ff9b8f86ff948a80ff91887dff8e847aff877f74ff7e766dff787067ff69645eff58514eff453e3cff413a39ff574d4eff7d6d68ffa38e7dffb29c8affcdb8a6ffcfb9a7ffcab4a1ffc9b3a5ffc6afa2ffc1aca0ffbea99dffb9a69bffb6a397ffb3a394ffb3a394ffb1a192ffac9d8dffab9b8cffa79a8affa59787ffa59787ffa59787ffa59787ffa49686ffa19484ffa09383ff9e9082ff9d8f81ff9c8e80ff9a8d7fff998b7eff998b7eff998b7eff998b7eff9a8d7fff97897cff9a8c7fff998c7eff968b7dff958a7cff958a7cff938779ff928679ff8e8377ff8b8076ff867f74ff837b71ff837b71ff827a71ff817970ff817970ff7f786fff827a71ff827a71ff837b73ff857d75ff888077ff8a8279ff8c847cff8c847cff8b837bff8b837bff8b867aff8b867aff8d887cff918a7eff938c81ff968e83ff968e83ff958e83ff959084ff969185ff969185ff948f81ff94907fff948f81ff969185ff959084ff94907fff938e7eff908979ff8c8577ff8a8375ff888075ff888075ff888075ff867f74ff857e73ff827a6fff817970ff827a71ff837b72ff837b73ff867f76ff8a8b2dff86852cff82802aff82802aff8a8b29ff8d902bff979733ffbfb573fff9e3c0fff2d4c1ffe3c3b2ffd4b5a3ffc4a997ffbca393ffbba698ffb6a398ffb1a096ffb09d93ffad9a8effaa978cffa7978dffa4958affa2948aff9c9087ff978c82ff92897eff8f857bff898076ff80786eff787068ff69645eff58514eff453e3cff413a39ff413738ff6a5a55ff9b8576ffb19b8bffcdb7a7ffcfb9a7ffcab4a3ffc9b2a5ffc6afa2ffc1aca0ffbea99dffb8a69affb5a296ffb2a293ffb1a192ffae9e8fffac9c8dffa99b8bffa69989ffa49686ffa49686ffa49686ffa39686ffa29585ffa09383ffa09383ff9d8f81ff9c8e80ff9a8d7fff998b7eff988a7dff988a7dff988a7dff988a7dff988a7dff97897cff998b7eff97897cff958a7cff958a7cff94897bff938779ff928679ff8e8277ff8a7f76ff867f76ff837b72ff837b72ff827a71ff817970ff80786fff7e776eff817970ff827a71ff827a71ff847c74ff857e75ff898178ff8b837bff8c847cff8b837bff8b837bff8a8479ff8b867aff8c877bff90897dff928b80ff948d82ff968e83ff958e83ff948f83ff959084ff969186ff969184ff938f7eff938e80ff969185ff969185ff94907fff928d7dff918b7bff8e877aff8c8578ff8a8377ff8a8277ff8b8378ff8a8277ff888075ff857e73ff847c73ff847c74ff847c74ff847c74ff867f76ff959737ff88882cff828027ff8b8930ff939532ff888b26ff868627ff9d954dfff7e3b8fff8dcc6ffeecec0ffdbbcaeffc8ab9affc0a494ffbca596ffb9a498ffb6a296ffb49f94ffb19d91ffac9a8effa8978cffa39489ffa09287ff9c9086ff998f84ff968c81ff91887dff8a8377ff837b71ff797168ff6a645eff57514eff443d3bff3f3837ff382e2fff4a3934ff826b5fffb19a8effcdb7aaffcfb9aaffcab4a4ffc7b0a3ffc4ada0ffc0aa9effbca79cffb7a498ffb4a195ffb1a192ffaf9f90ffad9e8effaa9c8cffa99c8cffa79a8affa69a8affa59787ffa39686ffa19484ffa09383ff9f9282ff9f9182ff9d8f82ff9b8e80ff998c7eff988a7dff97897dff97897cff988a7dff998b7eff998b7eff958779ff96887bff94877aff938779ff908476ff8e8375ff8e8375ff8c8174ff887d73ff857b72ff827a71ff827a71ff807970ff7f786fff7f776fff7f786fff7e766eff7f786fff807970ff817970ff837b72ff847c74ff888077ff8a827aff8a827aff8a8279ff8a8279ff888377ff8a8579ff8b867aff8f877eff918980ff908b80ff938e82ff948f83ff948f83ff959084ff969185ff969184ff948f81ff959083ff969186ff969285ff959180ff938f7dff918d7bff918a7cff90897bff8f887cff8e877cff8e867cff8c8579ff898276ff898076ff867f76ff847c74ff837b72ff857e75ff867f76ff989a37ff8b8e2bff838621ff9d9d37ff9c9b38ff979a37ff888829ff9b964affe2d2a1fff9dfc9fff1d2c7ffddbcb3ffcbad9effbfa493ffbea493ffbda596ffbca699ffb4a194ffb39e91ffaf9b8dffa7968affa29387ff9f9186ff9d9186ff9b9184ff989183ff928b7eff8c8578ff877f75ff7a736aff6c6660ff59524fff413b39ff3a3232ff372b2aff4b3934ff897268ffb8a196ffcdb6abffcdb5a9ffc8b1a4ffc6afa2ffc2ab9fffbea89dffbaa59affb5a296ffb19f93ffb19f91ffac9e8effaa9d8dffa99c8cffa79a89ffa79a8affa69989ffa39585ffa09383ff9f9282ff9e9080ff9f9181ff9f9182ff9d8f81ff9a8d7fff998b7eff988a7dff988a7dff97897cff97897cff998b7eff988a7dff938579ff93877aff8e8377ff8b8075ff897e72ff897e73ff8a7e72ff897d72ff837970ff817770ff807871ff7f776fff7e766eff7e766fff7e7670ff7d756fff7d756fff7d7670ff7e7771ff807971ff817a72ff857e75ff887f78ff8a827aff88827bff868177ff868175ff878276ff878276ff898378ff8b837bff8e877eff8e897dff8f8a7fff918c80ff938e82ff948f83ff959084ff969185ff959084ff959084ff969185ff969185ff959083ff938f7eff928d7dff928b7dff918a7eff918a7eff90897dff90897dff8e8779ff8c8578ff8a8377ff898278ff847d73ff837b70ff857e73ff867f74ff939734ff8b8f2aff858921ffa3a53bff9e9e3bff8e9231ff8b8c2eff938f40ffc3b580fffce3cafff2d3c8ffe0bfb8ffccac9effc1a493ffc0a593ffc0a697ffbea79affb9a497ffb5a093ffb19d90ffac9a8effa5958affa2948aff9f9387ff9b9285ff989183ff938c7fff8d8679ff8a8278ff7e776eff6f6963ff5d5754ff433d3bff393031ff3a2e2dff53403bff988177ffbca49affc8b1a7ffcbb3a8ffc7b0a3ffc3ac9fffbfa89bffbaa599ffb5a296ffb19f93ffb09e91ffae9d8effaa9a8bffa79a8affa69989ffa49686ffa29585ffa19484ffa09383ff9e9082ff9d8f81ff9c8e80ff9d8f80ff9f9181ff9b8d7fff998b7eff988a7dff97897cff97897cff96887bff96897dff95887cff908378ff8e8175ff8e8278ff867c74ff827a70ff80796eff7f776cff80776dff80766cff7c746bff7d756eff7e766fff7d7770ff7b746dff7a746dff7c756fff7b746dff7a756dff7a746dff7c766fff7d7770ff7c766fff827d76ff867e78ff89817aff87817aff857f76ff858074ff858074ff858073ff868174ff888277ff8a8479ff8c877bff8d887cff8f8a7eff928d81ff948f83ff959084ff969185ff979286ff959084ff959084ff959084ff959083ff938f7eff928d7dff928b7dff918a7eff918a7eff918a7eff928b7eff918a7eff90897bff8d867aff8b8479ff867f74ff847d72ff857e73ff867f74ff86892bff838625ff7e811aff9b9d35ff8b8b2bff838628ff85862aff8b8936ffafa365fffae3c2fff9daccffe8c7bfffcfb0a2ffc3a694ffbea390ffbda493ffbfa798ffbaa496ffb8a395ffb4a193ffb09d91ffae9d90ffa8978dffa1958aff9c9387ff999284ff948d80ff8d8679ff8b8379ff7f776fff6c6660ff615b58ff4d4645ff473e3fff483c3bff8b7772ffae978dffc1aaa0ffc7b0a5ffc9b2a7ffc7b0a3ffc1ac9effbba699ffb6a397ffb1a194ffae9e91ffac9c8fffab9b8cffa89889ffa59787ffa49686ffa29585ffa09383ffa09284ff9f9184ff9d8f81ff9d8f81ff9a8d7fff9a8d7fff9b8d7fff988a7dff95887dff94867cff94867cff93857cff92847bff91857aff8e8277ff8b7f75ff857a71ff847a71ff7e7670ff7c766eff7c766dff7c746bff7d756dff7c746cff797169ff7a726bff79726bff79736cff78726bff78726bff78726bff78726bff78726bff78726bff7a746dff7a756dff7b756eff807a73ff837b74ff857d77ff847e77ff827d74ff847e75ff827d72ff837e73ff858074ff868175ff858074ff878276ff8a8479ff8d887cff8f8a7fff938e82ff938e82ff969185ff979287ff958f84ff938e82ff948f83ff948f82ff938f7fff928e7dff928b7dff938c81ff938c80ff928b80ff938c81ff938c81ff918a7dff8f877cff8b8479ff898177ff867f74ff867f76ff867f76ff84842dff818229ff747618ff8d8f2eff84852aff7e7f28ff7f8027ff7f7d27ff978e46ffe8d5a8fff7dbc8ffebcac0ffd4b4a5ffc6a996ffbda18fffbda391ffbea695ffbca596ffbba597ffb6a295ffb49f92ffb39e91ffac9a8effa6988dffa09589ff9d9487ff978f82ff8f8679ff8c8379ff7f776fff706963ff68615fff605959ff5a5252ff5c504fff8a7771ffb39c92ffc0a99effc7b0a5ffc7b0a5ffc0a99cffbda79affb7a597ffb2a295ffae9f92ffaa9d8fffaa9a8cffa89889ffa59686ffa39585ffa19484ff9f9282ff9e9081ff9e9082ff9c8e80ff9a8d7fff998b7eff97897cff94877bff94877cff928579ff90837aff91847bff8f837aff8f837aff8e8278ff8a7e74ff877b72ff847770ff7e756dff7e756fff7d7770ff7d776fff7d776eff7e766eff7d756dff7c746bff787168ff787069ff776f69ff767069ff756f68ff756f68ff756f68ff756f68ff756f68ff756f68ff77716aff78726bff79736cff7f7972ff817b74ff837d76ff807c76ff7f7b73ff7f7972ff7d786fff7f7971ff807b71ff847f74ff858074ff878276ff8a8479ff8d887cff908b7fff938e82ff948f83ff969185ff969185ff948f83ff948f83ff948f83ff948f82ff938e80ff928d80ff938c80ff938c82ff928b80ff928b80ff938c81ff938c82ff928a81ff8d867cff8c847cff8b837bff888077ff867f76ff867f76ff7c7b29ff7e7e29ff6f6f18ff7e7f24ff7f7f29ff7c7b2aff7e7e27ff78771fff958f3cffc1b07afff5dbc0ffe8cabdffd7b7aaffc6a996ffbfa291ffbea391ffbfa594ffbda697ffbba697ffb9a496ffb4a092ffb39e91ffaf9c91ffa8998effa3958cff9f9389ff9c8f86ff978b81ff90857cff857b73ff7b726eff746b6aff6e6565ff6b6262ff776969ff96837dffb69f95ffbfa99effc4afa4ffc3aca1ffbda79affb9a698ffb4a293ffb1a092ffab9e90ffa79b8dffa69689ffa59588ffa29285ff9f9284ff9e9082ff9c8e80ff9b8d80ff9b8c81ff9b8c81ff998b80ff97897eff96877dff908478ff8e8276ff8c8074ff8b7f75ff8c8076ff8c8076ff8b7f75ff897e74ff877b72ff847870ff80746eff7d736dff7d7670ff7e7871ff7e7970ff7d776eff7d756dff7d756dff7b736aff787068ff776f68ff776f69ff767069ff726c65ff746e67ff736e66ff726c65ff726d65ff726c65ff726d65ff736e66ff767069ff7d7770ff807b73ff827d75ff7b7771ff79756fff7a746fff7b7470ff7a746fff7e7870ff817c73ff847f73ff858074ff888377ff8b867aff8e897dff928d81ff928d81ff959084ff959084ff948f84ff948f85ff938e82ff938e80ff938f7eff928d7fff938c81ff938b83ff938c81ff928b80ff938c81ff938c83ff948c84ff938b83ff928a81ff8e877eff8a8279ff898178ff878077ff727222ff787827ff6c6c1bff777824ff787928ff767527ff7a7729ff797523ff8d8733ff9c8e4ffff1d8b7ffe6c8b6ffdbbaaaffc9ab98ffc0a391ffbfa492ffbfa594ffbda697ffbca698ffb9a497ffb6a294ffb3a094ffb09e92ffaa9b90ffa89a8fffa3978cff9e9389ff988e83ff92887dff898077ff837b75ff7c7371ff776e6dff776c6cff867877ffa3928cffb5a398ffbdab9effc0ada2ffbfab9fffbaa89affb7a596ffb2a293ffad9f90ffa89d8effa6998cffa59588ffa39386ff9f9183ff9e9082ff9c8e81ff9a8c80ff998b80ff988980ff978880ff97887fff94867dff92837bff8e8176ff8c8076ff8b7f75ff8b7e75ff8c8076ff8b7e75ff8b7e75ff867c72ff847a71ff81756eff7f746eff7e736dff7e756fff7e7871ff7e7871ff7d776eff7b736aff7b736aff7b736aff787168ff7a726aff78736aff78736aff78726bff7a746bff78736bff77716aff766f68ff746e67ff716b65ff716b65ff726d65ff767069ff79746cff7b756eff75706bff75706bff75716cff7a7470ff7a7470ff7c7670ff7d7770ff7f7a71ff807b72ff837e75ff878179ff8b857bff8f8a7fff908b80ff928d81ff938e82ff938f83ff938e81ff938e80ff928d7dff918c7cff918b7cff928b7fff928b81ff938c81ff938c82ff948d82ff938b83ff938b83ff948d84ff938b83ff918981ff8e867eff8c847cff8a8279ff656619ff727427ff66691cff747729ff6e7122ff717426ff6b661eff7b742bff80792eff7b6d2dffe5cba1ffeac9afffdfbeaaffcdaf9cffc2a593ffc0a392ffc0a594ffc1a899ffc0a89bffbba699ffbaa598ffb7a396ffb2a094ffae9d91ffad9d91ffaa9d91ffa2988dff9a9084ff8f877aff888075ff867e78ff847b77ff817775ff857a77ff91837fffaa9b93ffb6a79bffb9aa9dffbaaa9dffb9a99affb8a798ffb2a493ffaea18fffab9d8dffa69a8cffa2978affa09287ff9f9184ff9f9183ff9d8f81ff9a8d7fff988a7eff97897eff95867dff93857cff92847bff908179ff8f8077ff8b7e75ff887c73ff877b72ff857b71ff867c72ff867c72ff857b70ff857a72ff827870ff7f756eff7f746eff7c726cff817872ff817b74ff807b71ff80796fff7d756aff787168ff7a7269ff7c746bff7c746bff7d776eff7e786fff7f7970ff7f7b71ff7f7971ff7a746fff78706bff776f6aff726c66ff716b64ff726c65ff706a63ff726c65ff736e67ff736d68ff716b66ff726e68ff75726cff77746eff79736eff79736eff7b7570ff7d7770ff7f7972ff857f78ff868079ff89837aff8e897fff918c81ff938e82ff938e82ff948f81ff938f7eff928d7dff928b7cff918a7cff918a7eff938c81ff948d83ff938b83ff938b83ff948d84ff948d84ff948d84ff948d84ff918980ff90887fff90887fff8c847cff6b6c1dff717226ff64671aff67691dff616317ff6e7024ff67641bff797229ff6f661fff716421ff9e8951ffefd1adffe8c8b2ffcdaf9cffc3a594ffc2a493ffc3a596ffc5a99bffc5ab9effc1a99cffbea89cffbaa59affb5a296ffb09f94ffaf9e94ffad9d93ffa5988eff9d9287ff93897dff8e847aff8c817bff8c817bff8d827eff958782ff9e918affad9e96ffb4a69bffb6a799ffb8a899ffb8a698ffb6a495ffb1a192ffac9e8effa89b8bffa4988affa09487ff9d9084ff9d8f83ff9c8e80ff998c7eff97897cff97897cff95867bff92847bff91827aff91827aff908179ff8c7f76ff877b72ff857b70ff82796eff837a6fff82786eff82786eff82786eff827870ff847a71ff81766fff817771ff837973ff857b74ff857e75ff888077ff857e73ff82786eff7c746bff7e766dff82796eff827a6fff837c70ff857e73ff857f76ff837e75ff817c72ff7d7770ff7c746fff79716cff756f68ff767069ff736d68ff706a65ff706a65ff716b66ff706a64ff6f6864ff6f6964ff6f6c66ff726e68ff736d68ff756e69ff78706cff79736cff7e7871ff817c74ff847e77ff87817aff8c867dff8f8a81ff938d83ff948f82ff938e7eff928d7fff928d7fff908b7dff928b7fff918a7fff938c81ff948d83ff948d84ff948d84ff968e85ff978f86ff948d84ff938b83ff928a82ff918980ff918980ff8d867dff6d6c1cff737223ff666717ff696a1cff626316ff6b6c20ff6d681dff71691eff71681cff756820ff776624fff1d5a8ffe6c8aeffd1b3a1ffc6a695ffc2a191ffc3a596ffc7aa9cffc8ad9fffc5ac9fffc1aa9effbea89dffb7a498ffb4a197ffb19e95ffac9d93ffa89a91ffa0938aff9a8e84ff958980ff91847dff91847fff928681ff9b8e87ffa6988fffaf9f96ffb3a497ffb5a697ffb8a698ffb6a495ffb4a193ffaf9f92ffa99c8effa6988bffa29689ff9f9387ff9c8e84ff9a8c81ff9a8c80ff998b7fff97897dff95867bff918379ff91827aff908179ff8f8078ff8f8077ff8b7e75ff867a70ff82786eff81776dff81776dff80766cff82786eff827870ff827a71ff867d76ff877e77ff877e78ff8a817bff8a817aff8c837aff8d847aff8d847aff887e74ff82786eff827970ff877d73ff887e74ff898176ff8a8277ff878276ff878077ff847e74ff807970ff807771ff7e7670ff7c746dff79736cff756f6aff716b66ff6f6964ff716b66ff716b66ff6f6964ff6c6661ff6a6660ff6c6661ff6d6661ff716965ff756d68ff78716aff7a756dff7d7770ff807b73ff847f78ff88837bff8d877fff8f8a80ff928d82ff928d7fff928d7fff928d7fff928b7fff928b80ff918980ff938c82ff968e85ff978f86ff968e85ff958e85ff938b83ff948d84ff948d84ff918980ff90887fff90887fff8d867dff6a6815ff777624ff686715ff747323ff706e1fff716f21ff7c7629ff706617ff7c7123ff7f7124ff76641cffceb482ffeaccb1ffd6b8a6ffc9aa97ffc19f90ffc2a495ffc7aa9bffc8ad9dffc7ada1ffc5aea1ffc0ab9dffbaa79bffb6a499ffb3a298ffae9e94ffab9c93ffa5988fffa0948bff9d9087ff968981ff958881ff968981ffa3948cffaa9c92ffb1a096ffb2a296ffb3a396ffb4a296ffb2a094ffb19f93ffae9d90ffa8998cffa4968affa09488ff9d9085ff9a8c83ff988a80ff988a80ff978880ff94867dff92837aff8f8077ff8f8078ff8d7e75ff8d7f76ff8c7e75ff8a7c73ff85796fff81776dff80766cff7f756bff80766cff82786eff837970ff867e75ff8e857fff8e8680ff8f877fff91877fff90867eff91877dff92897eff92897eff8f857bff887f74ff877d73ff887e74ff8b8176ff8b8378ff8c857aff888276ff877f76ff887f77ff857c74ff847971ff807670ff7e756fff7f7770ff79746cff746e69ff6e6763ff6f6964ff76706bff76706bff726c67ff67635eff67625dff69635dff6d6560ff746b67ff766e6aff77716cff79736eff7d7770ff807a73ff857f78ff8b857dff8d887fff918b82ff928d81ff928d7fff908c7eff928b80ff928b7fff918980ff928a81ff948d83ff968e85ff958e85ff928a82ff928a81ff928a82ff928a82ff918980ff8f877eff8e877eff8c847cff797623ff7d7a28ff74711eff827f2bff807d26ff77731bff877f2cff796e1dff857927ff897b25ff867323ffb3995dffebcfadffdebfabffcfac9bffc4a393ffc2a494ffc6a998ffc7ac9bffc8afa0ffc6afa0ffc0ab9dffbfaa9dffb8a79bffb8a79bffb4a498ffaea095ffac9e94ffa89a90ffa1928aff9c8e85ff9c8d85ff9d8e85ffa6978effab9c93ffae9d93ffaf9f93ffaf9e91ffb09e92ffaf9d91ffaf9d90ffac9a8effa7968affa39488ff9f9086ff9d8d82ff988980ff95867eff96877fff94867dff91827aff8d7f75ff8c7e75ff8a7c73ff877970ff8a7c73ff897a71ff86796fff84786eff81776dff81776dff80766dff81776dff837a6fff847a71ff8e847cff968a84ff968c85ff958982ff948881ff948881ff93897fff958b81ff968c82ff93897fff8e847aff8c8378ff8e847aff8f857bff8e867bff8f877cff8b8479ff8a8178ff898178ff877d75ff847c74ff827870ff80776eff817970ff7e7770ff7b736dff746d69ff706a65ff77716cff78716cff746e68ff6b6760ff6a665eff69635cff6a645fff6e6762ff716a65ff726c67ff77706cff78726cff7b756eff807b73ff857f78ff8a847cff8f8a81ff8f8a80ff8f8b7dff8f8b7eff918a80ff918a80ff8f877eff90887fff918a81ff928a81ff928a82ff928a81ff918a81ff938b83ff928a82ff90897fff8f887fff8f877eff8c847cff8a8230ff847b28ff847e26ff928b31ff968f2eff958c2aff8f8429ff887923ff8c7d24ff99892bff99872affad9642ffe9ce9fffe2c2acffd4b0a1ffc8a795ffc2a494ffc5a897ffc9ad9dffcab1a2ffc7b0a1ffc4af9fffc1ac9fffbeaa9dffbbaa9cffb6a79affb2a498ffb0a297ffad9f93ffa89a8fffa4958bffa3948affa29189ffa3948bffa89a90ffaa9b90ffac9c91ffac9c90ffad9b8fffae9b90ffad9a8effa9978bffa79489ffa39087ff9f8f83ff9c8b81ff97877dff94847aff91827aff8f8279ff8d8076ff8a7d74ff8a7d74ff897d74ff867a70ff85796fff85796fff84776eff84786eff82786eff82786eff81786eff81776dff847a71ff877c75ff948881ff9a8d86ff998d86ff978b84ff968a83ff968a83ff978b83ff998d83ff9b8f85ff988d83ff91877dff90877cff948a80ff93897fff918a7eff8f877cff8b8479ff8a8279ff898178ff877e76ff857c74ff827870ff80776eff81776fff81776fff7e746eff7a736dff79716bff78726cff726d65ff6b6760ff6d6862ff6d6762ff6c6661ff69655fff6b6560ff6c6560ff6f6763ff756d69ff776f6bff7a746eff7d7770ff817c75ff868079ff8a857dff8c867eff8c867cff8d877eff8d8780ff8d8780ff8d867dff8f877eff918980ff918980ff948c84ff918980ff918980ff918980ff8f877eff8f877eff8f877eff8e867dff8d867dff9a8e33ff8d8227ff988d2dffa79c38ffb0a338ffa99a2fffa69732ff978525ff988624ffad9b31ffad9a2dffb9a438ffe6cb89ffeac9acffd9b7a4ffceac9cffc3a594ffc5a896ffcaae9cffccb0a0ffcab1a1ffc8b0a1ffc5aea1ffc2ac9effc0ab9dffbca79cffb8a79bffb5a79affb2a498ffaea093ffab9e91ffa8998cffa5958affa6968cffa8978dffa7998cffaa9a8dffab9b8effab998dffac998dffaa988cffa79488ffa39185ff9f8d83ff9c8c80ff99897fff95857bff918279ff8d8177ff8b7f75ff897d74ff887c73ff887c73ff877b72ff847a70ff82776dff83766dff82766dff80766cff81776dff847b70ff837970ff857b73ff8b7f78ff91857eff978c84ff998d86ff998d86ff978b84ff968a83ff988b84ff998c84ff9a8e84ff9b8f85ff9d9188ff978c82ff968c82ff968c82ff958b81ff948a80ff8f877cff8d867bff8d847bff8b8279ff888077ff867c74ff857a72ff81776fff81776fff80766eff7f746dff7c746bff7c746bff7b746dff757069ff6f6c64ff716b66ff6f6964ff6d6763ff69655fff68635cff68625bff6a645fff6f6762ff746c68ff78716aff7c766fff7e7871ff807a73ff857f78ff87817aff87817aff88837bff8a847dff8b857eff8b837bff8d867dff90887fff918980ff918980ff90887fff8f877eff8f877eff8d867dff8e867eff8f877fff8d867dff8d867dffaa9937ffa39330ffab9a36ffb6a53cffcab747ffbea838ffb6a236ffac972effac962effbfa83affc9b13dffc6ac39ffd3b664fff0cda3ffe4c1a8ffd7b6a2ffc9aa97ffc8aa97ffc9ab9affcbaf9effccb2a2ffcab1a1ffc8b0a2ffc6aea1ffc4ad9effbfaa9effbca99dffb9a99effb6a89dffb2a398ffafa196ffac9d92ffad9d92ffaa998fffa99a8fffa7998cffaa9a8dffaa9a8dffaa988cffa9978bffa79488ffa39185ff9f8d82ff9b8a80ff99897fff95867dff918279ff8e8077ff8c8076ff8a7d74ff897c73ff867a70ff85796fff85796fff81776dff7f756bff7f756bff80756bff81776dff847b70ff877f74ff877d74ff8c8179ff948880ff968c84ff988e86ff988e86ff988e86ff978b84ff968a83ff988b84ff988b83ff988c82ff9b8f85ff9d9188ff9a9085ff988d84ff998c85ff998a84ff978b84ff92877eff90867cff8e847cff8e847cff8a8279ff897f76ff867c72ff82786fff81776fff80766eff7f746dff7c746bff7c746bff7d756eff7a736cff746f68ff77716cff766f6bff706a65ff6c6961ff6a665dff67635aff6a645dff6b655fff716965ff776f6aff77716bff77716bff7c766fff827d75ff847e77ff857f78ff868079ff87817aff88827bff8a827aff8b847aff8c847cff8f877eff8f877eff8f877eff8d867dff8d867dff8d857fff8d857fff8d857fff8c847eff8c847dffc3ad40ffb59f38ffb59e38ffbda638ffd2bb4affcbb240ffbca233ffbca133ffbca134ffcdb13fffdec049ffd7b843ffd0b244fff4d191ffefcbacffdebea7ffcfb09affcaab98ffc9aa97ffccaf9dffcdb2a0ffcbb1a0ffcab1a2ffc9b0a1ffc8b0a1ffc4ada0ffc0ab9fffbeaaa1ffbaa89effb4a69bffb1a498ffafa196ffac9e91ffad9d92ffab9c91ffa89a8dffaa9a8fffaa998fffa9978dffa7958bffa39288ff9f8f84ff9c8b81ff988880ff96877dff93857cff908179ff8c7e75ff887c73ff877b72ff867a71ff85786fff84786eff84786eff80766cff7f756bff7f756bff82786eff82786eff877f74ff8b8378ff8f857cff948a82ff988e86ff9a9088ff9b9088ff988e86ff988e86ff978b84ff968a83ff988b84ff978b83ff988d84ff9a8f86ff9b9187ff9c9087ff998d84ff988b84ff9a8c85ff988983ff93867eff92867dff90867eff8f857dff8b837bff8a8077ff887d75ff847970ff81776dff80766cff7f756bff7c746bff7c746bff7f766dff7f766eff7b746dff79736eff78726cff746e67ff716d65ff6f6c62ff6c6960ff6b675fff68655dff6b6661ff716b66ff746d69ff76706bff7c766fff7f7972ff817c74ff817c75ff847e77ff847e77ff857f78ff868077ff868077ff868077ff89837aff8e877eff8d867dff8c847cff8c847dff8b837dff8c837eff8b837dff8b837dff8b837dffd4b945ffc5aa3affc2a73affc0a532ffcdb13affcaac35ffccae36ffccac36ffd1b03dffd6b63fffe5c449ffe0bd41ffdab83ffff0cf77fff2d0a7ffe3c4abffd1b29dffcaa996ffc9a996ffccae9dffcdb09fffcdb2a0ffcdb2a2ffcbb2a2ffcab1a3ffc7b0a2ffc2ad9fffc1aca0ffbea99fffb8a59cffb3a499ffb1a397ffafa294ffafa093ffa99b8fffa7998effa8998effa9988effa6968cffa39288ffa19086ff9d8d82ff99897fff96877eff93857bff908179ff8e7f76ff8b7d74ff8a7d74ff867a70ff867970ff85786fff86796fff84776eff7f746aff7e7469ff7f756bff83786eff847b70ff8e867bff938a80ff968d84ff9b9189ff9e928bffa0948bff9f9289ff9b9088ff9b8f88ff998d85ff988c84ff978b84ff988b84ff998c85ff9b8f86ff9c9087ff9b8f86ff998c84ff988a84ff998a83ff978882ff93877eff92857cff91867eff8f857dff8c8179ff897f77ff887c75ff867a72ff82786eff80766cff7f756bff7c746bff7c746aff80776bff80776bff80766dff7e776fff7d766fff78716aff767069ff726e67ff726e66ff6d6a61ff66625bff67635eff6c6862ff716c66ff76706bff7a756eff7e7871ff7f7972ff7f7972ff807b73ff817c74ff827d75ff827d74ff837d74ff817c73ff857f76ff8c847cff8c847cff8b837dff8b837dff8a827bff8a827bff8a827bff8a827bff8a827bffd9bb40ffcbaf36ffcaae36ffc9ad33ffd1b539ffcfb233ffd3b635ffd0b331ffdbbc3bffe3c442fff2d34effeccd48ffd8bb36ffedce60fff0cf94ffe7c6adffd4b3a0ffcdab9affc9a995ffccaf9bffcdb09fffceb3a1ffceb3a3ffccb2a3ffcab1a3ffc8b0a1ffc4ad9fffc1aa9effbfaa9cffb9a69affb6a59affb2a497ffada192ffad9f91ffaa9b8effa5978cffa5978cffa6978dffa49389ffa19086ff9e8e83ff9b8a80ff97877dff92837bff908179ff8d7e75ff8a7c73ff8b7d74ff887c73ff84786eff84776eff84776eff85776eff84766dff7f736aff7f7369ff7f736aff85796fff897e74ff958980ff9d9188ff9f938affa1958cffa3968dffa5968dffa2968cff9d938bff9d938bff9c9089ff998e86ff978b84ff968a82ff968a81ff968c82ff978d83ff988d83ff988b84ff988b83ff978982ff968882ff958780ff948780ff92857eff8d827bff8a7f77ff887d76ff867c74ff857a72ff82786eff80766cff7f756bff7c746cff7c746bff80766cff81786bff81776cff7f786fff7e776fff7d736dff78716aff747069ff726e66ff6d6a62ff67635cff66625dff6b6660ff706a65ff726b67ff786f6bff7b746eff7a756dff7d7770ff7e7871ff7e7871ff807a73ff807a73ff7f7a72ff7f7972ff827d75ff8a827aff8b837bff8a827bff8a827bff89817aff89817aff89817aff89817aff89817affdcbe41ffd0b335ffd4b739ffd7ba3cffdabe3fffdac03bffddc541ffd4ba30ffdfc53bffe1c53affead13dffebd248ffdac239ffe8ce4effeccd79ffe8c6a6ffd7b8a2ffd0af9cffccac98ffcbae9bffcdb29fffceb3a1ffcfb4a4ffccb3a5ffcbb2a4ffc8b0a2ffc5aea1ffc2aa9effbfaa9cffbaa699ffb7a499ffb2a397ffaea293ffad9f90ffa99a8dffa5978bffa3958affa29489ffa19187ffa09086ff9d8e83ff988980ff95867dff908179ff8e7f76ff8b7d74ff897a72ff897c73ff867c72ff81776dff83786eff83786eff83776eff81756cff7f7369ff7f736aff84776eff887c73ff8d8177ff998c83ffa5968dffa6988dffa6988dffa6988effa7998effa5968effa0948dff9f948cff9d918aff998e86ff968a82ff94887fff92897eff948a80ff958b81ff978b83ff978a83ff978882ff978882ff968680ff95857fff92837dff91847dff8b8279ff8a7f77ff887e75ff837971ff827870ff81776dff81776dff80766cff7d756dff7c746bff7e776bff7e776aff7e776aff7e776cff7e776cff7d756cff7d756cff777169ff716d65ff68645cff66625cff67625fff6b6561ff6d6662ff6f6665ff756a68ff79716dff78726dff7c7571ff7c7571ff7c7671ff7e7873ff7d7670ff7e7871ff7d7770ff827b74ff867e78ff89817aff8a827bff8a827bff89817aff887f79ff888079ff887f79ff887f79ffddc13cffdbbe3affe1c641ffe0c641ffdbc03bffe6cd3fffeed846ffdbc535ffe0ca3bffe2cb3dffe5cc3dffdbc331ffe3cd42ffe7cf47ffe1c555ffeece90ffdcbe9fffd2b39fffcdad9affcaad98ffcbae9bffd1b5a3ffd2b6a5ffceb4a6ffccb3a5ffcab1a3ffc8aea2ffc4ab9fffc2a99dffbea59affbaa49affb6a397ffb1a192ffad9d8effa99a8dffa39488ffa09287ff9f9186ff9e9084ff9d8f83ff9a8c81ff94867dff908179ff908179ff8d7e75ff8b7d74ff897a72ff867a70ff83786eff80766cff7f756bff80756bff81756cff83766dff7f7369ff80746bff85796fff8d8177ff988a81ffa4958cffab9a90ffac9c91ffad9d92ffac9c90ffad9d93ffa89a91ffa4968fffa3958eff9f938cff9b8f87ff988b82ff94887eff91887dff92897eff968c82ff988c85ff958881ff958881ff95857fff93847eff93847eff92837dff91837cff8c837bff898178ff897f76ff837a6fff81776dff81776dff81776dff80766cff7d756dff7c746bff7d766bff7d7669ff7d7669ff7d766bff7d766bff7e776cff7f766cff7b736aff76716aff6f6a64ff696560ff67625fff68605eff6c6361ff6d6261ff726766ff756c69ff746d6aff78726fff766f6cff77706eff797370ff797370ff7a7470ff7c766fff807a73ff847d77ff877e78ff887f79ff887f79ff887f79ff867e78ff867e78ff887f79ff867e78ffdec338ffdec338ffe0c63cffdbc237ffd8bf33ffe5cd3bffeed743ffdec937ffdcc836ffe7d341ffdbc43bffdec934ffe9d545ffdcc83cffdfc844fff4da7bffe4c69fffd5b5a3ffccad9bffc8ab96ffcdb09bffd5b7a3ffd4b7a6ffd1b5a5ffcfb3a5ffcbb2a4ffc9afa2ffc8aca0ffc5a99cffc2a69affbea59affb7a195ffb5a193ffaf9f90ffa9998cff9f9184ff9d8e83ff9d8e83ff9d8e83ff9a8c81ff97897eff92847aff8f8077ff8c7f76ff8a7d74ff887c73ff867a70ff85796fff80766cff7f756bff7f756bff7f766cff82756cff81756bff7f736bff82766eff8a7d76ff958880ffa2948bffaa9991ffaf9d93ffaf9e93ffb1a096ffb1a094ffb09f93ffad9d94ffa99b92ffa5968effa1928cff9d8f87ff9a8d83ff958980ff92897eff92897eff958b81ff998c85ff958881ff94867fff93847eff92837dff91827cff91827cff91847dff8d827aff8b8078ff897d76ff877b73ff82786fff81776eff81776dff7f766dff7d756eff7c746cff7d766bff7d766bff7d766bff7d766bff7d766bff7f776cff81786bff7f776bff7b736aff756f68ff6f6964ff696260ff665d5cff69605fff6a6160ff6b6362ff6f6765ff706966ff706967ff726b69ff736d6bff766f6dff766f6dff78716fff7c7571ff807a73ff847d77ff877e78ff867e78ff867e78ff857d77ff857d77ff857d77ff857d77ff847c76ffe4cc3cffe2ca39ffe1ca39ffddc735ffe2cc38ffe4cf37fff4df48ffe9d741ffe1cf3bffeddc44ffe9d93effead93cffeedc45ffe7d541ffe3d13dfff4e05fffedcf97ffd6b5a1ffd0b09fffccad9affcdae9bffd4b5a1ffd8b9a7ffd5b6a6ffd4b5a6ffcfb3a5ffcdb1a4ffc9aea0ffc5aa9dffc0a599ffbda498ffb7a093ffb4a092ffb09f90ffa8988aff9e9084ff9c8d82ff9b8c81ff998b80ff988a7fff94857aff8f8178ff8b7e75ff8b7e75ff897d74ff877b72ff85796fff83776dff80766cff7f756aff7f746aff80766cff84786eff83766dff81756dff847770ff8d8079ff9f9089ffad9c94ffb19f94ffb49f94ffb29f95ffb29f95ffb2a094ffb2a296ffafa095ffab9c93ffa5968fffa2948bff9f9088ff998c83ff958980ff92897eff91887dff958b81ff998c84ff958781ff93857eff92837dff90817bff90817bff8f817bff8f837cff8d8179ff8c7f78ff8a7e77ff887e76ff857a72ff817970ff7f786fff7e766fff7c766fff7a746fff7d756eff7d756cff7d756cff7d756dff7d756dff7f766eff81776eff81786cff80766bff7d756cff79716bff706965ff696262ff686161ff686161ff696262ff6c6664ff6c6664ff6b6462ff6d6664ff716a68ff736d6bff756e6cff77706eff7a7470ff7e7872ff817b74ff857d77ff857d77ff857d77ff847c76ff847c76ff857d77ff847c76ff847c76fff3dc45fff0d940ffedd940ffefda41ffeeda3efff3e041fffdea4cfff8e949fff3e346fff3e444fff8e84afff4e547fff4e247fff5e54bfff4e24bfff1dd4ffff2d388ffdbb89cffd2b19effcfae9dffceae9dffd2b3a0ffd6b8a3ffd6b6a5ffd5b5a5ffd3b5a6ffceb2a4ffc9aea0ffc2a89bffbca498ffbaa296ffb59f92ffb6a093ffb19e90ffa8988bff9d8f83ff9a8c81ff9a8c81ff988a7fff95867bff918378ff8c8076ff8a7e74ff887c73ff877b72ff85796fff84776eff83766dff81756cff7f756bff7f756aff7f756aff80766cff80746bff7f716aff867770ff93847dffa99990ffb4a297ffb6a196ffb8a195ffb7a197ffb7a197ffb7a397ffb6a499ffb1a096ffac9d94ffa79890ffa2948cff9f9088ff9a8c83ff93897fff91887dff91887dff948a80ff978b83ff958781ff91847dff91827cff907f79ff907f79ff907f79ff8f817bff8d8079ff8d8079ff8c8079ff887c75ff867c74ff827a71ff80786fff7e766fff7c766fff7b7470ff7d756eff7d756dff7d756dff7d756dff7d756dff7f776fff837971ff837a6eff82796cff81796fff7c746eff746d69ff6c6665ff6a6363ff686161ff696261ff6b6563ff6b6562ff6a6461ff6b6563ff706967ff726c69ff746d6bff766f6dff797370ff7d7771ff817b74ff847c76ff857d77ff847c75ff847c76ff847c75ff857d77ff857d77ff867e78fffcee4cfffbed4afff9ec4afff9ec4bfff7ea48fff9eb4afff4e545ffe7d83bffeedd42fff1e145ffe8d83dfff3e349fff1df44ffecdb42ffeedd43ffe7d640ffe7d060ffdcbf80ffd4b594ffcead99ffccac99ffcfb19dffd3b6a1ffd5b7a3ffd6b7a6ffd3b5a6ffceb2a4ffc8aea0ffc0a79affbba397ffb8a194ffb49f92ffb39c90ffb19e90ffac9c8eff9e8f83ff978a7fff96897eff94877bff928579ff908277ff8b7f74ff887b72ff877b72ff877b71ff84786eff83766dff82766dff81756cff7e746aff7d7368ff7e746aff7e736aff7e7268ff83746dff8f8078ffa29289ffb29f94ffb8a398ffbda59affbca598ffbca499ffbaa398ffbaa399ffb9a499ffb5a398ffb1a096ffac9b92ffa5948cffa19087ff9c8d82ff968a80ff92897eff91887dff948a80ff968a83ff958982ff948780ff92847dff8e8079ff8e7e78ff8e7e78ff8e7e79ff8d7e7aff8d7e7aff8b7d79ff8a7c77ff867b74ff847972ff827871ff817872ff807771ff7c736fff7b716dff7b726dff7d756fff7c746eff7d756fff7e766fff827870ff827a70ff827a70ff817a70ff7d756fff766f6bff6f6866ff6c6664ff68605fff68615fff6b6563ff6c6664ff6c6664ff6c6664ff6f6866ff706967ff716a68ff736c6aff77706eff7a7470ff7d7771ff817a73ff837b74ff837b74ff847c76ff837b74ff847c76ff837b74ff837b74fffcf94cfffbf54bfff9f24affefe741ffdfd733ffded535ffdbd033ffd8c931ffe0d13affe2d33cffd1c22cffe0d13bffe1d138ffdbcd31ffdfd135ffdfd133ffe5d440ffe5cd66ffd8bb8affc8a792ffccac99ffcfaf9dffd4b5a2ffd7baa4ffd7b8a5ffd3b5a5ffceb2a3ffc8afa0ffbfa698ffbca296ffbaa196ffb59d92ffb29b90ffb19c90ffaf9c90ffa39385ff9b8c7fff998b80ff95887cff928479ff8f8378ff8c8074ff8a7d74ff887c73ff877b72ff857a70ff84776eff81756cff7f756bff7b7267ff7c7368ff7e7168ff7f716aff85776eff928177ffa29086ffad9b90ffb8a397ffbba498ffbda599ffbda699ffbda699ffbda599ffbda59bffbca59bffbaa59affb4a397ffaf9e92ffa9988cffa39386ff9e8e83ff9b8c83ff958980ff92897eff948a80ff968c84ff988b84ff968881ff93867fff90837cff90817bff8d7e77ff8a7b75ff887a74ff887a74ff887874ff867773ff857873ff847772ff837772ff817671ff807570ff7d736eff786d6aff78706cff7b726eff7b726eff7c736eff7c746dff7e776eff807970ff7f7970ff7d776fff7b756eff77716bff716b67ff6e6763ff69635fff68615dff6b6563ff6d6664ff6e6765ff6e6765ff6e6765ff6f6866ff6f6866ff6f6866ff726c69ff77706eff79736dff7d7771ff7f7972ff827a73ff837b74ff817872ff827a73ff837b75ff837b74fffaf94bfffaf54cfff2eb45fff0e846ffe5dd3effe4db3dffe4d93fffe6d942ffebdd47ffe7d943ffe6d842ffe5d741ffe8d841ffe8da40ffe4d73bffe8db3bffeadd42ffecd960ffe7cb8dffd2b095ffcfb09bffceb09affd3b59fffd6b8a4ffd6b8a5ffd2b5a4ffceb3a3ffc9b0a1ffc0a79affbca397ffb89f93ffb59d91ffb19a8fffab978cffab988cffa39284ff9d8d80ff9a8c7fff97897dff94857aff8e8276ff8c8074ff8a7d74ff877b72ff867a70ff84786eff81756cff80746bff7c7368ff7c7368ff7c7368ff80736cff84766dff8d7f75ff9f8e83ffad9a8effb49f94ffb8a095ffbaa397ffbea79affbfa69affbfa69affbfa69bffbea69cffbca59bffbaa79bffb6a599ffb1a094ffab9a8effa59588ffa19085ff9d8e86ff998c83ff968a81ff978b82ff988d85ff988b84ff988983ff92857eff91847dff91827cff90817bff8d7e77ff877972ff857871ff857770ff847571ff837671ff827671ff827671ff7f7570ff7e746fff7b706cff766b67ff766e6aff776f6bff786f6bff7b726dff7b736dff7d756fff7d7770ff7e7871ff7c766fff79736eff77716eff766f6cff746e6bff6a6361ff665f5dff6a6461ff6d6664ff6e6765ff6e6765ff6e6765ff6e6765ff6e6765ff6f6866ff726c69ff77706eff79736dff7c7670ff7d7672ff7f7773ff817874ff7f7771ff827a73ff837b75ff837b74fff2ed44fff6f04afff3ed48fff7f14efff3ed4cffefe84affece34affe7dc49ffe8dd4bffeade4cffe4d947ffdace3cffdcce3fffdbcf40ffd6cb3cffd9cd3bffdcd03fffdfd256ffe8d288ffd7b796ffcead99ffcaad98ffceb09cffd3b6a2ffd6baa6ffd2b6a4ffcdb2a2ffc6ac9effbfa799ffb9a296ffb7a093ffb39d8fffae988bffac978cffab968bffa29283ff9d8f80ff9b8e80ff988a7eff93867bff8e8377ff8c8074ff8a7e72ff867a70ff85796fff84796fff81756cff7f746aff7c7167ff7c7066ff7e7268ff82756cff897b71ff94857bffa8978dffb5a195ffb49f93ffb8a194ffbca498ffbfa89bffc2a89cffc2a89cffc1a89dffbfa89dffbea89dffbba89cffb7a69affb2a295ffac9c8fffa69689ffa29186ff9f9088ff9a8e84ff988c82ff998c84ff9a8d86ff9b8d86ff988983ff94867fff8f827bff8f807aff8f7e78ff8d7d77ff877a73ff847770ff847770ff817570ff7f7470ff7f7470ff7e7470ff7d756fff7c746dff796f6bff736865ff716864ff746b67ff756c68ff776f6bff79706cff7a726eff7a746fff7c7572ff7c7572ff79736fff77706dff756e6cff746d6bff6b6562ff665f5dff6a6461ff6d6664ff6e6765ff6e6765ff6e6765ff6e6765ff6e6765ff6f6866ff726c69ff766f6dff78716eff7a7370ff7a736fff7c7470ff7c7470ff7e7670ff827872ff827a73ff827a73ffefe747ffeee746ffe5df3fffece648ffebe449ffe1da41ffe2da45ffdcd246ffdcd248ffd6cc42ffd0c63dffcec43bffc8bb39ffc0b536ffc8bc3effc6b938ffc3b834ffc6ba40ffdac874ffd8bc93ffceaf99ffc9aa95ffccae99ffd1b49fffd5b7a3ffd0b4a0ffccaf9effc6aa9bffbfa699ffb9a295ffb59f92ffaf9b8cffad978affaa9589ffa99589ffa39384ff9d8f7fff9c8e7fff998d80ff95897dff918579ff8d8176ff8b7f74ff877b72ff847870ff847770ff81756dff7f7369ff7d7066ff7d7167ff7f736aff85776eff8f8077ff9f8f84ffaf9c90ffb6a296ffb6a094ffb9a295ffbda699ffbea79affc1a79bffc3a99dffc3aa9fffc1aaa0ffc0a99fffbdaa9effb9a89cffb5a498ffaf9e91ffa8988cffa39287ff9f9188ff9b8f85ff9a8e84ff9a8d85ff9c8d86ff9a8b85ff998983ff94847eff91847dff8f817aff8e7e78ff8d7e78ff897c75ff82786fff82766fff7f746fff7d7370ff7c7370ff7a726eff7a736cff79726bff766d68ff726764ff6f6461ff6f6563ff726967ff756c68ff766e6aff776f6dff78726fff797370ff7a7471ff78716fff77706eff746e6cff736d6aff6b6462ff67605eff6a6461ff6d6664ff6e6765ff6e6765ff6e6765ff6e6765ff6e6765ff6f6866ff726c69ff756e6cff77706eff78716fff77716cff78706cff7b726eff807570ff827772ff817972ff817872ffe7dd47ffd8d03bffd6ce3bffd7cf3effd9cf41ffccc338ffc9be38ffc3b837ffcbbf41ffc7bc3effc7bc3fffc6bb3dffc1b33bffbfb23cffbfb23dffc0b43affc0b535ffbfb635ffccbd59ffd7bc89ffd0b297ffcaae96ffccb098ffcfb29dffd3b59fffd2b4a0ffccaf9cffc4a898ffbfa698ffb8a194ffb69f92ffaf9a8cffac9589ffa89388ffa99589ffa39284ff9d8f7fff9d8f80ff9a8d80ff968b7eff92867bff8e8279ff8b7e76ff867a73ff847770ff847770ff80746dff7f736aff7d7167ff7e7268ff80746bff8b7c74ff95877cffa59488ffb29f91ffb5a093ffb8a194ffb9a296ffbaa397ffbaa195ffbea599ffc4aaa0ffc6ada3ffc4aca2ffc3aba1ffc2ada2ffbfaba0ffbba89cffb4a195ffb09d91ffa9968cffa4958bff9d9086ff998b82ff96897fff95867eff97867fff978680ff92827cff91827cff90817bff8c7d77ff8f8079ff8a7e75ff82786fff81776fff7d736eff7a716dff79716dff78716cff78726bff77716aff766e68ff726764ff6f6460ff6b6160ff6f6664ff736a68ff736b69ff746e6cff77706eff797270ff797270ff77706eff746d6bff716b68ff716a68ff6a6361ff67605fff6a6461ff6c6664ff6e6765ff6e6765ff6f6866ff6f6866ff6e6765ff6f6866ff716a68ff726c69ff756e6cff77706eff77706cff78706cff7c736fff817671ff827771ff827871ff7f7770ffe0d641ffdad140ffd6cd3effd5cc3fffd3ca3effc8be36ffc9bf3affcabe3effccc041ffccc142ffcec343ffcec342ffccc040ffc7bd3effc7bd3effcabf41ffc8be3cffc7bf3cffcbbd4affd8c271ffd6bc90ffceb397ffcfb298ffcdb199ffcfb39cffd1b29effccaf9bffc5aa97ffc1a796ffbca395ffb79e92ffaf988bffac9389ffaa9388ffa89285ffa49284ff9f8e7fff9d8d7eff9c8e80ff9a8d7fff96897eff93867dff8e8279ff8b7e77ff867a73ff847770ff82766fff80746cff7e716aff7f736bff847870ff91837cffa39388ffac998cffb39e91ffb7a093ffb9a296ffbca498ffbca498ffbda599ffbea599ffc0a79dffc6ada3ffc6aea4ffc6afa4ffc6afa4ffc5aea3ffc3ada2ffc0a99effbaa399ffb49e93ffac9a8effa29387ff998b7eff95877aff8f8076ff8e7e78ff8e7e78ff8f8079ff8f8079ff8f8079ff8e7f78ff90817aff8d8076ff867a71ff82766fff7a6f69ff776e69ff756e6aff756e69ff736e66ff746f68ff756f68ff736b65ff716862ff6c635fff6d6460ff6f6762ff6e6765ff706967ff736d6bff766f6dff77706eff766f6dff726b69ff706967ff6f6866ff6a6462ff696260ff6a6361ff6b6562ff6c6664ff6e6765ff706967ff706967ff6e6765ff6e6765ff706967ff716b68ff736d6bff756e6cff766f6cff78726dff7d7471ff807570ff817671ff807770ff7e756cffede854ffefec53fff1ef52fff1ef53ffefec53ffe3e148ffe0df41ffdfdc3dffdedb3bffdfdc3dffe1de41ffe0dd41ffdfdb41ffe1dd47ffe4e04dffe5e04effe2de49ffe6e14fffe5dd54ffe6d96affe5d191ffd6bc9affd1b497ffceaf97ffd0b29affcfb19cffccaf9bffc6ab97ffc1a695ffbda295ffb69d91ffaf978cffac958affaa9386ffa79383ffa79284ffa59083ffa18f80ff9e8d7eff9c8c7dff9b8b7fff978a80ff95867dff90817aff8c7d77ff877871ff84756fff83746eff81756eff80746dff877a73ff978982ffac9a91ffb19c8fffb39e91ffb7a093ffbba397ffbea79affbea79affbea79affc1a89cffc3a9a0ffc6ada3ffc9b1a5ffc9b1a5ffcbb1a6ffc9b1a5ffc8b1a4ffc4ada0ffc0a99effbaa298ffb09e91ffa49588ff9b8d7fff938579ff8e7f74ff8c7d77ff8c7d77ff8c7d77ff8c7d77ff8f8079ff90817aff91827aff8f8078ff877b72ff867a72ff7a6f6aff706863ff6e6763ff6e6862ff6e6861ff6e6861ff767069ff767069ff716b64ff6e6660ff6d655eff6d6460ff6c6663ff6e6765ff716a68ff726c69ff766f6dff756e6cff726b69ff706967ff6f6866ff6e6765ff6b6361ff696260ff6a6361ff6b6562ff6f6665ff6f6866ff706967ff6e6765ff6c6462ff6e6765ff706967ff726b69ff746d6bff756e6bff79736eff7d756fff7f7570ff827872ff7e766eff7c746affdcde6bffdbdf6bffdde26dffdde26dffd4d869ffd4d961ffe9ef66fff6f967fff9fb66fff8f969fff8f86dfff4f46cfff4f46ffff4f573fff0ef75fff1f174fff4f575fff0ef75fff3f178fff8f184fff6e799ffd5c092ffcfb594ffd0b398ffd0b49affcfb39cffccb19cffc6ac98ffc1a695ffbea395ffb79e91ffb0998cffaf978bffad9589ffaa9586ffa89285ffa89286ffa59083ffa08c7eff9f8c7eff9d8c7eff9b8c7fff96867cff918279ff8e7f77ff887972ff84756fff83746eff847770ff83766fff8e7f79ff9e9089ffb2a096ffb59f93ffb8a094ffbaa195ffbfa69affc3aa9effc2a99dffc2aa9effc4ab9fffc8aea4ffcbb1a8ffccb4a8ffcbb3a7ffcbb2a7ffcbb4a7ffcbb4a7ffc8b1a5ffc5ada1ffbfa99effb5a296ffa7988bff9d8f81ff97897cff908277ff8f8079ff8f8079ff8f8079ff8f8079ff91827cff91827cff92837dff90817aff8b7e76ff8b7e77ff81756fff746a65ff706862ff6e6861ff6c6760ff6c6760ff756f68ff77716aff736c65ff6f6760ff6d645eff6c635fff696260ff6c6663ff706967ff706a68ff736d6aff746d6bff726b69ff706967ff706967ff6f6866ff6c6361ff6b6160ff6a6260ff6b6361ff6f6665ff706866ff706967ff6e6765ff6d6462ff6f6665ff6f6866ff726b69ff746d6bff756e6aff77716cff7d756fff817771ff81776fff7d756dff7c746affd1d87dffcad175ffc6cc6fffcbd175ffc6cc71ffcdd276ffd4da7affd7dc76ffd9e076ffdae17bffd8dd7dffd2d87bffd1d773ffd3d873ffd2d876ffd2d673ffd3d974ffd2d876ffd3d572ffd8d676ffeadf90ffdccb97ffd2bb98ffd0b59affd1b59cffd0b49cffccaf9bffc7ab97ffc2a794ffbea393ffb79e91ffb29b8effaf998cffad9989ffac9788ffa99385ffa99285ffa48d80ffa18c7eff9f8d7fff9e8c7eff9b8b7eff99897fff928479ff8e8077ff8a7b73ff84756eff84756fff877971ff8a7b75ff96867fffa6988fffb8a498ffbaa195ffbda497ffbfa499ffc3a89cffc6aca0ffc6aca0ffc5aca0ffc4aca0ffc9afa4ffcfb3a9ffcfb5a9ffceb5a8ffceb5a9ffceb5a9ffccb5a8ffc8b1a5ffc6afa3ffc1aaa0ffb9a69affad9d90ffa39587ff9c8e80ff96877dff94847eff94847fff94847fff94847fff94847fff94847eff94847fff93847eff94857fff978982ff8e817bff7e736dff79716bff756e66ff716b62ff706b61ff756f66ff787168ff756d66ff726963ff6e6360ff6b615fff696261ff6b6564ff6e6765ff6f6866ff706967ff726b69ff716a68ff706967ff706967ff6f6866ff6d6463ff6c6361ff6b6160ff6e6564ff6f6665ff706866ff706a65ff716867ff706766ff6f6665ff706a65ff716b67ff736d68ff756e6aff78716dff7d7570ff7f7772ff7f7771ff7e766fff7b736cffced77effcdd67bffccd478ffccd478ffcdd579ffd3db7fffcfd77bffcdd778ffcfda79ffd0db7dffccd67affc8d278ffcad577ffccd777ffc9d475ffc9d374ffcdd777ffc9d474ffc8d171ffd0d378ffd9d481ffe0d197ffd7c29bffd3b89dffd3b79fffd0b29cffccae9affc7aa99ffc3a897ffbfa495ffb9a192ffb29d8dffb09c8bffad9989ffab9787ffa99485ffa89284ffa69082ffa08d7eff9e8d7cff9d8d7dff9a8a7bff99897fff92867aff8e8277ff8a7d72ff84776eff85766eff897a72ff8e7e76ff9b8981ffab998fffbaa498ffbfa69affc3aa9cffc5ab9effcbafa2ffceb1a5ffcdb1a5ffcbafa4ffcab0a4ffcdb2a6ffd3b8acffd2b9acffd1b7aaffd0b6aaffd0b7aaffd0b6a9ffcab2a6ffc8b1a5ffc5ada3ffbfaa9fffb6a397ffad9c8fffa6968aff9e8c82ff9d8b85ff9d8b85ff9d8b85ff9e8b86ff9e8b86ff9c8a85ff9c8b85ff9c8b86ff9e8e88ffa0908aff958781ff8a7e77ff867c74ff807970ff7a746bff79736aff787168ff7a7269ff776f67ff756b65ff6f6460ff6b615fff676060ff6a6362ff6c6663ff6c6664ff6d6765ff706967ff716a68ff706967ff706967ff706967ff6e6564ff6c6361ff6c6361ff6e6564ff716766ff726867ff736a66ff726a68ff736a68ff716766ff736a66ff736b67ff756d69ff776f6bff7b726eff7c736fff7c7370ff7e756fff7e756eff81756effcbd57dffcbd47bffccd37affccd47affcdd57affced67bffced67cffccd57dffccd57effcad47bffc7d078ffc7d078ffc9d37affc9d37affc8d278ffc8d27affc9d27affc8d279ffc8d078ffcacf78ffcfce7affddd290ffddcb9bffd6bd9effd3b79fffcfb09bffcdad9bffc8ab9affc4a899ffc0a595ffbba291ffb39d8cffb29c8affb19b8affad9788ffa89485ffa79383ffa79383ffa08e7dff9f8d7cff9d8e7dff9b8b7bff98887cff93857aff908478ff8b7f73ff867a6fff88796fff8e7d74ff918177ff9c8b80ffaa968bffb9a196ffc4a99cffc9ada1ffceb2a6ffd5b8abffd5b7abffd4b8abffd2b6a9ffd5b8abffd4b8abffd6bbaeffd3baaeffd0b8acffceb6acffcdb5abffccb4a9ffcab2a7ffc9b2a7ffc7aea4ffc4aba1ffbfa699ffb9a194ffb39d91ffad988dffa9948cffa8938bffaa938bffaa938bffaa948cffaa958dffab958effab968effac978fffaa978fffa19189ff978982ff93877fff8b8179ff847c74ff817a71ff7f766eff7b736aff797068ff756b65ff716663ff6c6260ff68615fff68615fff696260ff696260ff6a6361ff6f6866ff716b68ff726c69ff706967ff716a68ff6f6665ff6d6462ff6d6463ff6f6665ff706665ff716663ff716864ff706866ff726867ff716766ff746b67ff756c68ff766e6aff7a706cff7b726eff79706cff7a716dff7e746fff83756eff8d7b6dffcad381ffcad37fffc9d27cffc9d37cffcad47cffcad47cffc9d37cffc9d27dffc9d27fffc8d17fffc7cf7dffc7cf7dffcad282ffc8d280ffc7d180ffc9d183ffcad083ffcad086ffcacf87ffcbcf87ffccce8bffd7d099ffe1d1aaffdbc5abffd3b7a1ffceaf9bffccad9cffc8ab9cffc4a799ffbfa396ffbea494ffbaa191ffb39d8cffb29c8cffb0998affab9586ffaa9587ffaa9585ffa69282ffa39080ffa18f7fff9f8e7fff9b8b7dff95867aff928479ff8d8175ff897d71ff867a6eff8c7d72ff948379ffa29085ffb29f93ffbba398ffc6ab9effcdb1a4ffd2b5a8ffdabcafffdbbdb0ffd9bbaeffd6b9acffd9bbaeffd8baaeffd5bbadffd0b8abffcdb5abffcbb3a9ffcab3a9ffc8b1a6ffc7b0a5ffc6aea4ffc8aea4ffc6aa9fffc3a798ffbba394ffb8a193ffb49d90ffb69c92ffb59b91ffb79c92ffb79a91ffb59b91ffb59b91ffb79c94ffb79d95ffb69e95ffb39a91ffab958dffa28e87ff9b8a82ff92837cff8a7d75ff857a72ff82786eff7f756dff7b706aff786b66ff726764ff6d6260ff6a615fff69605dff68605cff69605fff6b6160ff6f6665ff6f6866ff726c69ff726c69ff726c69ff716b68ff6f6765ff6d6664ff706967ff6e6765ff6f6463ff706662ff6f6664ff716967ff726a68ff736d6bff756e6aff76706bff7a706aff7b726cff78706cff78706aff7e7269ff887868ff99855fffcacf97ffcace99ffcace98ffcace97ffcacf94ffcacf91ffcacf92ffc8cd93ffc9cd95ffc9cd95ffc8cc94ffc9cd95ffcbd09affcbd09cffc9cf9bffcbce9effcdcea0ffcbcda8ffccccabffcdcca6ffcccaafffd2c9bcffe0d1c9ffe3cec6ffd7bdb0ffd1b5a3ffcfb09effc8aa9bffc3a698ffc0a596ffbfa494ffbba091ffb79f8effb59c8cffb29a8affad9688ffab9689ffac9789ffa99485ffa59282ffa39182ffa08f80ff9c8c7dff968679ff928377ff8e8175ff8b7f73ff877b6fff8c7e73ff98877dffa9988dffb6a095ffbca497ffcaafa1ffd1b6a8ffd9bcafffdec0b3ffdfc1b4ffdbbdb0ffd9bbaeffdec0b3ffdcbeb1ffd6bbadffd0b6aaffcab2a8ffc7b0a5ffc6aea4ffc2aba1ffc1aa9fffc2aaa0ffc3a99effc5a99cffc5a899ffbfa597ffbda496ffb9a096ffbaa096ffbda197ffc3a69bffc3a69affbfa396ffbfa398ffc4a69bffc3a69bffc0a499ffb89e92ffb39c91ffab958cffa39088ff9c8b82ff918279ff887b72ff85796fff81756eff7d716aff796c67ff726563ff6e6360ff6a615eff69605dff685f5dff68615fff696260ff6c6462ff6d6765ff706967ff726c69ff736d6bff726c69ff706967ff706967ff716a68ff6f6866ff6d6462ff6e6564ff6f6665ff706866ff716a68ff736d6bff756e6aff76706bff786f6aff7c726cff78706aff776f69ff817368ff9e8b67ffc0ab69ffc7c8c0ffc8c7c5ffc7c7c7ffc7c7c5ffc7c8bfffc7c9baffc8c9bbffc7c7bdffc7c8c0ffc7c8c0ffc6c7bfffc7c8c0ffc9c9c4ffc8c9c3ffc7cac3ffc9c8c5ffcac7c6ffc9c7c9ffcac7ccffcac6cbffc9c7d0ffcec9d5ffd7cddbffdfcfd8ffdcc6c1ffd6baabffd3b4a1ffcbac9affc6a898ffc5a999ffc1a695ffbda292ffbaa190ffb8a08fffb69d8dffb09889ffab9688ffaa9587ffa99588ffa49284ffa39183ffa18f80ff9c8c7dff998779ff938276ff8d7e72ff8c7d72ff897c70ff8b7d72ff98897effae9c90ffb5a095ffbca496ffc5aa9dffd4b8abffdabdafffdec0b3ffe1c3b6ffdec0b4ffdbbdb1ffe0c2b5ffe0c2b5ffd9beb0ffd1b7abffcbb1a7ffc6aea4ffc4aca2ffbea79cffbba298ffbba399ffbfa59affc4a89affc5a898ffc0a698ffbea598ffbca297ffbda297ffc3a69bffc7a99dffcbad9fffc6a89cffc8ab9fffceafa3ffcfb1a4ffc8ad9fffbfa497ffbca397ffb6a096ffab978effa28f86ff98877cff8e7f76ff867a70ff80736cff7d7069ff796c67ff746764ff6d625fff6b6260ff69605fff685f5eff68615fff68615fff6a6361ff6b6563ff706967ff716a68ff726c69ff726c69ff706967ff716a68ff716a68ff706967ff6e6564ff6f6665ff6f6665ff716967ff716b67ff736d68ff756e6aff736d68ff746b67ff786d68ff796c64ff7e6f62ff8b7b5cffb2a55bffdacc63ffc4c4d0ffc5c4d3ffc6c5d5ffc6c5d4ffc6c6d0ffc6c6cdffc6c6cfffc6c6d1ffc7c6d4ffc7c6d4ffc6c5d3ffc7c6d4ffc8c7d5ffc5c6d5ffc5c7d4ffc8c8d4ffc8c6d1ffc6c7d1ffc6c7d4ffc8c6d5ffc6c7d5ffc6c8d8ffcac6dbffd3c8d9ffe1cdceffd8beb2ffd4b6a5ffcfaf9dffcaac9bffc6a997ffc4a998ffc2a797ffc0a496ffbca192ffb99f91ffb39b8cffb0998affad988bffac988bffa99587ffa69284ffa38f81ff9f8d7eff9b897bff958576ff8f7f71ff8d7d71ff8c7b70ff908074ff99887cffac9a8cffb49f92ffbda395ffc4a99cffd3b6aaffdbbdb0ffdec1b2ffe2c4b6ffe1c3b6ffddc0b2ffe1c3b6ffe2c4b6ffdbbeb1ffd1b5a9ffcaafa4ffc5aaa0ffc2a79dffbda297ffb89d93ffb79c92ffb99d92ffc0a296ffbea193ffbea295ffbca295ffbaa095ffbfa398ffc5a89dffcbada1ffccaea0ffcaada2ffcdb1a4ffd3b5a9ffd5b7abffd0b5a7ffcaafa1ffc1a89dffbaa499ffae9b8fffa69388ff9d8b81ff928479ff877b71ff80746bff7b6e67ff786b66ff756965ff6f6460ff6b6160ff685f5eff685f5eff67605eff66605eff68615fff6a6461ff6f6866ff716a68ff716a68ff706967ff716a68ff6f6866ff706967ff716a68ff706867ff706766ff716766ff736a67ff726b66ff756d69ff756e6aff736968ff726764ff756965ff7f6d63ff8e7a62ffc5b57afff1e87efff5ef60ffc2c3d8ffc2c3dbffc3c3dcffc3c3dcffc3c4d7ffc3c5d5ffc3c4d6ffc3c4d9ffc4c5dcffc4c5dcffc3c3dbffc4c5dcffc5c5ddffc2c4dcffc2c5dcffc5c6dbffc6c6daffc5c6dbffc4c6ddffc6c5deffc4c6dfffc3c6dfffc6c5dfffccc4deffe4d5dfffe5cfcbffdcc0b4ffd0b3a2ffccae9effc6aa99ffc6aa99ffc4a898ffc2a598ffbea396ffbba092ffb79d8fffb09a8bffaf988bffac9689ffa99487ffa99486ffa49082ffa18f81ffa29082ff9e8e7fff968677ff918273ff8e7e70ff8f7f71ff9c8b7dffae9b8effb59f93ffbaa293ffc6ac9effd0b5a7ffd7baadffd7baadffd4b8abffd5b9acffd5baadffdbbdb0ffd9bdafffd6bbaeffcfb5a9ffc5aca0ffbfa79cffbca499ffb8a096ffb39c91ffb1998fffb3988fffb1978cffb3998dffb59c90ffbaa094ffb79e94ffbea39affc5aa9fffc8aca0ffcaafa1ffcaaea3ffd1b4a7ffd6b7abffd7b9acffd5b6aaffd0b4a7ffcaafa3ffc1ab9fffb5a295ffac988cff9f8e83ff938479ff867a71ff7f726bff796c67ff766a66ff736865ff6e6461ff6a605fff665f5eff665f5dff68615fff67605eff68615fff6a6361ff6e6765ff706967ff706967ff706967ff706967ff706967ff736d6aff766f6dff766f6dff736c6aff736867ff746966ff746b67ff756c68ff786e6bff736866ff746764ff7b6c67ff89746affb09d85ffefe2acfffffa9ffffefb7fffc0c1dbffbfc1dcffc0c0dcffc0c0dcffc0c1daffc1c2d9ffc1c2dbffc2c3deffc2c3dfffc2c3dfffc2c3dfffc3c4e0ffc4c5e1ffc2c5e0ffc1c5e0ffc3c6e0ffc3c6dfffc4c6dfffc4c6e1ffc3c5e2ffc5c7e4ffc5c7e3ffc6c6e1ffcbc7e3ffd1c9deffdbccd8ffe4cdcdffd6bbb3ffcfb3a9ffc9ae9fffc5a99affc2a798ffbfa597ffbba194ffb89f93ffb59d8fffb29b8dffb19a8dffac9689ffa79385ffa69385ffa59284ffa39183ffa69385ffa39283ff9e8d7eff958576ff938374ff918272ff998879ffa99587ffb49f92ffbca395ffcaafa2ffcfb3a7ffd5b9acffd6b9acffd2b7aaffd1b6a9ffd4b8abffd9bbaeffd7baadffd2b8abffccb4a8ffbfaba0ffb7a59affb6a39affb2a297ffad9d92ffaa998fffa8978bffa79689ffa89689ffa69488ffa59286ffab9488ffb49b8fffb69d90ffbda596ffc2ac9cffc7ac9dffd4b4a5ffdab6a8ffdbb8abffdcb8acffd8b6a8ffd5b6a8ffd0b4a7ffc7afa0ffbaa495ffa69385ff97877aff897b71ff7f736cff7a6d69ff756966ff726764ff6c6160ff675e5eff665e5eff67605eff67605eff66605eff67605eff68615fff6d6664ff716a68ff716a68ff716a68ff716a68ff716a68ff766f6dff7c7573ff7b7572ff7a7270ff736a68ff726865ff716863ff746965ff7a6e69ff786a64ff7b6a65ff806e6affa6928effc9b7b1ffe5d8cbfff4e9cdfff6ecbfffbdc2ddffbcc1dcffbcc1dbffbcc1dbffbcc1daffbec2dbffbec2ddffc0c2deffc0c2e0ffc1c3e2ffc1c3e2ffc2c4e3ffc2c4e3ffc2c6e4ffc2c6e4ffc2c6e4ffc2c6e4ffc6c7e7ffc6c7e6ffc5c8e6ffc6c9e7ffc6c9e7ffc5c8e5ffc7c7e3ffccc8e4ffd0c9e2ffe2d0dfffe3cbcfffd9bdbbffd1b5aeffc8aca2ffc1a79affbda498ffb9a095ffb39e91ffb29c8fffb69e92ffb49e91ffad9a8cffa89688ffa79586ffa49384ffa19082ffa08f80ffa39384ffa09081ff948475ff928373ff938374ff988678ffa69385ffb09c8effbda598ffcbb0a3ffd0b4a8ffd6b8acffd8baadffd4b8abffd5b8abffdabcafffdcbeb1ffd5baadffd2b8abffcab3a8ffbeaa9fffb7a69cffb6a59cffb2a399ffab9c92ffa5978bffa49689ffa39587ffa39386ffa29185ffa28f84ffa38e82ffa58e83ffaa9487ffab9789ffb4a091ffbea292ffcaa999ffd2ae9dffd4aea0ffd8b1a3ffd8b3a4ffd7b5a6ffd4b4a5ffd2b4a4ffbfa595ffaa9284ff9c8779ff8c7d73ff82756eff7c6f69ff766a67ff716663ff6c6261ff675f60ff665e5fff67605fff68615fff67605eff68615fff696260ff6f6866ff726c69ff726b69ff726c69ff716b68ff726c69ff78716fff807a77ff807a77ff807a78ff766e6cff706865ff6c625dff746660ff7b6b66ff816e68ff85706dff978484ffccbcbbffdacbcfffe1d4dcffe2d7ddffe7dddfffbcbfe1ffbcc0e0ffbbbfdeffbbbfddffbbbfdeffbcc0dfffbdc1e0ffbfc1e2ffc0c1e2ffc0c1e3ffc1c3e4ffc1c3e4ffc2c4e4ffc2c6e4ffc2c6e5ffc2c6e5ffc2c6e5ffc5c6e6ffc6c7e7ffc4c7e8ffc4c8e9ffc4c8e9ffc3c7e8ffc4c6e8ffc7c6eaffc8c6ebffd8cdedffe8d5e8ffe8cfd8ffdbc0bfffcfb3abffc8ada0ffc2a79affbca396ffb69e93ffb49e91ffb59f92ffb49e91ffaf9b8effab998bffa79788ffa29082ffa18f81ffa08e80ffa08e80ffa08f81ff988879ff958576ff978677ff9e8b7dffa99587ffb29c8fffbca497ffc6ab9effcfb3a6ffd2b7aaffd2b6aaffd5b7abffd6b8acffdabeb0ffdbbfb2ffd4bbadffceb5a9ffc7b0a5ffbfaba0ffbba99fffb7a69effb4a49cffab9c94ffa9988dffa8978bffa7968affa59588ffa49387ffa59286ffa28e82ffa08c80ffa28d80ffa18e81ffa49284ffac9484ffb49787ffbd9c8cffc4a193ffcaa699ffcca99cffcfad9fffd0b1a1ffcfb0a0ffc4a897ffb39a89ffa48e7fff928177ff82756eff7b6f69ff756a67ff6e6562ff6a6161ff635e5fff645f5fff645e5cff67605eff655f5dff655f5dff66605eff6d6664ff716b68ff726c69ff726c69ff726b69ff736d6aff7e7775ff88827fff87817eff867f7dff756f6cff706864ff6c615cff74655fff7d6d66ff84706cffa28c8dffcfb9bcffdecbccffe2d3d5ffe8dadcffe9dcddffeadeddffbcbfe4ffbcbfe4ffbcbfe5ffbcbfe5ffbcbfe5ffbdc0e6ffbec0e6ffc1c1e6ffc1c1e5ffc2c2e6ffc3c3e6ffc3c3e6ffc4c4e9ffc3c4e9ffc3c4e9ffc3c4e9ffc3c4e9ffc5c4e8ffc4c5e8ffc3c6eaffc3c6eaffc2c5e9ffc2c5eaffc3c5ecffc4c6edffc6c6eeffcec9efffddd1f1ffe8d5eaffe5ced4ffd9c1b8ffd0b5a9ffc9ae9fffc2a799ffbaa195ffb59d91ffb69f92ffb49d91ffae9a8cffaa988affa99889ffa29083ffa18e82ff9f8c80ff9f8c80ff9f8c80ff99887cff978677ff9c8a7cffa69083ffae988bffb69e92ffbda396ffc0a597ffcaaea1ffceb2a5ffd0b4a7ffd8baadffd9bbaeffd6baadffd6bcafffd2b8acffcab2a7ffc4aca2ffbea89effb9a59cffb6a49dffb2a299ffac9b93ffac9b92ffac9c91ffaa998effa9978cffa9968affa8968affa69385ffa39082ffa08c7eff9c887cff968277ff947f72ff9d8577ffa68b7dffad9082ffb39587ffb99b8dffc2a497ffc6a99bffc6aa9bffc1a696ffb69c8bffa99183ff98867eff837670ff7a6e69ff726865ff6e6562ff6b6160ff655d5eff635c5cff645e5cff655f5dff645e5cff635d5aff66605eff6b6562ff716a68ff726c69ff726c69ff716b68ff736d6aff7f7876ff8a8381ff8c8683ff87807dff776d69ff726662ff73645dff7e6b63ff86736bff9a847fffcfb8b6ffe7d0cdffefd8d6fff1dedafff5e2dcfff4e1dafff2e1d6ffbcbfe5ffbcbfe6ffbcbfe7ffbcbfe7ffbdc0e8ffbdc0e8ffc0c0e9ffc3c1e8ffc4c2e9ffc4c2e9ffc6c4ebffc6c4ebffc7c5edffc5c5eeffc3c3edffc3c3edffc3c3edffc5c3eaffc3c4eaffc2c6edffc1c5ecffbfc4ebffc2c6edffc2c6eeffc4c7efffc5c8f0ffcac9f2ffd2cbf1ffded1efffe9d8e6ffebd7d2ffdcc5baffccb3a6ffc8aea0ffc0a699ffbaa294ffb9a194ffb59e92ffb29d91ffac9a8dffaa988bffa39286ffa28f84ff9f8c80ff9d8a7eff9b897dff978579ff99887bffa08c7effa89285ffb59e91ffb9a295ffbda395ffbea293ffc5a99bffcbafa2ffd1b6a8ffd9bbaeffdabcafffd5b8abffd3b9abffd0b6aaffc8b1a5ffc4aca2ffbfa9a0ffbba59effb6a19affb09e97ffaa9991ffad9b93ffac9d94ffaa9991ffab988dffac998dffaa978cffa79487ffa39183ffa18f80ff9b897bff968277ff907b70ff8d7a6cff917d6fff967e70ff9c8274ffa18779ffae9487ffb59b8dffb69e8fffbaa291ffb29a8affa58e82ff8f7f78ff7f746eff796e69ff716765ff6c6361ff6a605fff675b5bff645a5aff635c5aff625b59ff625c59ff645e5bff68615fff6f6866ff716b68ff716a68ff716a68ff706967ff726c6aff7f7876ff8a8381ff928b89ff7f7672ff756963ff7a6963ff806c64ff887167ff9f887effd3bdb3fff2dcd2fffce7dafffce7dafffbe9d8fffdead7fffeebd7ffffedd7ffbfc1e7ffbfc1e8ffbebfe8ffbebfe8ffbfc1e9ffbfc1e9ffc1c1eaffc5c3eaffc6c4ecffc5c3ebffc7c5edffc7c5edffc7c5edffc6c5efffc5c4eeffc4c3edffc4c3edffc5c3ebffc4c4ebffc4c5edffc2c4ecffc2c4edffc3c5eeffc3c5eeffc5c6efffc6c6efffc7c7f0ffccc8f0ffd5ccf0ffe0d5ebffe8d9e1ffe9d5d5ffd7bfbaffcfb6adffc7ada2ffc2a79affc0a699ffbaa195ffb59d93ffaf9a8fffac998dffa49487ffa39386ff9e8e82ff9b8a7eff98877bff978478ff988577ff9f8b7bffa79282ffb8a192ffbea598ffbda293ffc0a394ffc3a797ffc9ac9dffceb1a4ffd7b9abffdabdadffd4b8a9ffceb5a4ffcab2a3ffc5aea1ffc2aba0ffbfa79effbca39dffb69f99ffb09b93ffab968fffad9790ffad9a91ffaa978fffac978dffab968cffa8958affa59287ffa18e83ff9f8c81ff9b897eff97837bff8e7971ff867469ff857266ff897165ff8f756aff91776cff978076ff9e887cffa79284ffae988affa99387ff9e897fff8a7d76ff7e746eff776c68ff716765ff6c6361ff695e5dff675959ff645a59ff625b59ff615a58ff605a58ff645e5bff696260ff6c6664ff706967ff706967ff706967ff706967ff726c6aff7f7876ff8d8683ff958e8aff7d726fff7b6c68ff827069ff857269ff957e73ffdac2b7fff3dcd1fffae7d7fffcebd5fffbebd4fffaead3fffcebd2fffdedd1ffffeed0ffc3c2e9ffc1c1e9ffc2c3eaffc2c3eaffc2c3eaffc2c3eaffc3c4ebffc7c4ecffc9c5edffc9c5edffcac6eeffcac6eeffcac6eeffc9c5edffc9c5edffc7c4ecffc7c3edffc8c3efffc6c4eeffc5c5edffc4c5edffc4c5eeffc6c6efffc5c5eeffc5c5eeffc6c6efffc8c7f0ffcac7f0ffcfcaeeffd5ceebffd8ceebffe3d4e7ffe8d4dfffdec6c9ffcfb3aeffc6a99effc2a799ffbca395ffb9a096ffb19a8fffac968cffa9968cffa8958cffa39288ff9e8c82ff9b887eff99847aff9c8578ff9e8878ffad9586ffbea495ffbfa392ffbea293ffbfa394ffc6a998ffccaea0ffd0b3a5ffd9bbacffd9bdadffd4baaaffccb3a3ffc8b0a1ffc2ab9effc0a79dffbfa49bffbb9f97ffb59c94ffaf9890ffab948cffaa928affac958dffa9938affa69089ffa58f88ffa38e87ffa08c85ff9f8c84ff9d8a82ff9a867fff96837cff92807aff8f7e75ff948078ff947d73ff927870ff8d746bff856f67ff8b776eff927e74ff98857aff97847aff938079ff877972ff7f726cff786b67ff726561ff6c5f5dff6a5d5cff695b5bff675c5bff645c5aff605957ff615a58ff645e5cff68615fff6c6563ff6f6866ff706967ff706967ff706967ff77706eff8b837fff99918bff968b84ff81736cff84716aff8d786fffab9589ffcdb6aafff2dccffff9e7d5fffbead4fffcedd3fffbeed1fffbeed1fffcedd2fffcedd1fffdedd0ffc9c4eeffc8c5eeffc8c5eeffc8c5eeffc8c5eeffc8c5eeffc9c6efffcbc7f1ffccc8f1ffccc8f1ffccc8f1ffccc8f1ffcdc8f2ffcbc7f1ffcac6f0ffcac6f0ffcac5f0ffc9c4f3ffc9c5f2ffc8c6f2ffc6c6efffc6c6efffc7c7f0ffc6c6efffc7c7f0ffc6c6efffc6c6efffc8c6f1ffc9c8f0ffd1cbf1ffd3caf3ffdacdf2ffe7d7f4ffefd9edffe2c8cbffd1b5acffc9ac9effc1a697ffbea396ffb89e92ffaf988bffac978dffa8958effa3928affa08c85ff9c887fff9a8478ff998274ff9a8374ffa18a7bffba9f90ffc6a999ffbfa392ffc0a595ffc7aa99ffceb0a1ffd0b2a3ffd9bbabffdbbfaeffd7bcaaffccb4a2ffc5ae9fffbfa99bffbea59bffbba198ffb79c93ffb29991ffac948cffa89088ffa68f87ffa78f87ffa38e86ff9f8b84ff9c8982ff9c8982ff9c8881ff9c8981ff98857eff96837cff95837cff90817aff91817bff97837dff98807aff957a75ff8b726bff826f67ff7e6d65ff817068ff84756cff8a7b73ff8b7c74ff897b73ff85776eff7e6f69ff72635dff6e5f5bff6d5d5cff6c5f5eff6a5f5eff655c5aff5e5855ff5e5856ff645e5cff66605eff6b6462ff6e6765ff706967ff706967ff706967ff78716fff8e8681ffa1988eff8c8276ff86776cff907971ffab9389ffe1cabcfffae4d3fffdecd6fffeedd6fffdedd1fffbeecefffbeecffffbeed0fffbeed0fffceed0fffdedd0ffcfcaf7ffcdcaf7ffcdcbf8ffcdcbf8ffcdcbf8ffcdcbf8ffcdcbf8ffcfcaf8ffcfc9f7ffcfc9f7ffcfc9f7ffcfc9f7ffcfcaf8ffcfc9f7ffcfc9f7ffcdc8f6ffcdc8f7ffccc6f8ffcbc6f7ffcac7f7ffc9c8f7ffc9c8f7ffc9c8f7ffc9c8f7ffc9c8f7ffc9c8f7ffc9c8f7ffcbc8f8ffccc9f8ffd1caf9ffd2caf7ffd6ccf7ffdacdf4ffe2d4f2ffebd7ebffe3cbceffcfb5abffc8ac9effbfa395ffb99f8fffb0998affad988dffaa968fffa5928bffa08c85ff9b867eff988275ff998475ff9c8676ffa18a7bffb19889ffc6ab9affc3a695ffc1a594ffc6a998ffccaf9effd4b7a6ffdcbfadffdfc2b0ffdabfa9ffd0b7a4ffc9b09fffc0aa9bffbaa398ffb89f95ffb39a91ffad968effa8918affa38c85ffa08b84ffa08b84ff9d8982ff988680ff96857fff95837dff94827cff93827bff8f7e78ff8e7c76ff8e7c76ff8d7d77ff8c7d77ff91807aff947e79ff937975ff89716cff816e67ff806f67ff7f6f67ff7f7067ff807269ff85766dff887970ff877870ff82736cff786964ff71615dff6a5a59ff6a5c5cff685c5cff635a58ff5b5452ff5d5654ff635d5bff67605eff6b6462ff6e6765ff6f6864ff6f6866ff706a67ff78726fff908781ffa0968aff8b8172ff8a7a6dffaf998dffdcc7b6fff6e3cefffcebd0fffdeecffffdeed0fffceecffffbeecefffbeecffffbeed0fffbeed0fffceed0fffdedd0ffd3cef9ffd4cff7ffd4cff6ffd4cff6ffd4cff6ffd4cff6ffd4cff6ffd2cef6ffd1cdf5ffcfcbf3ffd0cbf4ffd0ccf4ffd1cdf6ffd1cdf5ffd0ccf4ffd0ccf4ffcfcbf4ffcfcaf5ffcecaf6ffcdcaf7ffcdc8f7ffcdc8f7ffcec8f8ffcdc8f7ffcec9f8ffcdc8f7ffcdc8f7ffcdc8f7ffcfcaf8ffd0caf6ffd0cbf6ffd2caf6ffd5cbf4ffd8cef2ffe1d3f1ffead7e9ffdfc8c9ffd7bdb5ffc4a79affbda291ffb49c8cffb09a8effae978fffa8938affa28d84ff9e877eff998376ff998575ff9d8879ffa08c7bffa99180ffb89e8cffc6a997ffc9ac9bffc8ab99ffd0b3a2ffd5b8a6ffddc0afffe1c4b1ffd9beaaffd0b7a4ffc7b09effbeaa9affb7a294ffb39c91ffae968dffa8928affa38d87ff9e8882ff9a8780ff98867fff95847dff90817bff8f807aff8d7d77ff8b7b75ff897a74ff867670ff84746eff83746eff7d6f69ff7c6f68ff84746eff86726dff886f6cff826b67ff806e66ff7c6d65ff796a61ff7a6b62ff7a6b62ff7f7068ff84736dff84746dff83746eff7f6f6cff746461ff695a5aff665858ff665a59ff655a59ff5d5452ff5a5251ff645d5bff68605fff6c6664ff6f6865ff6f6964ff6f6864ff716965ff79716dff91877eff9c9181ff8c816effa49483ffe9d3c3fffde9d2fffdedd1fffdefd1fffceed0fffbeecefffbeecffffbeed0fffbeed0fffbeed0fffbeed0fffceed0fffdedcfffd8d5f7ffd9d4f5ffd9d3f4ffd9d3f4ffd9d3f4ffd9d3f4ffd7d2f3ffd5d1f2ffd5d1f2ffd4d1f1ffd5d1f2ffd6d3f3ffdcd9f9ffd7d4f4ffd7d4f4ffd6d3f3ffd3d0f2ffd2cff4ffd1cef3ffd0cef4ffd1cdf4ffd0ccf3ffd1cdf4ffd0ccf3ffd1cdf3ffd1cdf4ffd1cdf4ffd1cdf4ffd1cdf4ffd1cdf4ffd4cef5ffd6cff6ffd4cdf2ffdad2f4ffe2d9f8ffe8dcf3ffeddbe8ffedd6d8ffdec6bdffc6ae9fffbca493ffb79f91ffb39b90ffad948cffa58d82ff9f867bff9b8477ff998574ff9a8775ffa08b7affa78f7fffb29887ffc4a795ffcdb09dffcbae9bffcfb2a0ffd6b9a8ffdec1afffe2c5b1ffdabfabffd2b8a5ffc5af9dffbda999ffb5a193ffaf9a8fffac958cffa69189ffa18c85ff9c8781ff98867eff95847cff92827aff8e7f78ff8c7d77ff8b7c76ff887972ff877871ff83746eff81726bff7e6f69ff756660ff5d4f48ff594944ff624e4aff68514dff7a6561ff796961ff7e6f67ff786a61ff7c6e65ff7d6f66ff81726aff86756fff81706bff867571ff8a7a78ff7b6b6aff706260ff6a5c5cff6e6060ff6c6060ff615656ff5e5452ff675f5dff696260ff6d6664ff6f6865ff6f6964ff6f6864ff726964ff7a716bff90867bff988b79ffa2957effdacab4fffae5d0fffeecd1fffceed0fffbeed0fffceed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffceed0fffdedceffdcd9f4ffddd9f4ffddd9f4ffddd9f4ffddd9f4ffdedaf5ffe0dcf8ffdddaf7ffdedcf8ffdfddf9ffe0defbffe3e0fdffe3e0fdffe0defbffe0defaffdfddf9ffdfddfaffdddafaffdad9f9ffd9d8f9ffd9d6f8ffd8d5f7ffd9d6f8ffd8d5f7ffd8d5f7ffd9d6f8ffd8d5f7ffd9d6f7ffdad6f7ffddd6f6ffe1d9f8ffe3dbf7ffe3dbf6ffe6ddf7ffe8def5ffeae0f3ffede2edfff2e2e6fff2e1dcffdfcabeffcab5a3ffbfa796ffb79e8fffb1988bffab9285ffa38c7eff9d8879ff9a8676ff988474ff9c8576ffa38b7cffb4998bffc2a594ffccaf9cffccaf9bffceb19fffd5b8a6ffdec1aeffe2c5b1ffddc3aeffd6bdaaffcab2a1ffbfaa9bffb49f94ffac9a90ffa5948cffa29188ff9d8d86ff9b8983ff968780ff91827cff8e7e78ff8b7c76ff8c7d77ff8b7e77ff8b7e77ff887b74ff877973ff857870ff877870ff81706aff82716aff8b7871ff8c7672ff8a726fff947d7aff938079ff816f67ff78665fff705f57ff6d5d55ff6e5d55ff64524cff6e5c57ff71605dff958583ff8f7f7dff7b6c6aff6e615fff6c615fff6f6564ff695f5eff625958ff67605eff6a6461ff6e6765ff6f6865ff6f6964ff6f6863ff746a64ff7c726aff908578ffa0927dffdaccb4fff6e7ccfffcecd0fffdefd0fffdefd1fffbeed0fffbeed0fffaefd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffceed0fffdedceffe8ecfcffe8e9fdffe7e7fdffe7e7fdffe7e7fdffe7e8fdffe7e7ffffe4e3fcffe5e3fcffe5e3fcffe5e3fcffe4e2fbffe4e2fbffe4e2fbffe4e1fbffe3e1faffe3e0fbffe4e1fdffe3e0fcffe2dffbffe2dffbffe1defaffe0defbffe0ddfbffdfdcfaffe0ddfbffe1dcf8ffe2ddf8ffe3ddf6ffe6def4ffe8def3ffeadff3ffebe1f2ffece2f1ffede3effff1e7ecfff4e9e6fff8ebe4fff9eadffff6e9d8ffe7d9c4ffc3af99ffb7a08dffb69c8bffb3988affaf9486ffa28b7bff9a8575ff958171ff988172ff9d8778ffb2998affc1a495ffc6a797ffcbac99ffd1b29fffd5b8a4ffdcbfadffe3c6b5ffe1c4b3ffdabdaeffcfb5a7ffc1aa9fffb5a096ffaa9790ff9e8f86ff9c8d85ff978a82ff968781ff93847eff90817aff8b7c75ff8a7b75ff8d7f78ff8f837cff8e837cff8f857dff91877eff93867cff9b8a82ff9e8b83ffa18d85ffaf9892ffa9908bffac918dffac918cffb29a94ffad958fffa9918bffa58e88ffa18b85ff9a857fff927e79ff84716eff73625fff60514fff978785ff80716fff716462ff6c615fff6f6563ff746b6aff6e6564ff6c6663ff6c6664ff6e6765ff6e6764ff6f6964ff716964ff766c66ff80756cff978b7cfff3e7d0fffcefd3fffbeed0fffdefd1fffbeed0fffaefd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0ffebeefbffeaebfbffe9e9fbffe9e9fbffe9e9fbffe9e9fbffe9e9fdffe8e6fbffe7e4fcffe6e4fcffe6e3fbffe6e3fbffe6e3fbffe6e3fbffe5e3fbffe5e1f9ffe4e1f9ffe5e2faffe5e3faffe5e2f9ffe4e1f9ffe4e1f9ffe4e1f9ffe5e1f9ffe4e1fbffe4e1faffe5e1f8ffe7e1f6ffe9e1f3ffeee3ecfff4e8e9fff8ebe6fff8ebe7fff8ede5fff9ede3fffaeedefffceedafffdefdbfffef0dcfffbf1ddfff7edd8ffeadbc6ffcebaa7ffc3aa99ffbfa292ffba9d8cffaa9281ff9a8675ff948070ff957e6fff988172ffa88e80ffbda193ffc4a796ffcaab98ffd2b39fffdbbeaaffe1c4b1ffe4c7b6ffe0c2b4ffdbbdb2ffd3b8adffc5aba3ffb7a098ffac9891ff9e8f87ff9a8c84ff968782ff92837fff90817cff8e7f7aff897c78ff897c78ff8d7f7aff91847dff91867eff938880ff998d84ff9b8c82ffa6938affb19c92ffb79f95ffbaa197ffbda29affc3a69effbfa19affc3a69fffbda198ffb99a93ffb59891ffac928cffa58c87ff9b8581ff94807cff82706bff6f5f59ff9a8b87ff887977ff766967ff706461ff6f6360ff7e7473ff7b7371ff6e6866ff6b6562ff6c6664ff6e6765ff6e6764ff746a67ff7a6f69ff867a6effc9bca9fff9eed4fff9f1cffff9f1cffffbf0d1fffaefd0fffaefd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0ffeeeff9ffeeecfaffedebfbffedebfbffedebfbffedebfbffedeafbffede6faffece4faffece4faffece4f9ffebe3f8ffe9e2f7ffe7e1f6ffe7e1f6ffe6e0f5ffe7e1f5ffe8e2f7ffe8e2f7ffe8e2f6ffe7e1f5ffe7e1f5ffe7e1f5ffe8e1f5ffe7e1f7ffe7e1f6ffe9e2f4ffeae2f1ffede2effff5e6e4fffbeaddffffecd8fffdebd9fffdecd8fffceed9fffeeed8fffeefd7fffdefd8fffcf0d9fffdf1dcfffdf2defffef1dffffbebd9ffdfc7b6ffceb1a0ffc3a796ffb29a89ffa5927fff9d8a78ff998474ff978373ff9a8372ffa88f7fffbca191ffcaac9affd5b6a2ffdec1adffe2c5b3ffe3c6b5ffdfc1b2ffdabcb1ffd2b6acffc7aca4ffbba29bffb39c95ffa18f87ff978881ff91827cff90817dff91827eff90827eff8c7f7aff8c7f7aff8d7e7aff938680ff968a83ff998d84ffa2948bffaa978effad988fffb49d95ffbba499ffc3a99fffc7aca1ffcfb3a7ffd0b2a6ffd1b4a8ffcfafa4ffc7a79cffc1a198ffba9d94ffb0948effa58c87ff9e8982ff8d7b74ff7b6963ff968581ff8d7d7bff7e706eff786b68ff726663ff7e7370ff877d7cff716a68ff6c6664ff6e6765ff6e6765ff6f6665ff776c6aff82766fffa09386fff6ebd6fffaf0d5fffaf1d0fffaf1d0fffbf0d1fffaefd0fffaefd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fff4ecf3fff3ecf2fff2ecf3fff2ecf3fff2ecf3fff2ecf3fff3ebf3fff3e7f2fff4e6f2fff3e4f0fff3e4f0fff1e4effff1e4f1ffefe3f2ffefe3f4ffeee4efffefe6edfff1e7effff2e7eefff2e8edfff1e7ecfff1e7ecfff0e6edfff1e6edfff0e6ebffefe6eafff3e9e7fff5ebe3fff8eae0fffdebdafffeebd7fffeecd5fffbebd5fffaecd5fffcecd6fffdeed8fffeefd9fffceed6fffbefd7fffcf0d8fffdf1dafffff3e0fffff2e0fffeebd9ffead2c1ffd0b8a7ffbfa896ffb5a08dffaa9583ffa28c7bff9c8876ff968272ff9c8576ffaa9182ffc7ac9affd1b2a0ffdcbda9ffe1c2afffe3c6b4ffe1c3b5ffdabcb0ffd2b6abffcaaea6ffbfa59effb9a19bffa7948dff9e8d87ff978882ff92837fff91837fff918381ff8d807cff8e817dff8f807cff948580ff988b83ff9d8d85ffa6948affab958bffb09890ffb79f97ffbca49affc3a99effc8aca0ffcfb2a4ffd8baabffdbbbadffdbbbaeffd6b6aaffd1b0a4ffcaaba1ffbea299ffb29891ffa58e86ff9a827cff84716bff6d5a57ffab9894ff857472ff7d6c6bff7c6e6cff837573ff8d817fff786f6eff6d6664ff6e6765ff6e6765ff6f6665ff776e6aff847970ffd4c8b9fff6ecd5fffbf0d4fffcf1d3fffcf1d3fffcf1d3fffbf0d1fffbf0d1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffaecddfff9ecdefff9eddefff9eddefff9eddefff9eddefffaecdefffce9dcfffde9dcfffce7dbfffce7dbfffde9dcfffce9dffffdeae2fffcebe3fffdece0fffdedddfffdeddefffdedddfffdeddcfffdeddcfffdeddcfffdedddfffeecddfffdedddfffdeddcfffdeed9fffdecd4ffffebd3fffeebd6ffffebd6fffdecd6fffdecd6fffdecd7fffdecd6fffdecd7fffbebd5fffaecd3fffbedd5fffdefd7fffef1d8fffff2ddfffff3dffffff1ddfffff2e0fff1ddccffd4c0acffc3b099ffb7a28effb09886ffa79180ffa08a7bff9d8777ff9c8675ffbb9f8fffd3b5a3ffdcbda8ffdfc0adffe3c6b4ffe4c6b7ffdabeb0ffd4b8acffccb1a9ffc3a9a2ffbea49fffaf9993ffa6948fff9b8d86ff928580ff8f827eff8f827fff8f827eff91837fff93847fff988982ff998981ff9d8a81ffa38e85ffa48e85ffaa9388ffb89f94ffbca297ffc3a89dffcbb0a3ffd4b8a9ffddc0b1ffe1c2b3ffe6c6b8ffe2c2b5ffdfbfb1ffdabaaeffcdb0a6ffc0a49bffaf948dffb0958eff8d736eff69514cff705752ff6d5552ff6d5957ff72605eff837270ff918281ff918686ff6f6665ff706866ff6f6866ff6f6764ff776c67ff7e7267ffc4b9a7fff9eed6fffaf0d4fffdf2d4fffdf2d4fffdf2d4fffcf1d3fffcf1d3fffdefd1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffae6d3fffae7d5fffae8d6fffae8d6fffbe9d8fffbe9d8fffbe9d8fffce6d6fffde6d6fffce5d5fffce5d5fffce5d5fffde6d8ffffe7dbffffe7dcffffe9d9ffffead7ffffead8ffffebd8fffeebd7ffffebd6fffeecd6fffdecd6fffdebd7fffcecd7fffcebd5fffbebd5fffbebd5fffdecd5fffcead7fffbecd5fffdecd6fffdecd7fffcecd8fffdecd6fffdecd6fffdecd5fffdecd5fffcecd6fffcedd6fffeefd9fffef0dcfffdf2defffef3e1fffef4e1fffff1e0fffdecdbfff1dfccffd3bdacffc2a896ffba9f8fffb29789ffa88e7fffa58d7bffb19684ffc7a996ffdec0abffdec1acffe1c4b1ffe0c2b3ffdabcaeffd5b8acffcfb3a8ffc8ada4ffc4aaa3ffb9a19bffae9a95ffa0908aff93867fff93867fff968982ff998a82ff9b8b83ff9d8c84ff9e8d85ff9d8c83ff9e8c82ff9f8d83ffa08d83ffa48f84ffb19a8effb79e92ffbea496ffc7ac9effceb4a4ffd9bdacffddbdacffe6c5b5ffe8c7b7ffe6c6b5ffe5c4b5ffdcbeafffd8baadffcbaba1ffb5958cff735149ff82635bff876963ff624a44ff5b4642ff5b4845ff82716effa39592ff766966ff706561ff726965ff716967ff726a65ff786e65ff928676fff3e7d0fffaeed4fffbefd4fffdf1d3fffcf1d3fffcf1d3fffcf1d3fffcf1d3fffdefd1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffde9d2fffce7d3fffce7d3fffce7d3fffde8d5fffde8d5fffde8d5fffee8d6fffde8d6fffde8d6fffce7d5fffce7d5fffce7d5fffee8d6fffee8d6fffee8d6fffee8d6ffffe9d7ffffead5ffffebd5ffffebd5ffffebd4ffffebd5fffdecd6fffcebd5fffcebd5fffdecd5fffdecd5fffdecd5fffdecd5fffeecd4fffdecd5fffcecd7fffaebd9fffbebd8fffcecd8fffcecd8fffdebd8fffdecd7fffcecd6fffdeed8fffdefdbfffdf2dffffdf2e1fffcf2e3fffcf2e3fffff2e4fffff1e3fffeeddfffe4cebeffd3b9abffc6aa9bffba9c8dffb69a8affb49886ffbb9e8bffccaf9bffe4c4b1ffe8c9b6ffe1c1b1ffdbbbacffd8baacffd5b8abffcfb2a8ffc7aca4ffbda49fffb09d96ffa5958fff9c8d87ff9c8d86ff9d8e86ffa08f86ffa29188ffa49489ffa49489ffa39288ffa39288ffa39288ffa39087ffa38d83ffa68f83ffa99186ffae968affb49c8fffbca496ffc3a898ffd3b3a1ffe2c1aeffebc9b6ffebcab5ffeecdb7ffe0bfa9ffc8a390ff9a7163ff81574cff9e766affb99489ff907268ff735b54ff624f49ff75655fff90807dff8d807dff6c615eff685d5aff6b5f5cff6e6360ff726963ff7b7066ffa79887fff9e9d4fff9ead1fffdecd2fffcedd2fffbefd1fffbf0d2fffbf0d1fffbf0d1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffde7d1fffce6d1fffce6d2fffce6d2fffde7d3fffde7d3fffce7d3fffde8d6fffce8d6fffce8d6fffbe7d5fffbe7d5fffce7d5fffde6d5fffde6d5fffde6d5fffde6d5fffde6d4fffee9d4fffdead3fffdead2fffdead2fffdead3ffffecd4fffbead3fffcebd4fffcebd3fffcebd3fffbecd3fffcebd3ffffecd2fffeecd3fffdecd5fffdecd8fffdecd8fffdecd7fffdecd8fffdecd7fffcebd4fffaecd4fffbecd6fffaedd9fffcf0defffdf1e2fffcf1e3fffbf2e3fffdf3e4fffff2e4fffff1e4fffff0e0fff7e2d5ffe6cbbeffd1b4a5ffc0a293ffba9d8dffb79a89ffbda08effd2b3a1ffeccdbaffe6c6b5ffe0c0afffdabbabffd9bbabffd1b4a8ffc7aea5ffbea69fffb39f98ffab9a92ffa4938bffa5948cffa6968cffa7978bffab9a8dffac9b8fffac9b8fffab9a8effab9a8dffab9a8dffa8968affa38d82ff9e877dff9f897effa28b81ffa89086ffad968affb49a8bffc3a493ffd7b6a0ffe8c7b0ffedcdb2fff7d7bafff0cdb0ff9d735dff805141ffa77869ffcea394ffb69183ff9b7d72ff7f6860ff7a6860ff82726cffa89c97ff716662ff5d524fff5b4f4cff5d4f4dff695b57ff726560ff7c6c63ffaf9d8cfffbe8d2fffce9d2fffdebd1fffcecd1fffceed0fffbf0d1fffbf0d1fffbf0d1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbe8d0fffae7d1fffce6d1fffce6d1fffde7d2fffde7d2fffce7d3fffee8d6fffde8d6fffde8d6fffce7d5fffce7d5fffce7d5fffce7d5fffce7d5fffce7d5fffce7d5fffce7d4fffde8d3fffcead2fffbe9d2fffbe8d1fffce9d2fffdebd2fffbead1fffbead2fffaecd2fffaecd3fffaecd3fffbecd3fffcebd1fffdebd1ffffecd2ffffebd4ffffebd4fffeebd4fffdecd4fffcebd4fffcebd5fff9ead6fff9e9d8fffaecd9fffbf0defffcf0e1fffcf1e4fffbf2e5fffcf3e6fffef2e6fffef3e4fffff2e3ffffefe0fffde8dafff3dbceffe1c6b8ffcaad9effbea191ffba9d8effc4a494ffd7b8a6ffe5c5b2ffe4c4b2ffdcbdaaffdbbeacffd3b7aaffccb1a7ffc1a9a1ffb6a098ffb29f96ffaf9c92ffaf9c92ffac9b91ffb09e91ffb2a093ffb4a195ffb4a195ffb2a093ffb2a093ffb2a093ffb29d92ffad948dffa38b83ff9e877eff9a857bff9e877dffa18a80ffa98e82ffb49786ffc5a592ffddbca6ffebcab1fff9d9bdffffdfc5ffdeb7a0ffd1a694ffe7baa8ffd5ac99ffbf9b8cffa28578ff877168ff7f6e66ff7c6d66ff908580ff574c48ff423633ff4e413fff534442ff665551ff72615aff7e6c60ffe6d3c1fffdead4fffce9d1fffdebd1fffdebd0fffcedd0fffbefd1fffbefd1fffbefd1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffaebd0fffbe8d0fffce6d0fffce6d0fffde7d1fffde7d1fffde7d2fffde6d5fffde6d5fffde6d5fffee8d6fffee8d6fffde8d6fffce8d6fffce8d6fffce8d6fffbe7d5fffce7d4fffde9d3fffdead3fffbe8d1fffbe8d1fffbe8d1fffcebd3fffbecd2fffbecd1fffbecd1fffbedd3fffaecd2fffbecd1fffae9cffffcead0fffdebd2fffdecd6fffdecd6fffdecd6fffbedd6fffbedd6fffaedd6fffceed6fffdeed7fffbeed9fffbefdffffcf0e1fffcf1e4fffbf2e7fffcf3e7fffef2e6fffef3e4fffff3e2fffff0e3ffffefe2fffff0e2fffff0e2ffead4c4ffd3b8aaffc5a899ffc4a597ffc9a799ffd7b5a5ffe4c2afffddbea9ffdbbcaaffd4b8aaffcdb2a6ffc2aba0ffbba69bffb8a49bffb7a299ffb5a298ffb4a195ffb5a294ffb7a597ffb8a698ffb8a698ffb7a597ffb7a597ffb7a597ffbba59affbca19bffb29891ffab928affa38c83ffa48b83ffa38a82ffa58980ffac8e80ffbb9c8affcbaa97ffdfbea8ffefceb5fffad9c0fffedcc6ffffdbc6ffecc5b0ffdcb6a1ffbc9988ff9f8174ff897268ff7b6a63ff867872ff766b66ff544946ff594c49ff584a48ff5a4c4bff655552ff726159ff978479fff6e2d2fffbead4fffcebd3fffdedd1fffceccffffdefd1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffcedd2fffdebd3fffde9d2fffde9d2fffde9d2fffde9d2fffde8d4fffde6d5fffde6d5fffde6d5fffee8d6fffee8d6fffde8d6fffce8d6fffce8d6fffce8d6fffbe7d5fffce8d6fffce8d1fffce9d2fffce9d2fffcebd3fffcebd3fffcebd3fffceed3fffcedd3fffcedd3fffdedd2fffbebd0fffbead0fffbe9cffffde9d0fffdebd2fffcebd5fffcebd5fffcedd7fffbeed8fffbefd8fffbefd8fffdeed6fffceed7fffcefdbfffbefdffffcf0e2fffbf0e4fffaf0e6fffbf1e7fffdf1e7fffdf3e5fffef3e3fffef2e2fffff2e3fffff3e5fffff2e4fffff0e2fff8e2d6ffefd5c8ffd2b5a6ffc9aa9cffceaf9fffdfbdacffdebfaaffdcbcabffd5b8a9ffcfb4a6ffc7ada1ffbca79cffbba69bffbaa59bffb7a499ffb7a598ffbaa799ffbeac9effbfad9fffbfad9fffc0ab9dffc1ac9effc2ac9effc4aca1ffcbb0a6ffc0a49bffbc9f98ffb0958effb1968fffac918affa88d84ffa5887cffa78878ffaf8f7dffcbab97ffe2c2adfff1d1bcfff8d8c4fff6d5c0ffe8c6b0ffe1bea8ffc4a392ff9f8375ff826c62ff796760ff8d7f7aff453b36ff564b48ff544744ff3d302eff574a4aff625453ff6a5a54ff9f8e81fff5e4d4fffaead5fffbedd4fffbeed1fffbeed0fffbeed0fffceed0fffceed0fffceed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffef1d6fffeeed6fffcebd3fffcebd3fffcebd3fffcebd3fffcebd4fffde9d6fffde8d5fffde8d5fffde8d5fffde8d5fffde8d5fffcead6fffcead6fffcead6fffbe9d5fffcead6fffcead4fffdebd5fffdecd6fffdecd6fffcecd6fffdedd7fffdeed6fffdeed6fffcedd4fffcedd2fffcecd1fffcead0fffee9d0ffffe8d0fffde9d1fffce9d4fffdecd5fffdeed8fffdefd9fffcefdafffcefdbfffdefdbfffcefdcfffcf0e0fffcf0e3fffdf1e5fffcf1e7fffcf1e7fffcf1e7fffcf0e6fffbf0e4fffcf2e5fffcf0e3fffdf1e5fffef2e5fffdf1e4fffff1e3fffff1e4fffeebdefff4ddcfffdac2b4ffceb3a4ffd4b8a4ffdfc0acffdfc0adffd8bbaaffcfb4a5ffc7aea2ffbea89dffbba69bffb9a59affb5a296ffb7a598ffbdab9cffc0aea0ffc3b1a3ffc6b3a5ffc9b3a4ffc9b1a3ffc9b0a2ffcbb2a4ffcfb3a6ffcaafa3ffc6aaa0ffbea198ffb89d94ffb29991ffaf958effa88e84ffa1847affa18377ffa5887bffbea093ffddc0b2fff0d3c3fff3d5c4fff0cfbdffe6c5b2ffc3a799ffa18b81ff837169ff766560ff867a77ff5b504dff6b605cff685b59ff706261ff605252ff635555ff695b58ff807168ffe7d7c8fffbebd5fffdedd4fffdedd1fffcedd0fffcedd0fffcecd0fffcecd1fffcecd1fffbedd1fffbeed2fffbeed1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffcf2d8fffdf1d8fffcefd6fffcefd6fffbeed5fffaeed4fffbedd4fffdead5fffdead4fffce9d4fffce9d4fffce9d4fffbe9d4fffbebd5fffaecd5fffaecd5fffaecd5fffbecd5fffbedd6fffcedd7fffdeed8fffdeed8fffdeed8fffdeed8fffdeed6fffdeed6fffdeed6fffdefd3fffeeed3fffce9cffffde7cfffffe8d0fffee7cffffde9d2fffdecd4fffeeed8fffeefdafffeefdbfffdefddfffcefdefffcefdffffcf0e3fffcefe5fffdf1e7fffdf1e7fffdf1e7fffdf1e7fffcefe6fffcefe6fffcf0e4fffcf0e4fffdefe4fffef0e5fffcefe5fffef0e6fffef0e5fffef0e4fffeeee1fff9e8d9fff2dfd0ffe2cdb9ffdcc3aeffdcc2adffddc3afffd2b7a7ffc9ada1ffc0a69cffbaa599ffb5a196ffb3a094ffb8a598ffbca99bffc1aea1ffc6b4a6ffccb9abffceb9aaffcdb5a6ffcdb2a3ffd1b6a7ffd4b9a8ffd1b6a6ffceb3a4ffcbafa2ffc1a89cffb9a298ffb39d96ffaa958eff9d8780ff97817aff917b74ffa28b84ffac928bffcbb0a7ffebcfc4fff0d1c4ffefd1c2ffd0b8aeffab9a92ff857670ff766862ff736864ff736865ff786c68ff796b69ff726563ff655856ff665858ff675a5aff685754ffbca7a1fff5e0d3fffce8d5fffdead1fffdead0fffdead0fffcead0fffcead0fffbead0fffbecd1fffbeed2fffbeed2fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffdf3d9fffef1d9fffdf0d7fffdf0d7fffbefd7fffbefd6fffceed6fffeecd6fffdebd5fffdebd5fffdead5fffdead5fffcebd5fffcedd6fffbedd6fffbedd6fffbedd6fffbedd6fffbedd6fffcedd7fffdeed8fffdeed8fffdeed8fffdeed8fffdeed6fffdeed6fffdeed6fffdefd3fffdedd2fffcead0fffee7d0ffffe8d1fffee7d0fffde9d2fffdecd4fffeeed8fffeefdbfffeeedcfffdefddfffcefdffffceee1fffcf0e5fffcefe6fffcefe6fffcefe6fffcefe6fffcefe6fffcefe6fffcefe6fffcf0e5fffcefe6fffdefe6fffef0e7fffdefe6fffdefe6fffef0e8fffdefe6fffceee4fffceee3fffceee1fff8e9d8fff1deccffddc8b5ffdec5b1ffdbbfacffcaad9bffbda192ffb1998cffaf998effb39e94ffb5a199ffbba79fffc1aca3ffc9b3a8ffcdb7abffd0b8aaffcfb6a7ffd2b5a5ffd6bba9ffd8bcaaffdabdadffdabcadffd7bbacffcdb1a5ffbda398ffb49d94ffae9a93ff9f8c85ff96837cff8b7770ff8c7972ff947e78ff917b75ffa18881ffd0b7adffd5bdb2ffbda9a1ff9b8c86ff796c67ff6a5e59ff736864ff887d7aff817371ff837673ff7e706dff756866ff534847ff5a4f50ff5d4b4cff725c5bffd3bbb4fffce5d6fffee6cffffee7cffffee9d0fffce8cffffde9d0fffbead0fffcebd1fffcedd2fffcedd2fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffdefdafffeefdcfffeeedcfffdeedcfffdefdcfffcefdcfffcefdbfffeefdafffdefd9fffdeed8fffcedd6fffcedd6fffbedd6fffaedd6fffaedd6fffceed7fffdeed6fffdeed6fffdeed6fffcefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd3fffbedd3fffbead3fffde9d2fffee8d2fffde7d1fffee8d4fffdecd6fffdeedbfffdefddfffdefddfffbefe0fffbefe2fffbefe2fffbeee4fffbeee5fffbeee5fffbeee5fffbeee5fffbeee5fffbeee7fffcede7fffbeee5fffcede6fffcede6fffdeee7fffcede7fffdeee8fffcede7fffcede7fffcede7fffdeee7fffdefe6fffdefe5fffdeee4fff2e1d2ffdec8b6ffe5ccb9ffd4b7a4ffc2a692ffb39a89ffac9487ffb09992ffb29c95ffb6a29cffbda8a2ffc3aca4ffcbb1a7ffd2b7aaffd6b9a9ffd9b8a5ffdbbaa8ffdbbcabffe2c5b5ffe7c9baffe7c9bcffdbbfb2ffcaafa4ffb9a299ffb19d96ffa28e87ff97837cff8c7972ff86746eff816e6bff867371ff816f69ff8b7870ff948178ff8a7972ff7d6e69ff736762ff5f524fff5e524fff968b89ff3c302fff4d413eff827773ff796d6cff514847ff433a3aff544344ff6b5557ff96807afff0d9cafffbe5cefffde7cffffee9d0fffce8cffffde8cffffce8cffffcead0fffcecd1fffcecd1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0ffffebd9ffffecddfffdebdcfffdebdcfffdeddefffcefdffffcefddfffdf0ddfffcf0d9fffcf0d9fffbefd8fffbefd8fffbefd8fffaeed6fffaeed6fffbefd7fffdeed6fffdeed6fffdeed6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd3fffbedd4fffaead4fffde9d4fffee8d4fffde7d3fffee8d4fffdecd6fffceedcfffcefdefffcefdffffbefe2fffbeee5fffbeee5fffaeee5fffaeee5fffaefe5fffaefe5fffaefe5fffaeee5fffbeee7fffcede7fffbeee7fffcede7fffcede7fffcede8fffbeee9fffbede8fffcede7fffcede7fffcede7fffbece6fffbece6fffaede6fffbeee6fffceee3fffdebdcfff1dbcaffe0c6b3ffd1b5a2ffb89f8dffae978affb19990ffb09a92ffb29e96ffb8a29affc0a79dffc8aca2ffd2b5a9ffd9b9a8ffdbb7a4ffd7b4a2ffd4b5a5ffdbbdb0ffe0c2b6ffe9cbbfffe4c6bbffd3b5abffbda69effb29f98ffa39089ff97837cff8e7b74ff82716bff766665ff6c5c5dff675856ff7b6966ff85746cff8b7c75ff7f746eff726762ff665a56ff5d524fff4b3f3dff1e1311ff3c3231ff605655ff6b605fff4b4040ff42383aff4c3b3eff685254ff755f5affac9787fff6e1cafffce6cefffde7cffffee7cffffee7cffffde7cffffde9d0fffdebd1fffcecd1fffdedd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffde8d7fffde9dbfffce9dbfffbeadbfffbebdefffbeddffffbeedefffef0ddfffff0dbfffef1dbfffcf0dafffdf1dafffdf1dafffbf0d9fffbf0d9fffbf0d8fffdf0d7fffdf0d7fffcefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd6fffbefd3fffcefd5fffbebd5fffde9d4fffde8d4fffee8d4fffee8d4fffdead6fffceddcfffcefdefffcefdffffbefe2fffbeee5fffbeee5fff9efe6fff9efe7fff9efe5fff9efe5fff9efe6fffaeee7fffbeee7fffbeee7fffbeee9fffbeee9fffbeee9fffcede8fffaece7fffaece7fffcede7fffbeee7fffbeee7fffbece5fffbece6fffaede6fffbeee7fffbeee5fffceee3fff8e8dcffefdccfffebd5c6ffd8bfafffc0a898ffb89d8fffb4998cffb49e8fffb39e91ffc0a799ffccad9effd4b5a7ffdbbbaaffdbb8a4ffd2b09dffcbac9effc6a99effc5a89fffc9ada3ffceb2a8ffccb1a8ffbea7a0ffaf9b94ffa4918aff98857eff8e7b74ff77655fff594a48ff4a3b3cff5f4f4eff766662ff84756eff94867fff877b77ff7a6f6cff6d635fff625856ff4c403fff2d2221ff2e2425ff504646ff382c2cff594f4eff2c2022ff48373aff685354ff74605aff8b7667ffdac7b1fffae5cefffde6cffffce5cdfffee7cffffde7cffffde9d0fffdebd1fffcecd1fffdedd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffde5d4fffee5d7fffde6d9fffde8dafffde8ddfffceaddfffdebdefffeeddefffeeeddfffdefddfffdf0ddfffcf1dcfffdf2dcfffbf2d9fffbf2d8fffcf1d8fffbf1d7fffbf1d7fffbefd6fffbefd6fffdf0d7fffcf0d7fffcf0d7fffdf0d7fffcf0d8fffcf0d8fffeefd7fffeefd6ffffeed5fffdebd4fffdead5fffdead5fffde9d4fffde8d4fffdead5fffceddbfffaeedffffaeee0fffaeee3fffaede4fffaede4fff9efe5fff9efe5fff9efe6fffaeee7fffbeee9fffbeee8fffbeee7fffcede7fffcede9fffcede9fffcede9fffbece6fffbece6fffbece6fffaede6fffaede6fffbede6fffaede6fffaede6fffaede6fffbede6fffaede5fffbede4fffaede4fffbebe3fffbe8dffffde7dbfff0d8caffd6bbabffbc9f8effbba292ffb39e8fffc2a998ffcdad9bffd2b2a1ffd7b6a5ffdcb9a7ffd4b39fffcfb3a3ffb79d93ffa58b84ff988079ff9a837bffa68f89ffb8a39cffaa9691ffa28e8aff9a8782ff83706aff65534fff584847ff554747ff6b5c5aff766762ff7e6f69ff938580ff847776ff7c7070ff6f6464ff655b5aff5f5453ff574d4dff544a4dff4e4345ff524747ff433838ff3f3536ff554548ff6c595bff776460ff806d60ffa08d7affebd8c3fffbe5cffffce6cffffce6cefffce6cefffee9d0fffeead1fffeecd2fffdedd0fffbeed0fffbeed1fffbeed2fffbeed2fffbeed1fffbeed0fffee4d4fffde4d6fffde5d8fffde7dafffce7dcfffce9ddfffdeadefffdecdefffdeddefffbeedcfffcefdcfffcf1dcfffcf3ddfffbf4dbfffbf4d9fffaf3d8fff9f2d7fffaf2d7fffaefd5fffcf1d7fffdf2d8fffdf2d8fffdf2d8fffdf1d9fffdf1dafffcf2dafffcf2d9fffbf1d6fffcf1d5fffbeed5fffcebd5fffbecd4fffbead4fffbead4fffbebd5fffbeddafffaeedffff9eee0fff9ede3fff9ede4fff9ede4fff9efe5fff9efe5fff9efe5fffaeee7fffaede9fffaede8fffaeee7fffaeee7fffaede8fffaede9fffaede8fff9ede6fff9ede6fff9ede6fff9ede6fff9ede6fffaede6fff9ede6fff9ede6fff9ede6fffaede6fffaede7fffaece6fff9ede5fffaede6fffaede6fffbece4fffbe8ddfff0d8caffd2b9a8ffc7af9effbca695ffc6ae9cffd1b39effdab9a5ffddbba8ffdab9a4ffcbab97ffbfa494ff9f897fff98827cff86726dff7f6c67ff766560ff7e6e68ff80706aff8c7b76ff6e5e58ff73625cff857471ff796a6aff6a5d5dff685a58ff716360ff736763ff776a68ff74686aff776b6eff6b6062ff665d5eff635a5bff62595aff615859ff5d5354ff5f5455ff5b5051ff5c5354ff615657ff6e6063ff786a67ff807269ff8b7d70ffd9c8b8fffae6d2fffbe6d0fffce6cefffce6cefffee9d0ffffead1fffeecd2fffdedd0fffbeed0fffbeed1fffbeed2fffbeed2fffbeed2fffbeed0fffde3d3fffce3d5fffee4d8fffee5d9fffde7dcfffce7dcfffde9ddfffbeadefffbebdefffaecdcfffbeeddfffbf0dcfffbf1dcfffbf4dcfffbf4dbfffbf4dbfffaf3dafffbf3dafffcf0d8fffdf1dafffef2dbfffef2dbfffef2dbfffef2dcfffdf2ddfffdf3ddfffdf3dbfffcf2d7fffcf3d6fffcf0d6fffceed6fffcedd4fffbead4fffcebd5fffdecd6fffbeddbfffaeedffff9eee0fff9ede3fff9ede4fff9ede4fff7ece4fff7ede4fff7ece6fff8ebe7fff8ebe8fff8ebe7fff9ede7fff9ede6fff9ece7fff9ece8fff9ece7fff9ede6fff8ece4fff8ece4fff8ece4fff8ece4fff9ede6fff8ece5fff8ece4fff8ece4fff9ede6fff9ece8fff8ebe6fff8ece4fff8ece4fff8ebe6fff9ebe6fffaece6fffdeae0fffbe8dbffedd6c7ffdac2b0ffd3b9a6ffd8bba5ffe2c1aaffdbbba4ffd6b69fffbf9e8affb09788ff84716aff7d6b66ff7b6a66ff70605cff6d5e59ff6a5c58ff726560ff7f716cff564843ff473a35ff443734ff493b3bff564a49ff5e5150ff6b605dff6b605dff6d6262ff6d6165ff6c6064ff695e60ff736a6bff7a7071ff756b6cff6d6465ff665c5dff645b5cff645b5cff665c5dff675e5fff6f6566ff7a6f6dff81756fff8b7e75ffd2c3b6fffae7d3fffbe6d1fffce6cefffce6cefffee9d0ffffead1fffeecd2fffdedd0fffbeed0fffbeed1fffbeed2fffbeed2fffbeed2fffbeed0fffee1d2fffde1d4fffee2d7fffde4d8fffce6dafffae7dbfffbe8dcfffce9defffce9defffcebddfffbecdcfffbeedcfffcefddfffcf1defffcf1defffcf1defffdf2e0fffdf2e0fffdf2dffffdf2defffcf1ddfffcf1ddfffcf1ddfffcf1dffffaf1dffffbf3e1fffaf2defffcf3dcfffcf3dafffbf0d7fffbefd6fffcecd5fffbebd5fffcedd5fffdecd7fffbecddfff9ece2fff9ece3fff9ebe6fff9ebe7fff9ebe7fff8ebe9fff8ebe9fff8ebe9fff8ebe9fff8ebe9fff8ebe9fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff9ece8fff8ebe7fff8ebe7fff8ebe7fff9ece8fff9ece8fff8ebe7fff8ebe7fff9ece8fff8ebe7fff7eae5fff7eae5fff9ebe5fffcece3fffceadffff1daccffe2cab8ffdbc0acffdfc0aaffd9baa4ffd3b59fffbf9f8bff9c8679ff73635eff554642ff463733ff5b4b46ff5b4c47ff5a4c48ff645651ff625450ff5a4c48ff544742ff554845ff665856ff6b5e5cff675b58ff6e6460ff6c635fff6c6262ff6d6264ff6c6064ff6a5f62ff6d6364ff7d7474ff7c7373ff786f70ff72696aff706768ff6e6566ff6e6565ff6f6666ff766a69ff7b706cff81766dff8b7f73ffd2c3b4fffbe7d2fffce6d0fffde6cefffce6cefffde9d0fffdebd1fffdecd2fffdedd0fffbeed0fffaefd1fffaeed2fffbeed2fffdedd2fffdedd0fffee1d2fffde1d4fffee2d6fffee3d8fffce4d9fffbe6dbfffce7dcfffbe8defffbe8defffbeadefffbebdefffaecdcfffbeedefffbefdffffbefdffffcf1e0fffdf2e1fffdf2e1fffef2e4fffdf0e6fff9ede4fff8ece3fff8ece3fff8ece3fff6ece4fff7ece5fff8eee5fff8efe0fffaf1dffffbf1defffcf1ddfffcf0d8fffbefd7fffbefd6fffeefd7fffcecdcfff9eae3fff9eae3fff9e9e6fff9e9e7fff9e9e7fff8eaeafff8eaebfff8eaebfff8eaebfff8eaebfff8ebe9fff8ebe8fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff8ebe7fff7eae5fff7eae5fff7eae5fff7eae5fff8ebe7fff7eae6fff7eae5fff7eae5fff8ebe7fff8ebe9fff8e9e7fff7eae5fff8ebe7fff8ebe8fff8e9e7fff9e9e7fffaeae6fffaebe4fffcebe4fffce8e0fffbe6daffedd5c6ffdec3afffdabca8ffd5b8a3ffd0b19dffb69e91ff95847fff8f827dff907f7aff96857fff998b83ff9c8d87ff9c8d87ff958580ff8e7f79ff8a7b76ff887973ff7e6e68ff7c6d68ff7a6e6aff7a6f6cff706864ff6d6463ff6c6263ff6a6061ff685f5eff69605fff837a79ff867d7bff847b7aff7e7574ff7b7271ff766d6dff756c6aff766b68ff7b6f6aff7d716aff827669ff8c7f6effd3c3b1fffbe7d1fffce6cffffde6cefffce6cefffde9d0fffdebd1fffdecd2fffdedd0fffbeed0fffaefd1fffaeed2fffbeed2fffdedd2fffdedd0fffddfd0fffde1d2fffee2d4fffee2d4fffee3d7fffce5d8fffde5dafffce5dcfffee6defffde7ddfffde8defffdeadffffcebdffffbede0fffaede0fffaeee1fffbefe3fffbefe4fff9ece5fff5eae6fff4e9e6fff4e8e6fff4e8e6fff4e8e6fff4e8e6fff4e8e6fff5eae6fff6ebe6fff7ede7fff8ede4fffbefe5fffcf0e3fffcf0e3fffbefe0fffceedffff9ece1fff7e8e3fff7e8e5fff7e8e7fff7e7e8fff6e6e7fff6e8e8fff7e9e9fff7e9e9fff7e9e9fff7e9e9fff7e9e9fff7eae7fff7eae7fff7eae7fff7eae7fff7eae7fff7eae7fff6e8e7fff6e8e7fff6e8e7fff6e8e7fff6e8e7fff5e9e6fff6e8e7fff6e8e7fff6e8e7fff8e9e7fff6e7e5fff6e8e7fff6e9e7fff7e8e7fff9e8e7fff8e8e6fff9e9e5fffae8e5fffbe8e5fffce8e4fffce8e1fff9e5dbffebd4c7ffddc5b4ffddc4b2ffdec4b0ffd5bcafffc9b2a9ffb4a097ffae9991ffaa948dffa5938affa1908affa08e88ff9b8a84ff978680ff93827cff93817cff8f7e79ff8b7b75ff837672ff817773ff78706cff706766ff6d6464ff6a6061ff675e5dff675e5dff89807eff8f8684ff8e8583ff8a8180ff867d7cff807775ff7c716fff7d706bff7e716aff7f736aff837567ff8c7f6bffd4c5aefffce7d0fffde6cefffde6cefffce6cefffcead0fffcebd1fffdedd2fffdefd2fffcefd2fffbf0d2fffbf0d3fffcefd3fffdedd1fffdedd0fffddecbfffddfcefffee1d0fffee1d0ffffe1d3ffffe2d4ffffe2d6fffee3d9fffde5dbfffde6ddfffce7defffce8e0fffde9e1fffdeae3fffbeae4fff9e9e7fff5e7e6fff4e6e6fff2e5e5fff0e5e6fff0e5e7fff0e5e7fff0e5e7fff1e5e7fff3e5e6fff5e7e8fff5e7e8fff5e8e8fff5e8e7fff6e9e8fff7eae8fff7eae6fff7eae6fff7eae6fff8eae6fff6e9e5fff5e8e4fff5e7e5fff5e7e7fff5e7e7fff6e8e8fff6e8e8fff6e9e9fff6e9e9fff6e9e9fff6e9e9fff6e9e9fff6e8e7fff6e8e7fff6e8e7fff6e8e7fff6e8e7fff6e8e8fff5e7e7fff5e7e7fff5e7e7fff5e6e7fff7e7e8fff5e7e6fff5e7e7fff5e7e7fff6e7e7fff7e8e6fff7e8e6fff8e9e9fff7e9e9fff9e8e9fffae8e7fffae8e5fffae8e5fffae8e5fffae8e5fffae8e5fffbe8e4fffbe8e4fffbe8e1ffe8d5c8ffdac9b8ffd9c7b3ffecd5c4ffe7ccbfffd8bcafffc6a89cffba9d93ffb0978effaa948dffa4938affa08e85ff9d8c83ff9a887fff95847dff93847fff8e807dff887b7aff837877ff7c7274ff746b6aff6f6663ff6a625eff675e5cff665d5bff7d7471ff958c88ff968c89ff928987ff8e8381ff877d7bff827875ff827670ff82766eff82766cff877a6bff958874ffe1d1bbfffae6cefffde6cefffde6cefffce6cefffbead0fffcedd2fffceed2fffbefd3fffcf1d5fffbf2d5fffbf2d5fffbf1d4fffdf0d2fffcf0cffffddecbfffddfcdfffde0cefffde0cefffee0d1fffee0d1fffee0d3fffde2d7fffde3dafffde5dcfffce5ddfffce6e0fffce7e1fffbe8e3fffae9e3fff7e7e6fff4e5e7fff3e5e8fff1e4e6ffefe4e7ffefe4e7ffefe4e7ffefe4e7ffefe4e7fff2e4e7fff2e4e7fff2e4e7fff2e4e7fff2e4e7fff2e4e6fff3e5e4fff3e5e3fff3e5e3fff3e5e3fff3e5e3fff3e5e3fff4e6e4fff4e6e4fff4e6e5fff4e6e6fff5e7e7fff5e7e7fff6e8e8fff6e8e8fff6e8e8fff6e8e8fff6e8e8fff6e8e8fff6e8e8fff6e8e8fff6e8e8fff5e7e7fff5e7e7fff5e7e7fff5e7e7fff5e7e7fff5e7e7fff6e6e7fff5e7e6fff5e7e7fff5e7e7fff5e7e7fff6e7e5fff6e7e5fff6e8e8fff6e8e8fff8e7e8fff9e7e6fff9e7e4fff9e7e4fff9e7e4fff9e7e4fff9e7e4fff9e7e4fff9e7e4fffae9e2fff8e8dbffeedecdffdccdb9ffe5cfbfffefd2c4ffe9cab8ffe1c1b1ffceb0a2ffc3a698ffb69e91ffb19c8fffac978cffaa958affa79287ffa08d83ff9a8982ff91837fff8a7f7dff857a7aff817579ff797070ff716a62ff6a655cff69635cff675f59ff6f6760ff988d85ff9e9288ff9c9086ff978b82ff8f827aff8a7d75ff897b70ff887b6fff887b6fff918473ffbcb09bfff5e6cffffce8d0fffde6cefffde6cefffce6cefffaebd0fffbedd2fffdefd3fffcf1d5fffef3d7fffdf4d7fffdf4d7fffcf2d5fffdf2d3fffcf1d1fffcddcafffcdeccfffcdecdfffcdecdfffddfd0fffddfd1fffddfd2fffde1d6fffce2d9fffce4dbfffbe4dcfffbe5dffffce6e0fffae7e2fff9e7e4fff7e6e7fff2e4e8fff2e4e8fff0e3e7ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6fff1e3e6fff1e3e6fff1e3e6fff1e3e6fff1e3e6fff1e3e6fff1e3e5fff1e4e4fff1e4e4fff1e4e4fff1e4e4fff1e4e4fff2e5e5fff2e5e5fff2e5e5fff2e5e5fff3e6e6fff3e6e6fff4e7e8fff4e7e8fff4e7e8fff4e7e8fff4e7e8fff4e7e8fff4e7e8fff4e7e8fff4e7e8fff5e7e8fff5e7e7fff5e7e7fff5e7e7fff5e7e7fff5e7e7fff5e7e7fff5e7e6fff5e7e7fff5e7e7fff5e7e7fff6e7e6fff6e7e6fff5e7e7fff5e7e7fff6e6e7fff8e6e5fff8e6e4fff8e6e4fff8e6e4fff8e6e4fff8e6e4fff8e6e4fff8e6e4fff8e6e2fffae9e3fffdeee2fff2e2d4fff0dccffff1d7c9fff2d3bfffedccb9ffdfbfadffd2b3a2ffc3a898ffbca594ffb69f8fffb49c8dffaf9888ffa89284ffa18d83ff96867fff8f817cff8b7d7aff847778ff7e7370ff746d64ff6c665bff6b665cff6a635aff70675eff9f9489ffa5978affa29487ff9c8f81ff958779ff8d7f71ff8a7c6fff87796bff908274ffbcaf9bfff8ebd6fffcecd6fffce8d0fffee7cffffee7cffffde7cffffbecd1fffcefd3fffdf0d5fffdf2d6fffef3d7fffcf4d7fffcf4d7fffcf4d7fffef3d5fffdf2d4fffbdbcbfffcdcccfffcddccfffcdcccfffcdecffffcded1fffcddd3fffbdfd6fffbe1d7fffbe2dafffae3dbfffae4defffbe5dffffae6e0fffae5e4fff5e3e7ffefe2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e8ffeee2e8ffeee2e8ffede1e6ffede1e5ffede1e5ffede1e5ffede1e5ffede1e5ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffefe3e6fff0e4e7fff0e4e7fff0e4e6fff0e4e6fff1e5e7fff1e5e7fff2e6e8fff2e6e8fff2e6e8fff2e6e8fff2e6e8fff2e6e8fff2e6e8fff2e6e8fff2e6e8fff3e6e8fff4e5e7fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff4e7e9fff4e7e9fff5e7e8fff5e5e5fff5e5e4fff5e5e4fff5e5e4fff5e5e4fff5e5e4fff5e5e4fff5e5e4fff6e4e5fff7e5e4fff7e6dffff7e5dcfff7e1d6fff6d9cdfff9d9c7fff3d4c0ffe9c9b5ffdfc0adffcfb4a2ffc4ab99ffbda492ffb69e8cffb09886ffaa9482ffa79384ff9d8c81ff97877fff93837dff8d7e7aff857873ff7b7369ff6f6960ff6d6860ff6f6960ff776f66ffa2968affab9c8effa99a8cffa59687ff9a8b7cff918273ff8e8071ff9f9182ffd6c9b8fff9ecd7fffcf0d8fffbecd4fffce8cffffee7cffffee7cffffee9d0fffdedd2fffeefd4fffdf1d5fffbf3d6fffbf5d7fffaf5d7fffaf5d7fffbf4d7fffdf4d7fffdf2d5fffbdbcafffbdbcafffbdbcafffbdbcbfffbddcefffbddd0fffbdcd1fffaded5fffae0d6fffae1d9fff9e1dafff9e3ddfffae4defff8e4e0fff8e4e4fff3e2e6ffefe2e6ffeee2e6ffeee2e8ffeee2e8ffeee2e8ffeee2e8ffeee2e8ffeee2e8ffeee2e7ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffede1e5ffede1e5ffede1e5ffede1e5ffede1e5ffeee2e6ffefe2e7ffefe2e7ffefe3e5ffefe3e5fff0e4e6fff0e4e6fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff2e4e7fff4e5e7fff3e5e5fff4e6e6fff4e6e6fff4e6e6fff3e5e5fff4e6e6fff4e6e6fff4e6e6fff4e6e6fff3e5e5fff2e5e5fff2e6e8fff2e6e8fff3e5e8fff4e4e5fff4e4e3fff4e4e3fff4e4e3fff4e4e3fff4e4e3fff4e4e3fff4e4e3fff6e4e5fff7e4e5fff7e5e0fff7e6defff9e4dcfff9e0d8fff8dbcdfff1d3c1fff1d2c1ffefd1bfffd8bdabffceb5a1ffc5ac99ffbfa693ffb9a08dffb49c88ffb09a89ffa99585ffa38f83ff9d8b81ff98867eff8f8078ff857a70ff787067ff736c64ff776f69ff8b8078ffa7988dffaf9c90ffb09e8fffac9a8bffad9b8dffbba99affeadac9fffef0defffff0ddfffff0d9fffeefd6fffdedd4fffde9d0fffee7cffffee7cffffee8d0fffbecd1fffef0d4fffdf1d5fffcf3d6fffbf5d7fffaf5d7fffaf5d7fffbf4d7fffdf4d7fffdf2d6fffbddcafffbdac8fffbdac8fffbdac8fffbdbccfffbdbcefffbdcd0fff9ddd2fff8dfd5fff8e0d7fff9e1d8fff9e1dafff8e3defff6e2e1fff4e2e5fff1e2e7ffeee1e7ffede1e6ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e6ffede1e5ffede1e5ffede1e5ffede1e5ffede1e5ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e5ffede1e5ffeee2e7ffeee2e8ffeee2e8fff0e4e7fff0e4e6fff0e4e6fff0e4e6fff0e4e6fff0e4e6fff0e4e6fff0e4e6fff0e4e6fff0e4e6fff1e3e7fff1e3e7fff1e3e6fff1e3e6fff1e3e6fff2e4e7fff1e3e6fff1e3e6fff1e4e6fff1e4e6fff1e4e6fff1e4e5fff1e4e5fff0e4e6fff1e4e7fff2e3e6fff3e3e5fff3e4e5fff4e4e5fff3e3e5fff4e4e5fff4e4e6fff4e4e6fff4e4e6fff5e4e6fff6e5e5fff6e5e3fff7e5e2fff7e3e1fff7e1dffff7dfd7fff1d8caffdabfadffe6c8b5ffddc1adffd6baa5ffd1b5a1ffcbb09affc5aa94ffc0a58fffbca28fffb7a08dffb29c8cffae9688ffa79084ff9e8a80ff92847bff837870ff7d716cff837773ff8e8079ff97847cff9a867bffa59185ffaf9b8fffe6d4cafffcecddfffef0dcfffef1dbfffff1dafffef1d6fffef1d5fffef0d3fffeecd1fffdecd1fffeead0fffeebd0fffeedd1fffeefd3fffff1d6fffef3d7fffcf4d7fffbf5d7fffbf5d7fffbf4d7fffcf3d7fffcf1d6fffadccbfffbdac9fffbdac8fffbdac8fffbdbcbfffbdbcdfffbdccffffbdfd4fff9e1d6fff9e2d7fffae1d8fff9e1d9fff7e2dcfff5e1e2fff1e2e6ffeee2e8ffede1e8ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffece0e5ffece0e4ffece0e4ffece0e4ffece0e4ffece0e5ffece0e6ffece0e6ffece0e6ffece0e6ffede1e7ffede1e7ffede1e5ffede1e5ffede1e7ffede1e7ffede1e7ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffefe2e6fff1e3e6fff1e3e6fff1e3e6fff0e2e5fff1e3e6fff1e3e6ffeee2e6ffefe3e6ffefe3e7ffefe3e7ffefe3e7ffefe3e7fff1e4e8fff1e3e7fff1e3e7fff1e3e7fff2e4e8fff1e3e7fff2e3e8fff2e4e8fff3e4e7fff3e4e7fff3e5e8fff3e5e7fff4e5e7fff4e5e6fff6e5e5fff5e4e3fff7e4e1fff8e2d8ffeed5c3ffe4c9b5ffe1c3aeffdbbba4ffd5b7a0ffd0b399ffccaf93ffc7a98fffc0a48cffbfa38dffbda28cffb69d88ffaf9583ffa78f83ff968580ff897c77ff887875ff8b7977ff8f7e7aff8a7670ff88756dff927f76ffe3d0c7fff8e7dffffaebdffffcefdcfffcefdafffdf1dafffdf1d7fffdf2d6fffef2d4fffdf0d0fffdefd0fffeeecffffdedcffffceccffffdedd2fffef0d5fffef2d6fffdf4d7fffbf5d7fffbf5d7fffbf4d7fffbf3d8fffbf1d7fffadccbfffbdac9fffbdac8fffbdac8fffbdbcbfffbdbcdfffbdccffffaded3fff9e1d6fff9e2d7fffae1d8fff9e1d9fff7e2dcfff2dfe0ffeedfe4ffecdfe7ffecdfe7ffecdfe7ffecdfe7ffecdfe7ffecdfe7ffecdfe7ffecdfe7ffecdfe7ffecdfe6ffeddfe6ffeddfe6ffeddfe6ffeddfe6ffeddfe6ffecdfe7ffecdfe7ffecdfe7ffece0e6ffece0e6ffece0e6ffece0e5ffece0e5ffece0e6ffece0e6ffece0e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffeee1e5ffefe0e5ffefe0e5ffefe0e5ffefe0e5ffefe0e5ffefe0e5ffede1e5ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffeee2e6ffefe3e8ffefe3e8ffefe3e8fff0e3e8fff1e3e8fff0e3e8fff1e3e8fff0e2e7fff1e3e8fff1e3e8fff2e4e8fff2e4e7fff2e4e7fff2e4e7fff4e6e6fff4e6e6fff4e5e4fff5e2dafff0dbc9ffecd3c0ffe0c1adffddbca7ffd9b8a1ffd4b39affceae92ffc9a98dffc3a58cffc1a38cffbca089ffb59884ffb09380ffa78f83ff968582ff8e7e7cff8f7b7bff8d7778ff857170ff786664ff71605eff91807dffead9d6fff6e5e2fff5e6e0fff9ebe1fffaeddefffcefddfffcf0dafffdf1d9fffcf1d6fffdf0d3fffdefd3fffcedd3fffbecd2fffaead4fffbebd7fffbecd8fffdf1d8fffdf4d7fffbf5d7fffbf5d7fffbf4d7fffbf3d8fffbf1d7fffbddccfffbdac9fffbdac8fffbdac8fffbdbcbfffbdbcdfffbdbcefffbddd2fffbdfd4fffce1d5fffde0d6fffce0d9fff9e0dcfff1dcdfffeddde4ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffecdee7ffeddde6ffeddde6ffeddde6ffeddde6ffeddde6ffebdee7ffebdee7ffecdfe8ffecdfe8ffecdfe8ffecdfe8ffecdfe7ffece0e6ffecdfe7ffecdfe8ffecdfe8ffede1e8ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffeee1e7ffefe0e6ffefe0e7ffefe0e7ffefe0e7ffefe0e7ffefe0e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffeee2e8ffede1e7ffefe2e8ffefe0e6fff0e1e8fff0e1e8fff0e1e8fff0e1e6fff1e3e7fff0e3e7fff0e3e7fff1e3e7fff2e3e4fff2e1deffefdad5ffd9bfb3ffd3b4a4ffd3b4a0ffd5b5a0ffd3b39cffceaf95ffc8aa8fffc4a791ffc1a590ffbba08bffb49887ffb09584ffa48d84ff988583ff8e7e7cff8e7979ff80696aff796565ff756564ff70615fff8d7d7cffe9d9d8fff4e4e3fff0e1e0fff2e2dffff4e5dffff9eae1fffbeddffffcefdcfffdf1dafffcf0d8fffdefd9fffaebd7fff9ead8fff8e8dafff7e6dbfff9e9dafffbefdafffcf2d8fffcf4d9fffcf4d9fffcf3d8fffcf2d9fffbefd7fffcdecdfffcdbc9fffbdac8fffbdac8fffbdbcbfffbdbcdfffbdbcefffbdcd2fffbddd2fffbe0d2fffcdfd4fffbdfd6fff9dfdbfff0dbdfffebdbe4ffe9dbe7ffe9dbe7ffe9dbe7ffeadce8ffeadce8ffeadce8ffeadce8ffeadce8ffeadce8ffecdde7ffeddde7ffeddde7ffeddde7ffeddde7ffeddde7ffebdee9ffebdee9ffebdee9ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffecdfe8ffecdfe8ffecdfe7ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffeddfe6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffece0e6ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffede1e7ffeee1e7ffede1e7ffeee0e7ffefdfe7ffefe0e7ffefe0e7ffefe0e7ffefe0e7ffefe1e7ffeee1e6ffede1e5ffede1e6ffeee1e6fff0dfe5ffeed7dbffdabdb8ffccad9cffbfa08cffbfa08bffc4a58effc5a78cffc0a287ffbca08cffb99f8cffb49a88ffac9182ffa38a7eff98827aff877774ff7b6968ff766061ff7a6364ff816d6dff7d6c6aff756664ff857573ffcbbbb9ffeededdffefdfe0ffefdfe1fff0e0e0fff2e2e1fff3e4dffff6e8defff7e9ddfff7e9ddfff6e9ddfff6e8dcfff4e5dcfff3e4ddfff2e2defff6e7e0fffaefddfffdf3dafffdf3d9fffdf3d9fffdf2d9fffef1dafffdeed8fffddfcefffcdcccfffadacafffadacafffbdbccfffbdbcdfffbdbcefffbdcd2fffaddd1fffadfd1fffbded1fffaded6fff6dddbffeedadfffeadae4ffe8dae6ffe8dae6ffe8dae6ffe9dbe7ffe9dbe7ffe9dbe7ffe9dbe7ffe9dbe7ffeadce8ffeadce6ffeadde6ffeadde6ffeadde6ffeadde6ffeadde6ffeadce8ffeadce8ffeadde7ffeadde6ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee6ffebdee6ffebdee5ffeadde5ffeadde5ffeadde5ffebdee7ffebdee8ffebdee7ffebdee6ffebdee6ffebdde5ffeadde5ffebdee6ffebdee6ffebdee6ffebdee6ffebdee6ffecdfe7ffecdfe8ffecdfe7ffece0e6ffece0e6ffebdfe5ffebdee6ffebdee6ffebdee6ffebdee6ffecdee6ffebdee6ffeddee6ffeddee6ffeedfe6ffeedfe6ffefe0e7ffefe0e7ffeee0e7ffeee1e7ffece0e6ffece0e6ffeddfe6ffefdee5ffedd5dbffd9bdbaffaa8d80ff9f8272ff937766ff9e816effa28670ff9f846fff9e8475ff998072ff957c71ff937b70ff8f7870ff7c6862ffb1a19fffc3b1b0ff665051ff7a6364ff816d6dff82726fff7d6e6aff7f6f6cffb6a7a3ffeedcdcffeddcdfffeedee1ffeedee0ffefdfe0ffefe0e0fff1e1e0fff2e2e1fff1e1e0fff1e1e0fff1e1e0fff1e1e1ffefe0e0ffefdfe1fff4e4e1fff8ecdefffbf1dafffdf3dafffdf3d9fffdf2d9fffef1dafffdeed8fffce0d0fffbddcefffbdbcdfffbdbcdfffbdbd0fffbdad0fffbdad0fff9dbd1fff9dbd0fff8dccffff7ded0fff3ddd7ffeedadcffe9d9e1ffe7dae4ffe7dae5ffe7dae5ffe6d9e4ffe6dae5ffe7dce7ffe7dce7ffe7dce7ffe7dce7ffe7dce7ffeadbe7ffeadbe6ffeadbe6ffeadbe6ffeadbe6ffeadbe6ffeadce8ffeadce8ffeadde7ffeadde6ffeadde6ffeadde6ffebdee7ffebdee7ffebdee7ffeadee9ffeadee9ffeadde6ffeadde6ffeadde6ffeadde6ffeadde6ffe9dde6ffe9dee9ffeadee9ffe9dde7ffe7dce6ffe7dce6ffe9dbe6ffeadce6ffeadde6ffe9dce7ffe8dde7ffe8dde7ffebdee7ffebdee7ffebdee9ffebdee9ffeadde6ffeadde5ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffebdee7ffecdee7ffeedee8ffefdfe9ffeedfe8ffeedfe7ffeedfe7ffeddfe6ffecdfe6ffeddfe6ffeddee6ffeedde4ffd1babfffaa8f91ff816564ff6e534dff6b4f48ff7b6258ff947b6fff967e72ff876f69ff887069ff856e66ff846e69ffa8938fffe5d3d1ffe7d6d5ffb7a5a4ff786262ff816a6bff877371ff867471ff82716dff816f6cffb09e9bffead7d7ffefdcdfffeedee1ffeedee0ffefdfe1ffeededfffefdfe2ffefdfe2ffefdfe3ffeedee1ffeddee2ffecdee2ffecdee2ffecdee1fff0e0e1fff7e9e3fffbeedefffdf1dcfffef3dafffef3d9fffef1d8fffeefd7fffbe0d0fffadecffff9dbcffff9dbcffff9dbd0fff9dbd1fff9dbd1fff9dbcffff8dacefff7dbccfff4dcd0ffeddbdaffe8d9e0ffe4d8e3ffe4d8e4ffe5d8e4ffe5d8e4ffe5d8e4ffe4d9e5ffe4dae5ffe4dae5ffe4dae5ffe4dae5ffe4dae5ffe7dae6ffe7dae6ffe7dae6ffe7dae6ffe7dae6ffe7dae6ffe8dce5ffe8dce5ffe8dce5ffe8dce5ffe8dce5ffe8dce5ffe9dce5ffe9dce5ffe7dce7ffe7dce7ffe7dce7ffe7dce5ffe7dce5ffe7dce5ffe8dee6ffe8dee6ffe8dee6ffe8dde8ffe7dce7ffe7dce7ffe6dbe6ffe6dbe6ffe9dbe8ffe8dae6ffe7dae6ffe6dae8ffe6dbe8ffe6dbe8ffe8dce7ffe9dde8ffe9dde8ffe8dde8ffe8dde8ffe9dee9ffe9dde8ffe9dde8ffe9dde8ffeadde8ffeadce8ffeadce8ffeadce9ffeadce9ffebdce8ffeedee8ffeedee8ffeedee8ffeddfe8ffeddfe7ffeedfe7ffecdee5ffeddde5ffeedbe3ffdfc8cfffaf9599ff9a7f83ff775b5eff5c4244ff5a4041ff705857ff8e7876ff887372ff7a6565ff867071ffceb8b8ffdecacaffe6d4d5ffefdfdeffe8d6d5ffc4b2b2ff816c6cff897273ff937d7bff87726dff836f6aff725d59ff9f8a88ffdfcacbffefdbdfffeedce0ffeddce0ffeedee1ffeedee1ffeedee1ffeedee1ffeddde1ffecdde0ffebdde0ffebdde0ffebdde0ffebdde0ffeddddffff1e1dffff7e9defffef1dffffef2dbfffef2dafffef1d8fffeefd7fffadfcffffaddcffffbddd0fffbddd0fffbdcd1fffbdcd2fff9dbd2fff7dad1fff5d9cffff2d9cdffefdad3ffe8d9e0ffe4d8e5ffe1d6e5ffe0d6e4ffe1d6e4ffe1d6e4ffe1d6e4ffe1d7e4ffe1d8e4ffe1d8e4ffe1d8e4ffe2d9e5ffe2d9e5ffe4dae6ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe5dae5ffe5dae4ffe5dae4ffe5dae4ffe5dae4ffe6dbe6ffe7dae6ffe7dae6ffe6dae7ffe6dbe8ffe6dbe8ffe5dae5ffe6dbe6ffe6dbe6ffe6dbe6ffe6dbe5ffe7dce6ffe6dbe6ffe6dbe6ffe6dbe6ffe6dbe7ffe6dbe7ffe7dae5ffe6d9e4ffe6d9e5ffe5d9e6ffe5d9e6ffe5d9e6ffe6dbe7ffe6dbe7ffe6dbe7ffe7dce8ffe7dce7ffe8dde8ffe8dde8ffe8dde8ffe8dde8ffe9dde8ffe9dbe8ffe7dae7ffe7dae7ffe6dae7ffe9dbe7ffecdde7ffeddde7ffeddde7ffecdde7ffebdee7ffebdce6ffeddbe5ffedd8e2ffe7d0d8ffbca1a7ffae9094ff9b7c80ff785b5dff5e4041ff5e4142ff856a6aff887473ff846f70ff715a5effbfaaaeffe8d5d9ffe7d5daffe9d8daffeddddcffe8d8d7ffd4c2c2ff917b7bff947d7eff9f8785ff876f6cff836d69ff7b6562ff947d7dffc8b2b5ffefdbe0ffecdbdfffecdbdfffecdbdfffecdbdfffecdbdfffeddde0ffecdde0ffebdce0ffeadce0ffeadce0ffeadce0ffeadce0ffecdbe0ffeededffff2e2defff8e9dffffdf0defffdf0ddfffdefdbfffdeed9fffbddd0fffbdbd0fffbdad1fffbdad1fffbdacffffbdad1fff9dad5fff7dad7ffefd7d7ffe8d5dfffe3d4e2ffe2d5e5ffe1d6e6ffdfd5e6ffded5e6ffded5e6ffded5e6ffded5e6ffe0d6e5ffe1d6e4ffe1d6e4ffe1d6e4ffe2d7e6ffe2d7e6ffe5d7e7ffe5d7e7ffe5d7e7ffe5d7e7ffe5d7e7ffe5d7e6ffe5d8e5ffe5d8e5ffe5d8e5ffe5d8e5ffe5d8e5ffe5d8e4ffe5d8e3ffe5d8e3ffe4d8e5ffe3d8e5ffe3d8e5ffe3d8e3ffe3d9e3ffe3d9e3ffe4dae4ffe5dae4ffe6dbe6ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe5dae4ffe6d9e4ffe6d9e5ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe5d9e6ffe6dbe8ffe6dbe7ffe6dbe6ffe7dce7ffe6dbe6ffe6dbe6ffe6dbe6ffe6d9e6ffe6d9e6ffe6d9e6ffe5d9e6ffe6dbe6ffe7dae4ffe8dae4ffeadbe7ffeadce8ffebdce8ffeadbe7ffedd8e4ffedd5deffcaafb6ffb3979bffa58587ff967576ff79595bff624444ff745655ff9a7e7eff8b7475ff806a6cff786168ffe4d1d8ffebdae0ffe8d8e0ffe6d8ddffe6d9daffe8d8d9ffe3d0d2ffa58d8effa2888affa28988ff836b68ff816967ff7c6363ff7d6465ffbba5a9ffefdae1ffecdbe1ffecdbe1ffecdbe1ffecdbe1ffecdbe1ffecdbe1ffebdbe1ffecdbe1ffecdbe1ffecdbe1ffecdbe1ffecdbe1ffecdbe1ffeddde0ffeddddfffefe0ddfff5e7defff8eae0fff9eadefffbecddfff9dbcffffadacffffad9d0fffad9d0fffad9cefffbdad2fff7d9d7fff0d6dbffe4d2dbffddd2dfffdcd2e3ffdcd3e4ffddd4e5ffdcd4e6ffdcd4e6ffdcd4e6ffdcd4e6ffdcd4e6ffded5e4ffdfd5e3ffe0d5e3ffe0d5e3ffe0d5e3ffe0d6e3ffe2d6e4ffe3d5e4ffe3d5e4ffe3d5e4ffe3d5e4ffe3d5e4ffe3d7e4ffe3d7e4ffe3d7e4ffe3d7e4ffe3d7e4ffe3d7e4ffe3d8e4ffe3d8e4ffe2d8e4ffe1d8e4ffe1d8e4ffe1d8e3ffe1d8e2ffe1d8e2ffe2d9e3ffe2d9e3ffe4dae4ffe4d8e5ffe4d8e5ffe4d8e5ffe4d8e5ffe4d8e5ffe4d9e2ffe4d8e3ffe4d8e4ffe3d8e5ffe2d9e5ffe2d9e5ffe2d9e5ffe2d9e5ffe3d9e5ffe4dae6ffe5dae7ffe5dae7ffe6dbe7ffe5dae6ffe5dae6ffe5dae6ffe5d8e5ffe4d8e5ffe4d8e5ffe3d9e5ffe5dae6ffe7dae6ffe7dae6ffe7dae7ffe7dae8ffe7dae8ffe9d8e5ffecd5e1ffd6bbc2ffbc9ea4ffa5868aff977678ff8e6c6cff7c5b5bff705050ff907271ffa48989ff897073ff7c686cff9a888fffe9d7e2ffe8d8e3ffe5d8e2ffe4d9e0ffe4daddffe5d8daffe5d1d3ffb5999bffb09394ffac9090ff866b69ff7f6665ff796060ff775e5fffac989dffedd9e0ffecdbe2ffecdbe2ffecdbe2ffecdbe2ffecdbe2ffecdbe2ffecdbe2ffecdae2ffecdae3ffecdae3ffecdae3ffecdae3ffebdae2ffe9dbe0ffe9dbdfffe9dbdeffecdedeffeddfdeffeee0dffff1e2defff8dacffff9d9cffff8dad0fff6dad3fff5dbd1fff5dad3ffefd6d7ffe3d1dcffdbd0e0ffd9d0e3ffdad1e5ffdad1e5ffdad1e5ffdbd3e7ffdbd3e7ffdbd3e7ffdbd3e7ffdbd3e7ffdcd3e6ffddd4e4ffddd4e4ffddd4e4ffddd4e5ffded4e5ffe0d4e5ffe0d4e5ffe0d4e5ffe0d4e5ffe0d4e5ffdfd3e5ffe1d6e4ffe1d6e4ffe1d6e4ffe1d6e4ffe1d6e4ffe1d6e4ffe1d6e4ffe1d6e4ffdfd5e4ffded5e3ffded5e3ffe0d6e2ffe0d8e3ffe0d8e3ffe0d7e3ffe1d7e2ffe3d8e3ffe4d8e5ffe4d8e5ffe2d7e4ffe2d7e6ffe2d7e6ffe2d7e3ffe1d8e4ffe1d8e4ffe1d9e4ffe0d9e4ffe0d9e4ffe0d9e5ffe0d9e5ffe2d9e5ffe2d9e6ffe2d9e5ffe2d9e5ffe3dae6ffe3d8e5ffe4d8e5ffe4d8e5ffe2d7e6ffe3d7e6ffe2d7e6ffe1d7e6ffe4d8e5ffe5d8e5ffe5d7e5ffe5d8e6ffe4d9e5ffe6d8e5ffe9d5e2ffd0b5bfffb69a9effa18386ff97777aff8e6c6dff876565ff7c5b5bff7e5f5eff9f8180ffa58a8aff876f72ff816f73ffd7c6ceffe6d6e1ffe6d9e4ffe4d9e3ffe4d9e1ffe4d9dfffe4d7dcffe7d1d6ffbb9ea0ffb7999affb69999ff896d6cff806566ff755c5eff70565bff826d73ffe5d3d9ffebdae1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffebd9e1ffeadae1ffe9dae1ffe9dbdfffe9dbdfffe9dbdfffe9dbdfffe9dadfffebdadefff8dad1fff7dad2fff4d8d1ffeedad8ffebd8dcffe3d2ddffdecee1ffdacee3ffd7cfe4ffd6cfe4ffd5d1e6ffd5d1e6ffd6d1e6ffd6d3e7ffd6d3e7ffd6d3e7ffd7d4e8ffd7d4e8ffd9d3e7ffdad3e6ffdad3e6ffdad3e5ffdad3e3ffdad3e3ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffded5e6ffded5e6ffded5e6ffded5e6ffded5e6ffded5e6ffded5e6ffded5e6ffdfd4e6ffe0d4e5ffe0d5e5ffe1d6e5ffe2d7e5ffe1d6e3ffe1d6e4ffe1d6e3ffe2d5e4ffe2d7e5ffe2d7e5ffe1d6e4ffe2d7e6ffe2d7e6ffe2d7e6ffe0d8e5ffe0d8e5ffdfd9e5ffdfd9e5ffdfd9e5ffdfd9e6ffded9e6ffded9e6ffdfd9e6ffdfd9e6ffdfd9e6ffe1d9e7ffe1d7e5ffe2d7e5ffe2d7e7ffe2d7e7ffe1d7e7ffe2d7e7ffe1d7e7ffe2d7e7ffe2d6e5ffe2d7e6ffe1d6e4ffe2d6e3ffe6d5e0ffd3bac3ffb79a9fff9a7b7eff917274ff8e6c6eff896767ff805f5fff765655ff907372ffae9190ff9e8383ff7f6a6dffa8979cffe5d6ddffe7d8e1ffe7d9e4ffe6d9e4ffe5d8e2ffe5d8e1ffe5d9e0ffd7c1c7ffba9da1ffb99b9fffa18487ff806668ff7c6064ff6f5458ff6f5358ff856e73ffdfccd2ffe9dbdfffe8dae1ffe8d9e2ffe8d9e2ffe8d9e2ffe8d9e2ffe8d9e2ffe9d8e1ffead8e0ffead8e0ffead8e0ffead8e0ffead8e1ffe8d9e1ffe8d9e0ffe8d9e0ffe8d9e0ffe8d9e0ffe8d9e0ffe8d9dffff4d7d3ffeed4d6ffe5d0d6ffded0dbffd8d0dcffd6cdddffd6cce3ffd3cde4ffd3cde5ffd3cde5ffd3cfe5ffd3cfe5ffd3cfe5ffd4d0e6ffd4d0e6ffd4d0e6ffd5d1e7ffd5d1e7ffd5d1e6ffd7d1e5ffd7d1e5ffd7d1e3ffd7d2e1ffd8d2e2ffd8d3e2ffd9d4e3ffd9d4e3ffd8d3e2ffd9d4e3ffd9d4e3ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffdbd3e4ffdcd4e6ffdcd4e6ffdcd4e6ffdcd4e6ffdcd4e6ffe0d7e7ffe0d6e6ffe0d6e6ffe0d6e6ffe0d6e6ffe0d6e6ffe0d6e6ffe0d6e6ffe0d6e6ffe0d6e6ffdfd6e6ffded7e7ffddd7e6ffddd7e6ffddd8e6ffdcd8e6ffdcd8e6ffdcd8e6ffdcd8e6ffdcd8e6ffdcd8e6ffdcd8e6ffdcd8e6ffded7e6ffe0d6e6ffe0d6e7ffe2d6e8ffe1d7e8ffe1d7e8ffe1d7e8ffe2d6e8ffe2d6e8ffe0d6e7ffe2d5e6ffe0d3e0ffe1d2ddffd1bdc2ffbfa4a7ffae9192ff9c7e7fff8e6d6fff866467ff815e60ff7c5a5aff7a5959ff9b7e7cffa68b89ff937a7aff766468ffc7babeffe9dde1ffe7d9e2ffe5dae2ffe5dae2ffe6dae2ffe6d9e3ffe5dae3ffd8c0c9ffbb9ca4ffb89ba2ff9d8389ff735b60ff7b5f66ff684b51ff6e4e54ff8e7377ffd1c0c2ffe6dcddffe6dadfffe7d9e2ffe7d9e2ffe8d9e2ffe8d9e2ffe8d9e2ffe9d8e1ffead8e0ffe8d7dfffe8d7dfffe8d7dfffe8d7dfffe8d9e2ffe7d8e0ffe7d8dfffe7d8dfffe7d8dfffe7d8dfffe7d8dfffe3cfd3ffdecdd9ffd7caddffd2cbe1ffd1cde2ffd0cde2ffd0cce5ffd0cce5ffd0cce5ffd0cce5ffd0cde4ffd0cde4ffd0cde4ffd1cee4ffd1cee4ffd1cee4ffd2cfe5ffd2cfe5ffd3cfe5ffd5cfe6ffd5d0e6ffd5d0e4ffd5d0e2ffd6d1e3ffd7d2e4ffd7d3e5ffd6d1e4ffd6d1e4ffd6d1e4ffd7d1e4ffd9d2e5ffd9d2e5ffd9d2e5ffd9d2e5ffd9d2e5ffd9d2e6ffd9d4e7ffd9d4e7ffd9d4e7ffd9d4e7ffdad3e7ffddd6e6ffddd6e6ffddd6e6ffddd6e6ffddd6e6ffded5e6ffddd6e6ffddd6e6ffddd6e6ffded5e6ffded5e6ffddd5e6ffded5e6ffded5e6ffded5e6ffded5e6ffded5e6ffddd5e6ffddd5e6ffddd5e6ffddd5e6ffddd5e6ffddd5e6ffddd5e6ffded5e6ffded5e5ffe0d6e7ffe0d6e8ffe0d5e8ffe0d5e8ffe0d5e8ffdfd5e7ffded5e6ffe2d7e7ffdecfdcffd9c7ceffc9b3b5ffb59c9aff987c7aff907273ff866769ff816165ff7b5c5eff785859ff7f5f5fff9d8280ff9f8784ff85706eff8d7d81ffd9ccd3ffe5d9dfffe4d8e3ffe4d9e4ffe4d9e4ffe4d9e2ffe4d9e2ffe3d9e2ffd7c0c9ffbb9ca4ffb89ba2ff9b8288ff725b60ff7c6066ff674a4fff6f4f55ff85696effcfbec0ffe5dbdbffe5dadfffe5d8e1ffe5d8e2ffe5d8e2ffe5d8e2ffe5d8e2ffe6d8e0ffe7d8e0ffe7d8e0ffe7d8e0ffe7d8e0ffe7d8e0ffe6d8e1ffe5d8e0ffe5d8e0ffe5d8e0ffe4d7dfffe4d7dfffe4d7dfffd6cedaffd3cbdfffcfc9e3ffcecae4ffcecae4ffcecae4ffcecae4ffcdcce5ffcccce5ffcdcce5ffcfcde4ffcfcde4ffcfcde4ffcfcde4ffcfcde4ffcfcde4ffd0cee6ffd0cee6ffd1cee6ffd3cee8ffd3cee8ffd3cfe6ffd3cfe4ffd3cfe4ffd4d0e5ffd5d1e6ffd4d1e5ffd4d1e5ffd4d1e5ffd4d0e5ffd7d1e7ffd7d1e7ffd7d1e7ffd7d1e7ffd7d1e7ffd6d2e6ffd6d3e5ffd6d3e4ffd6d3e4ffd6d3e4ffd7d3e4ffdad3e4ffdbd3e5ffdbd3e5ffdbd3e5ffdbd3e5ffdbd3e5ffdbd3e5ffdbd3e5ffdbd3e5ffdbd3e5ffdcd4e6ffdcd4e7ffddd3e8ffded3e8ffded3e8ffded3e8ffded3e8ffddd3e7ffddd3e7ffddd3e7ffddd3e7ffddd3e7ffddd3e7ffddd3e6ffdcd4e5ffdcd4e4ffdfd5e5ffe0d4e6ffe0d4e6ffe0d4e6ffe0d4e6ffdfd3e5ffdfd4e4ffdfd1dfffd5c5cdffbfabb1ffaa9393ff98807bff8a6f6bff846767ff7f6162ff7b5d60ff77595aff765959ff816562ffa08784ff9b8581ff7e6b68ffa6979bffdccfd8ffe2d6e1ffe4d8e5ffe4d8e5ffe4d8e5ffe4d9e4ffe4d9e3ffe2d8e2ffd7c0c8ffbc9ca1ffb89ca0ff967f80ff705b5cff7a6164ff654a4dff6c4f53ff785e63ffccbdc0ffe3d9ddffe3d9e0ffe4d8e3ffe4d9e3ffe4d8e3ffe4d8e3ffe4d8e3ffe5d8e2ffe6d8e1ffe4d7e0ffe4d7e0ffe4d7e0ffe4d7e0ffe4d7e1ffe4d7e0ffe4d7e0ffe4d7e0ffe3d6dfffe3d6dfffe3d6dfffcfc9daffcfc9e0ffcdc8e3ffcdc8e3ffccc9e3ffcbc9e3ffcccae4ffcbcbe4ffcbcbe4ffcbcbe4ffcecce3ffcecce3ffcecce3ffcecce3ffcecce3ffcfcde4ffcfcde5ffcfcde5ffd0cde6ffd2cde8ffd2cde7ffd2cee6ffd2cee4ffd2cee4ffd4d0e6ffd4d0e6ffd4d0e6ffd3cfe5ffd3cfe5ffd3cfe5ffd6d0e6ffd6d0e6ffd6d0e6ffd6d0e6ffd6d0e6ffd5d1e6ffd5d2e5ffd5d2e5ffd5d2e5ffd5d2e5ffd6d1e5ffd8d2e4ffd8d2e6ffd8d2e6ffd8d2e6ffd8d2e6ffd8d2e7ffd8d2e6ffd8d2e6ffd8d2e6ffd8d2e7ffd8d2e5ffd9d3e6ffdad3e5ffdad3e5ffdad3e5ffdad3e5ffdbd2e5ffdad2e5ffdbd2e5ffdbd2e5ffdbd2e5ffdbd2e5ffdcd2e5ffdcd2e5ffdad3e5ffd9d3e5ffdcd4e6ffddd3e6ffddd3e6ffddd3e6ffded3e5ffdcd2e2ffdcd0ddffc7b8c1ffbaa8acffa99599ff937d7cff8d746fff886d69ff826465ff7c5e60ff77585cff795b5dff7c605fff896e6cffa08a86ff988481ff796766ffcfbfc5ffdfcfd9ffe4d5e1ffe4d8e6ffe3d8e5ffe3d8e5ffe2d9e5ffe2d8e4ffe2d7e2ffd9c0c6ffbd9c9effb99c9dff927c7bff6e5c59ff796462ff674f4fff6a5152ff755f63ffc9bac0ffe0d5ddffe1d6e1ffe4d9e3ffe4d9e3ffe4d9e3ffe4d9e3ffe4d9e3ffe4d7e1ffe4d7e0ffe4d7e0ffe4d7e0ffe4d7e1ffe4d7e2ffe2d7e2ffe3d7e2ffe4d7e1ffe2d6e0ffe2d5e0ffe2d5e0ffe2d5e0ffcdcadeffcbc9dfffcbc8e1ffcbc8e1ffcac8e1ffcac8e2ffcac9e3ffcbcbe3ffcbcbe4ffcbcbe3ffcccbe2ffcccbe2ffcccbe2ffcdcce4ffcdcce4ffcdcce4ffcecde5ffcecde5ffcfcde6ffd1cde7ffd1cee7ffd1cee6ffd1cee4ffd1cee4ffd2cfe5ffd2cfe5ffd2cee4ffd2cee4ffd2cee4ffd2cee4ffd4cee5ffd4cee5ffd4cee5ffd4cee5ffd3cfe5ffd2d1e7ffd0d3e8ffd1d3e7ffd4d2e4ffd7d0dfffd9d0e1ffdbd2e3ffdcd3e5ffdcd2e6ffd6d0e4ffd4cfe5ffd5d0e6ffd5d1e7ffd6d1e7ffd6d1e7ffd6d1e7ffd6d1e7ffd7d2e6ffd9d4e6ffd9d4e5ffd9d4e5ffd9d4e5ffd9d4e5ffd9d4e5ffd9d4e5ffd9d4e5ffd9d4e5ffd9d4e5ffdad3e5ffd9d3e5ffd9d3e5ffd8d3e4ffd9d3e4ffdad2e4ffdcd3e3ffdcd2e2ffdbcedeffcdc0cbffb5a4abffaa979affa08d8dff927e7cff88726cff876f68ff876c68ff816364ff795b5dff745659ff7a5d5dff836766ff9e8582ffa4908dff877672ff867677ffe1d4ddffe1d5e0ffe3d7e3ffe4d7e5ffe3d9e6ffe2d9e6ffe2d8e5ffe2d8e4ffe2d6e2ffd7c0c6ffbb9d9cffb89c9aff8d7974ff75635fff735e5cff6b5353ff6e5557ff786064ffc5b5bbffdfd4ddffe0d6e1ffe2d8e2ffe2d7e4ffe2d7e4ffe2d7e4ffe2d7e4ffe2d6e2ffe2d6e1ffe2d6e1ffe2d6e2ffe2d5e3ffe2d5e3ffe1d6e3ffe1d6e3ffe0d5e0ffe0d5e0ffdfd4e0ffdfd4e0ffe0d5e0ffc9c9dfffc9c9deffc9c9deffc9c9dfffc9c9e0ffc7c8e1ffc9c9e2ffcacbe1ffcbcce2ffcbcce2ffcbcce2ffcbcce2ffcbcce3ffcbcde5ffcbcde5ffcbcde5ffcbcde5ffcbcde5ffcdcde5ffcfcde4ffcfcde4ffcfcde4ffcfcde4ffcfcde4ffd0cde4ffd0cce4ffd0cce4ffd0cce4ffd0cce4ffd0cce4ffd2cee6ffd2cee6ffd2cee6ffd2cee6ffd0cde5ffcfd0e7ffcad3e7ffccd3e5ffd3d0e0ffdacddaffdbcdd9ffe2cfdfffe7d4e4ffe0d3e3ffd6cee2ffd0cde2ffd2cee4ffd3cfe5ffd4d0e6ffd4d0e6ffd4d0e6ffd4d0e6ffd4d0e5ffd4d0e4ffd6d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd9d4e5ffd9d4e5ffd8d2e4ffd8d2e4ffd9d2e4ffd9d1e1ffd9ceddffc4b6bfffa39497ff988787ff927e7cff8e7877ff89736fff866e69ff866e68ff866c66ff826563ff7a5c5bff755758ff7f6160ff886c69ffab9391ffa08e8bff7b6b68ffae9ea2ffe0d5e2ffe0d6e4ffe3d7e4ffe4d7e6ffe4d8e6ffe4d8e6ffe3d9e5ffe3d9e5ffe3d7e1ffd3c3c7ffb7a09cffb49e9aff83706bff7e6b67ff705c5aff6e5857ff735a5bff796366ffbfb0b8ffded3deffdfd5e0ffe1d8e2ffe1d8e4ffe1d8e4ffe1d8e4ffe0d7e4ffe1d6e3ffe1d6e3ffe0d5e2ffe0d5e2ffe0d4e4ffe0d4e4ffded4e1ffdfd5e2ffddd3dfffddd3dfffddd3dfffded2dfffded2dfffc7c8dfffc7c8deffc7c8ddffc7c8deffc7c8dfffc7c8e1ffc7c8e1ffcacae1ffcacae1ffcacae1ffcacae1ffcacae1ffc9cbe1ffc9cce4ffc9cce4ffc9cce4ffc9cce4ffc9cce4ffcccce4ffcecce3ffcecce3ffcecce3ffcecce3ffcfcde4ffd0cde4ffd0cce4ffd0cce4ffd0cce4ffd0cce4ffd0cce4ffd0cbe2ffd0cbe2ffd0cbe2ffd3cde3ffd3cce3ffbeb0c9ff45304bff37223bff3c2b3cff40313cffad9da8ffb39ca8ffe1cad7ffe2d2e1ffd6cee1ffd0cde2ffd0cde2ffd2cee4ffd2cee4ffd2cee4ffd2cee4ffd3cfe4ffd2cee3ffd4d1e4ffd5d2e3ffd5d2e3ffd5d2e3ffd5d2e3ffd6d3e4ffd6d3e4ffd7d4e5ffd7d4e5ffd7d4e5ffd7d4e5ffd6d3e4ffd6d3e4ffd6d1e3ffd6d0e3ffd6d0e2ffd6cbdcffbcb0baffa7969aff948280ff907d7aff8c7672ff8b746eff88716dff856e66ff846c64ff826962ff7f6560ff785e59ff755a57ff846764ff9a7d7affb59d9bff968582ff7b6c6affd3c4ccffded4e3ffe0d6e5ffe3d7e5ffe3d7e5ffe2d8e7ffe2d9e7ffe1d7e6ffe1d7e4ffe2d6e1ffd1c4c7ffb3a29cffb0a09aff84756fff786662ff796563ff735f5dff746060ff7e6b6effbeb1baffded3e1ffded4e1ffe0d7e3ffe0d7e3ffe0d7e3ffe0d7e3ffe0d7e3ffdfd5e3ffe0d5e4ffe0d5e4ffe0d5e4ffe0d4e4ffdfd5e4ffddd4e1ffddd4e1ffdcd3dfffdcd3dfffdcd3dfffdcd3dfffdcd3dfffc3c6deffc6c8e0ffc6c8e0ffc6c8e0ffc5c7e0ffc5c7e1ffc5c7e1ffc7c9e1ffc7cae1ffc7cae1ffc7cae1ffc7cae1ffc8c9e1ffc9cbe1ffc9cbe1ffc9cbe1ffc9cbe1ffc9cbe2ffcccbe3ffcccbe4ffcccbe4ffcdcce4ffcccde3ffcccde3ffcecce3ffcecce3ffcecce3ffcecce3ffcecce3ffd3cce2ffd7cde1ffdeccdcffd8bcc5ff9d7f87ff51353cff34171fff361520ff34131fff270d16ff1d080fff251017ff5e444affceb3baffe4d1dfffd7cfe0ffcecce1ffcecce1ffcfcde2ffcfcde2ffcfcde2ffd0cde2ffd2cde2ffd2cee4ffd2cee2ffd3d0e1ffd3d0e1ffd3d0e1ffd3d0e1ffd4d1e2ffd5d2e3ffd6d3e4ffd6d3e4ffd6d3e4ffd6d3e4ffd5d2e3ffd4d1e3ffd4d0e4ffd4cfe3ffd3ccdfffcbbdc8ffa79398ff9f8687ff957d7aff8f7571ff8d716dff8a706aff876d66ff836b63ff816962ff816860ff7e645eff7c615dff7c615dff917470ffad918bffad9691ff83736fff7e7271ffd4c9d2ffddd4e4ffe0d6e7ffe1d5e5ffe2d6e5ffe1d6e4ffe0d6e5ffe0d6e5ffe1d6e5ffe0d5e0ffd1c4c7ffb2a29bffb0a099ff83746eff73635fff786864ff746461ff756563ff807172ffb8aeb8ffdad3e2ffddd4e3ffe0d6e5ffded5e4ffded5e4ffded5e4ffded5e4ffddd4e4ffddd4e4ffddd4e4ffddd4e4ffddd4e5ffddd4e4ffdcd3e1ffdcd3e1ffdbd2e0ffdbd2e0ffdbd2e0ffdbd2e0ffdbd2e0ffc2c7e0ffc4c7e1ffc5c7e2ffc5c7e2ffc5c7e2ffc5c7e2ffc5c7e2ffc6c9e1ffc6c9e1ffc6c9e1ffc6c9e1ffc6c9e1ffc8c8e1ffc9c9e0ffc9c9e0ffc9c9e0ffc9c9e0ffc9c9e0ffcbcae2ffcbc9e3ffcbc9e3ffcbcbe3ffcbcce2ffcbcce2ffcdcbe2ffcdcbe2ffcdcbe2ffcdcbe2ffcdcbe2ffd3cbe0ffdbccdcffe8cbd4ff794d4cff653431ff4c201bff401b15ff381610ff31100cff2a0d0bff240b0cff250c0eff321619ffa0858bffdfcad8ffd6cedfffcecce1ffcecce1ffcecce1ffcecce1ffcecce1ffcfcce1ffd1cce2ffd2cee4ffd0cde1ffd1cde1ffd1cde1ffd1cde1ffd1cde1ffd2cfe2ffd3d0e3ffd3d0e3ffd3d0e3ffd3d0e3ffd3d0e3ffd4d1e2ffd4d1e3ffd2cee2ffd3cee1ffd3cad8ffc0adb4ffa28789ff9a7b7aff967774ff91716eff8f6f6cff8b6d69ff866964ff836862ff856963ff836862ff826561ff846662ff8b6e6aff9a7d79ffae958effa7958dff7d716bff9a9093ffd3ccd8ffdad4e4ffdfd6e7ffe0d4e4ffe1d4e2ffe0d5e3ffe0d4e5ffe0d5e4ffe0d5e4ffe0d4e1ffd1c4c7ffb6a198ffb39f98ff89756fff74625eff7a6a67ff796966ff7a6a6aff807173ffb6abb7ffd8d0e0ffdbd3e3ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffdcd4e4ffd9d2e1ffd9d2e1ffd9d1dfffd8d1dfffd8d1dfffd8d1dfffd8d1dfffc2c7e0ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc5c7e0ffc5c7e0ffc5c7e0ffc5c7e0ffc5c7e0ffc7c7e1ffc7cae0ffc7cae0ffc7cae0ffc7cae0ffc7cae0ffc9c8e0ffcac8e2ffcac8e2ffcacae1ffcacae1ffcacae1ffcbcae1ffcccbe2ffcccbe2ffcccbe2ffcccbe2ffd3cbe0ffdfcad8ffbd999eff663736ff5c2a27ff4c1f1aff3f1913ff31110aff2c0c07ff240906ff200708ff22080bff2c0d13ff4f303affceb6c7ffd4cadcffcfcce0ffcfcce1ffcecce1ffcecce1ffcecce1ffcfcbe2ffd0cde3ffd1cde2ffd0cde2ffd0cde2ffd0cde2ffd0cde2ffd0cde2ffd0cde2ffd0cde2ffd1cee4ffd1cee4ffd1cee4ffd1cfe4ffd1d0e4ffd1d0e2ffd2cee0ffd4cbdbffd0c2caffbaa1a5ffa48487ff947174ff917070ff8e6c6aff8f6c6aff8c6a68ff886865ff886865ff8a6966ff896865ff896664ff8d6a66ff96736effa78682ffaf958eff9c8882ff7b6c6bffbaafb7ffd2cbdbffd9d2e4ffded5e6ffded2e2ffe1d5e1ffe1d5e3ffddd4e3ffded5e4ffdfd5e4ffded4e0ffd3c3c5ffb8a096ffb59e97ff927d76ff76625cff7d6967ff7b6967ff7a6a6bff817176ffc3b9c5ffd9d1e1ffdbd3e3ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffddd4e5ffdcd4e5ffdcd4e4ffdcd4e4ffdcd4e4ffdcd4e4ffdbd3e5ffd9d2e3ffd9d2e3ffd7d1e1ffd8d1e0ffd8d1e0ffd7d1e0ffd7d1e0ffc2c6e2ffc2c5e1ffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc5c7e1ffc6c7e0ffc6c7dfffc6c7dfffc6c7dfffc6c7dfffc7c8dfffc8c8dfffc8c8dfffc7c9dfffc7cae0ffc7cae0ffcacae1ffcacae1ffcacae1ffcacae1ffcacae1ffd1caddffddc1ccff6a3e40ff602f2dff53231fff4a1f19ff39150dff280903ff200803ff1d0602ff1c0504ff1e0306ff21040bff32101cff927486ffd8c7d9ffd2cbdfffd3cde3ffd1cce2ffd0cde2ffd0cde2ffd0cde3ffd0cce4ffd0cde2ffd0cde2ffd0cde2ffcfcde2ffcfcde2ffcfcde4ffcfcde4ffcfcde4ffd0cee5ffd0cee5ffd0cee5ffcdcde5ffcdcee2ffcdcddfffd1cad9ffcbbcc3ffb39d9fffa48a8aff98777aff906d6fff8d6a6aff8b6968ff8a6866ff8a6866ff896764ff876462ff886261ff896362ff8e6765ff946d6aff9e7873ffb5918bffb49793ff95807dff796a6dffd5cbd7ffd5cde0ffdad3e5ffddd3e6ffddd3e6ffded4e4ffdfd5e4ffded5e4ffdcd6e5ffdbd6e5ffdcd5e2ffdccdc8ffb7a092ffb7a194ff9b867cff7a655bff7f6b66ff7b6967ff79686bff7f6f76ffccc1cfffdbd3e3ffdad2e2ffdbd3e4ffdad2e2ffdad2e2ffdbd3e4ffdcd4e5ffdbd3e3ffdbd3e3ffdbd3e3ffdbd3e3ffdad2e3ffd9d2e4ffd9d2e4ffd7d1e3ffd5d0e2ffd7d1e1ffd6d1e0ffd5d0e1ffd5d0e1ffc1c5e1ffc2c5e0ffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc3c6e0ffc3c6e0ffc3c6dfffc3c6dfffc3c6dfffc3c6dfffc3c6dfffc5c7deffc6c9dfffc6c9dfffc6c9dfffc6c9dfffc6c9dfffc7cae0ffc7cae0ffc7cae0ffc7cae0ffc7cae0ffcdc8daffc3a3aeff6f4040ff602e2aff4e1e1aff481e18ff310e06ff210500ff1a0700ff190500ff1b0303ff1d0105ff1d0107ff2f0e1bff8d6b7fffdac3d5ffd2cadcffd2cae1ffd0cbe1ffcecce1ffcecce1ffcfcce1ffcfcce1ffcecce1ffcfcce1ffcfcce1ffcecce1ffcecce3ffcccde3ffcccde3ffcccde3ffcccde3ffcccde3ffcccde4ffcbcde5ffcacddfffccc9d5ffcabdc2ffbda5a3ffa58884ff967878ff937274ff8f6c6eff896767ff886663ff876462ff856260ff836160ff815d5dff855d5dff896060ff8f6664ff966e69ffab837cffc39c95ffac8f8bff867374ff81757dffd1cbdbffd4cfe1ffd8d2e5ffdbd3e5ffdbd3e5ffdcd4e6ffdcd3e6ffdad4e6ffd9d6e7ffd7d7e7ffd9d4e2ffdacccbffb7a099ffbda59bffa59082ff7a6657ff816d65ff7f6b6aff736266ff897980ffcfc4d2ffdbd3e3ffd9d3e3ffd9d4e4ffd8d3e3ffd8d3e3ffd9d4e4ffd9d4e4ffd9d4e4ffd9d4e4ffd9d4e4ffd9d4e4ffd7d3e5ffd6d1e5ffd6d1e5ffd5d2e5ffd3d0e1ffd2d0e1ffd3d0e1ffd2d0e1ffd1d1e1ffbfc4e0ffc1c4dfffc1c3deffc1c3deffc1c3deffc1c3deffc1c3deffc1c3dfffc1c3e0ffc1c3e0ffc1c3e0ffc2c4e1ffc2c4e1ffc3c6e1ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc4c6dfffc5c7dfffc5c7dfffc5c7dfffc5c7dfffc5c7dfffc6c9e0ffc6c9e0ffc6c9e0ffc6c9e0ffc6c9e0ffccc7daff886771ff734344ff5c2a26ff481814ff441a13ff39150dff290b03ff210900ff1d0500ff1b0100ff1c0005ff1e010bff2c101eff887387ffd4c6daffd1cadfffd1cbe1ffcfcbe1ffcfcce1ffcfcce1ffcfcce1ffcecce1ffcecce1ffcfcce1ffcecce1ffcecce1ffcdcde3ffcccde3ffcccde3ffcbcce2ffcbcce2ffcbcce2ffcbcbe3ffcccce0ffcdccdbffc7bec5ffc0aeafffb19692ff9d827cff937574ff8e6c6eff876465ff856363ff836161ff82605fff805d5fff7d5c5eff7f5d5fff876062ff8a6264ff916867ff9e7671ffba928bffbd9790ff927774ff7a6d6fffbcb6c0ffd1cedfffd2d0e3ffd6d1e5ffd8d2e4ffd8d2e4ffd9d3e5ffdbd3e5ffdad3e5ffd7d5e5ffd4d6e5ffd8d3e1ffd7c9c9ffbba4a1ffc4aca4ffaa9286ff826b5cff856f68ff7d6a68ff746467ffae9ea5ffd8cedcffd9d2e2ffd9d3e4ffd7d3e4ffd5d2e3ffd5d2e3ffd6d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd5d2e5ffd4d1e4ffd4d1e4ffd4d1e4ffd0cfe1ffd0cfe0ffd2d0e1ffd2d0e1ffd0cfe0ffbec3dfffc0c2e0ffc0c2e1ffc0c2e1ffc0c2e1ffc0c2e1ffc0c2e1ffc0c2dfffc0c2dfffc0c2dfffc0c2dfffc1c3e1ffc1c3e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc3c5e1ffc4c6dfffc4c6dfffc4c6dfffc4c6dfffc4c6dfffc5c7e0ffc5c7e0ffc5c7e0ffc5c7e0ffc5c7e0ffcac5d9ff75545fff6b3c3cff52211dff451511ff411711ff452018ff38170eff280b00ff200600ff1c0200ff1e0106ff22050eff2d1625ffb9acc1ffcec9dfffcecae0ffcfcce1ffcecbe1ffcecbe1ffcecce1ffcdcbe2ffcdcbe2ffcdcbe2ffcdcce3ffcdcbe2ffcccce2ffcbcce2ffcacce2ffc9cce3ffcacae3ffcacae2ffcacae1ffcdc9dfffcdc6d7ffc7bfc9ffbdaeb0ffad9794ff9e8580ff917873ff8c716dff876a69ff836362ff806060ff7e5e5fff7d5c5eff7e5e5eff7c5c5cff7f5f5fff876364ff8c6869ff936d6bffac8580ffbf9790ffaa847fff897171ff8e8a8cffcbcbd8ffced0e1ffd2d0e3ffd5d2e3ffd7d3e4ffd7d3e4ffd8d3e4ffd8d2e4ffd8d3e4ffd6d4e3ffd5d4e2ffd9d2dbffd2c1c1ffcfb4adffcfb4abffae9589ff877062ff857069ff786563ff938386ffd7c7cfffd8cfddffd8d3e4ffd6d3e5ffd6d3e4ffd5d2e3ffd5d2e3ffd6d3e4ffd6d3e4ffd5d2e3ffd5d2e3ffd5d2e3ffd5d2e3ffd4d1e3ffd2cfe3ffd2cfe2ffd1cfe2ffd0cfe1ffd0cfe0ffd2cfe0ffd1cfe2ffd0cfe2ffbdc2deffbfc1dfffbfc1e0ffbfc1e0ffbfc1e0ffbfc1e0ffbfc1e0ffc0c2e1ffc0c2e1ffc0c2e1ffc0c2e1ffc1c3e2ffc1c3e2ffc1c3e0ffc1c3e0ffc1c3e0ffc1c3e0ffc1c3e0ffc2c5e1ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc3c6e0ffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc2c5dfffc9c3d9ff674651ff5a2b2dff4c1917ff451411ff512722ff512d26ff4c2a22ff2d0d04ff250701ff220500ff23060bff270d18ff6b5768ffd1c9dfffcfcbe1ffcfcce1ffcecce1ffcccde3ffcccce2ffcccbe2ffcbcce2ffcbcce2ffcbcbe2ffcbcce2ffcbcce2ffcbcce2ffcacce2ffc9cce2ffc9cce4ffc9c9e3ffc8c7e2ffccc7deffcec4d5ffc6b8c1ffbaacafff9c8b89ff99847dff947f77ff89746cff846d66ff816462ff7f5f5fff7e5f5fff7d5e5eff7e5e5eff7d5e5fff7b5d5eff7f6062ff876868ff927272ff977774ffb2918bffb18d87ff92726eff908084ffc1c1cbffcacdddffcccfe1ffd0cfe2ffd4d1e3ffd6d3e4ffd6d3e4ffd6d3e4ffd7d3e4ffd7d3e4ffd6d2e0ffd5d3dfffd7cdd3ffb9a49fffddbcadffdabbaeffb59b8fff897265ff89736dff756363ffb4a6acffdaced7ffd6cfdeffd6d2e4ffd5d3e5ffd5d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd3d1e3ffd1d0e3ffd1d0e3ffd1d0e3ffd0cfe2ffd0cfe2ffd0cfe2ffd0cfe1ffcfcfe1ffbcc2dfffbdc1e1ffbec1e1ffbec1e1ffbec1e1ffbec1e0ffbec1e0ffbec1e0ffbec1e0ffbec1e0ffbfc2e1ffbfc2e1ffbfc2e1ffbfc2e0ffbfc2e0ffbfc2e0ffc1c3e2ffc1c3e2ffc1c3e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc2c4e1ffc9c2daff825a68ff501c23ff4e151aff481518ff491f1eff401e1bff371512ff330d0fff2e050cff2d040dff270817ff6d5b6bffd2c7dcffcec8e0ffcdcbe2ffcdcbe3ffcccce3ffcacce3ffc9cce2ffcacce2ffcbcce2ffcbcce2ffcbcce2ffcbcce2ffcbcce2ffcbcce2ffcacce2ffc9cce2ffc8cbe3ffc6c8e3ffc7c6e1ffccc3d7ffc9b8c4ffb29fa2ff9c8687ff907b79ff8d7771ff86706cff7f6964ff7e6560ff7d615eff7c5f5dff7a5d5dff795b5cff7b5d5eff7a5d5dff795d5dff7f6363ff886c6cff997b7cffa78a89ffa28784ff8f7675ff907c7effc6bfc8ffcccedeffcacde0ffcdcde2ffcfcde2ffd2d1e3ffd4d2e3ffd4d2e3ffd5d2e3ffd5d2e3ffd5d2e3ffd6d2e0ffd5d1ddffd8ced2ffb7a19fffdbbaadffdabbafffb59a90ff887067ff8a7471ff7a6a6bffcabdc4ffd5ccd7ffd6d0e1ffd5d2e3ffd3d2e3ffd1d0e3ffd2d1e3ffd2d1e3ffd2d1e3ffd2d1e3ffd2d1e3ffd2d1e3ffd2d1e3ffd2d1e3ffd1d0e3ffd1d0e3ffd1d0e3ffd1d0e3ffd0cfe2ffd0cfe2ffcfcee1ffcfcee2ffcfcee2ffbac1dfffbbc2dfffbdc2deffbdc2deffbdc1e1ffbdc1e0ffbdc1e0ffbcc0dfffbdc1e0ffbdc1e0ffbdc1e0ffbdc1e0ffbdc1e0ffbec2e1ffbec2e1ffbfc2e1ffc0c2e1ffc0c2e1ffc0c2dfffc1c3e0ffc1c3e0ffc1c3e0ffbfc4e0ffc1c5e1ffc2c4e1ffc2c4e1ffc2c4e1ffc1c5e1ffc1c5e1ffc4c5dcff774f5eff551c27ff50151dff491419ff401315ff3c1315ff381113ff390b15ff390519ff3a071dff36152dffc4bed4ffc8c6e1ffc7c7e3ffc8c9e4ffc9cae6ffcacbe7ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8cbe3ffc8c9e1ffc7c6e1ffc9c3deffc1b3c6ffa18c94ff977e80ff937878ff8a7070ff826868ff7e6465ff7c6263ff7c6262ff7c615dff775c5aff785d5cff75595aff775c5cff775c5cff795e5eff806565ff9a7e7effaa8e8fff9b8081ff8d757aff85757fffc1b2bfffccc6d8ffc8c9e1ffc9cce4ffcdcbe4ffd0cde3ffcfcee2ffd1d0e3ffd2d2e4ffd3d1e4ffd3d1e4ffd3d1e4ffd4d1e3ffd6d0e1ffdbced5ffbda4a5ffd6b4b2ffd1b4aeffa38981ff866e68ff7f6c6affa5979bffd3c7cfffd6cfdcffd5d2e3ffd6d3e4ffd2d0e2ffcfd0e2ffcfd1e3ffcfd1e3ffd1d0e5ffd1d0e5ffd1d0e4ffd1d0e3ffd1d0e3ffd1d0e4ffd0d0e5ffcecfe4ffcecfe4ffcecfe4ffcecfe4ffcfcfe4ffcdcee2ffcecfe3ffcecee2ffb9c2dfffbac1dfffbac1dfffbac1deffbac1e0ffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbbc1dfffbdc1e0ffbdc1e0ffbec1e0ffc0c2e1ffc0c2e1ffc0c2dfffc1c3e0ffc1c3e0ffc1c3e0ffbfc4e0ffc1c5e1ffc2c4e1ffc2c4e1ffc2c4e1ffc1c5e1ffc1c5e1ffc3c5dcffab8e99ff663640ff57222eff4d1b25ff44131eff3e0e17ff43121bff441222ff39051fff6c3954ffc3a4c0ffcac8e2ffc7c9e6ffc7c9e6ffc7c9e6ffc8cae7ffc8cae6ffc8cbe3ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8cbe1ffc8c9e0ffcac5deffc9bed6ffaf9dacff978184ff8f7675ff8a6f6dff826667ff7e6264ff795d61ff7a5d62ff7a5e5fff7a5f5bff775c5aff765b5aff75595aff775c5cff775c5cff7e6262ff9d8282ffa88e8fff937a80ff887378ff8b7881ffccc0ccffd2c9d9ffcdc8dcffc7c8e0ffc8cbe3ffcdcbe4ffd0cde3ffd0cfe3ffcfd1e3ffd0d1e3ffd1d0e4ffd2d1e6ffd2d1e6ffd3d0e6ffd5cde7ffdfccd3ffccaca8ffdbb8b2ffd5b7aeffa2877fff886f6aff7a686affc3b7c0ffd4cbd5ffd3cfddffd5d2e3ffd6d3e4ffd2d0e2ffcfcfe3ffcecfe4ffcecfe4ffcecfe4ffcecfe6ffcecfe5ffcecfe5ffcecfe5ffcecfe5ffcecfe6ffcecfe6ffcecfe5ffcecfe5ffcecfe5ffcdcee2ffcdcee2ffcecee2ffcfcee2ffb9c2dfffbac1dfffbac1dfffbac1deffbac1e0ffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbac1dfffbcc0dfffbec1e0ffbec1e0ffbec1dfffbfc3dfffbec3dfffbfc4e1ffbec5e1ffbec5e1ffbfc4e0ffbfc4e0ffbfc4e0ffbfc4e0ffbfc4e0ffc4c5deffc8bed0ffaf99abff846c7dff4d3547ff4d3647ff4f3648ff402638ff563e51ffab94acffcab3ccffd2c1dbffccc8e4ffc8cae7ffc8cae7ffc8cae7ffc8cae7ffc8cae6ffc7cae1ffc7cae0ffc7cae0ffc7cae0ffc7cbe0ffc8cbe1ffc7cae0ffc7cae0ffc7cae0ffc7cae0ffc8cbe1ffc9c9e1ffcac2d9ffbfb2c2ff97858dff8f7a7aff89716eff806765ff7c6061ff775b5cff74585cff74575cff755a5cff745956ff735855ff755a59ff755a5bff957a7aff9c8181ffaf9494ffa88d8fff927c81ff8b7b85ffaea1afffcec5d5ffcdc9dcffcbc9ddffc9c9e0ffc7c9e2ffc8cbe3ffcdcbe4ffd0cde3ffcfcfe3ffced0e2ffcfd1e3ffcfd1e4ffd1d0e5ffd1d0e5ffd2cfe5ffd5cde9ffd2bcc2ffcfada5ffddb9afffdcbcb2ffa88c82ff917973ffa39396ffcfc9d6ffd1cddcffd2cfe0ffd2d1e4ffd2d2e4ffd0cfe3ffcdcee3ffced0e4ffced0e4ffcdcee5ffcdcee5ffcdcee4ffcdcee4ffcdcee4ffcdcee4ffcdcee5ffcdcee5ffcccfe4ffcccfe4ffcccfe4ffcccfe4ffcdcee3ffcdcee3ffcecee3ffb8c0deffb9bfdfffb9bfdfffb9bfdfffb9bfdfffb9c0ddffb9c0ddffb9c0ddffb9c0deffb9c0deffb9c0deffb9c0deffb9c0deffb9c1dfffbac1dfffbbc1dfffbdc1e0ffbdc1e0ffbdc1e0ffbcc1e0ffbdc3e1ffbdc3e1ffbcc3e1ffbdc5e2ffbec4e1ffbec4e0ffbec4e0ffbec5e0ffbec5e0ffc2c6e1ffc8cae1ffc8c7ddffbebcd2ffaaa9beff9290a5ff9391a6ffa19cb1ffc5c0d6ffcdc9dfffccc8dfffcccae2ffc9c9e3ffc7c9e6ffc7c9e6ffc7c9e6ffc7c9e6ffc7c9e5ffc7cae2ffc7cae0ffc8cae0ffc8cae0ffc8cae0ffc7cae0ffc7cae0ffc8cae0ffc8cae0ffc8cae0ffc8c9e0ffc8c7e1ffc9c0d2ffa49298ff887472ff7f6964ff7e6662ff785f5cff715656ff6b5050ff6c5054ff6e5257ff715657ff705752ff755c57ff826966ff997e7dffae9494ffac9594ff978183ff89767cffaa9ba8ffc7bfcfffc9c5d9ffc8c6dcffc7c8e0ffc7c9e0ffc7cae1ffc7cae2ffc8cae3ffcdcbe4ffcfcbe2ffcecee2ffcccfe2ffcdd0e4ffcdd0e4ffcfd1e5ffcfd0e5ffd2cfe6ffd4cce9ffcdb6bdffceaca2ffd6b5adffcdb0aaff9a817dff9d8887ffc2b5c0ffd3cfe3ffd0cfe4ffcfcfe2ffcfd0e4ffcfd0e4ffcecfe5ffcdcee5ffcccfe4ffcbcee3ffcccee4ffcccde6ffcccde5ffcccde5ffcccde5ffcccde5ffcccee5ffcbcde6ffcbcee5ffcbcee5ffcbcee5ffcbcee3ffcccfe4ffcccfe4ffcdcee4ffb7c0deffb8bfdfffb9bfdfffb9bfdeffb9bfdfffb9bfddffb9bfddffb9bfddffb9c0ddffb9c0ddffb9c0ddffb9c0ddffb9c0ddffb9c1deffb9c1deffbac1deffbdc1e0ffbdc1e0ffbcc0dfffbcc2e0ffbdc3e1ffbdc3e1ffbbc4e1ffbbc4e1ffbec5e1ffbec5e0ffbec5e0ffbec5e0ffbec5e0ffc1c6e0ffc5c9e1ffc7cae0ffc7cae0ffc7cae1ffc7cae0ffc7cae0ffc4c8deffc8cbe1ffcacae1ffcacae1ffcacae2ffc7c9e3ffc6c8e5ffc6c8e5ffc6c8e5ffc6c8e5ffc6c8e5ffc7c8e3ffc8c8e3ffc8c9e1ffc8c9e1ffc8c8e2ffc8c9e3ffc8c8e3ffc8c9e2ffc8c9e1ffc8c8e2ffc8c9e3ffc9c7e2ffc5b8c5ff97807dff886e67ff7e655eff7e6762ff715956ff6e5453ff694f4fff715759ff7e6266ff907776ff9d867fffad978fffb19a94ffaa918eff9a8584ff98868aff9f959fffcbc5d6ffc7c4d9ffc6c5ddffc4c6ddffc5c7dfffc6c8e0ffc6c9e1ffc7cae2ffc6cae2ffc7cae2ffcdcbe4ffd0cde3ffcfcfe4ffcdd0e4ffcdd0e4ffcdd0e4ffcdd0e6ffcdd0e6ffd0cfe6ffd3cce8ffccb5bcffcdac9fffceb2a9ffc0a8a7ff927d80ffa39199ffd1c6d5ffd0cee3ffcfd0e7ffcecfe5ffcecfe6ffcecfe6ffcdcee6ffcdcee4ffcccfe4ffcbcfe4ffcacee4ffcacde5ffcacde5ffcacde5ffcacde5ffcacde5ffcacde5ffcacde6ffcacde7ffcacde7ffcacde6ffcacde5ffcacee4ffcbcde3ffcccde3ffb6bfdfffb7bedfffb8bedfffb8bedeffb8bedeffb8bedfffb8bedfffb8bedeffb9c0ddffb9c0ddffb9c0ddffb9c0ddffb9c0ddffb8c0ddffb8c0ddffb9c0ddffbbc0dfffbcc0dfffbbc1dfffbbc2e0ffbbc2e0ffbbc2e0ffbbc4e1ffbbc4e1ffbcc3e0ffbdc3dfffbdc3dfffbdc3dfffbdc3dfffbfc5dfffc2c7e1ffc3c8e2ffc3c8e2ffc3c8e2ffc3c8e2ffc4c8e2ffc4c7e1ffc4c7e0ffc6c8e1ffc6c8e1ffc6c8e2ffc5c7e3ffc6c8e5ffc6c8e5ffc6c8e5ffc6c8e5ffc6c8e5ffc4c7e4ffc4c7e4ffc4c7e3ffc4c7e2ffc4c7e4ffc5c8e5ffc5c8e5ffc5c8e3ffc5c8e3ffc5c8e5ffc5c8e5ffc6c5deffc3b3baffa48a80ff9f8178ffaf938bffaf9691ffb09591ffa28783ffa68c88ffaa8f8cffb29793ffb09793ffb29b94ffaf9891ffa9938fff9b878aff92858effaaa3b4ffbfbed5ffc2c5dfffc3c6e1ffc3c6e1ffc3c6dfffc6c7deffc7c7deffc7c8dfffc6c9e1ffc5c9e1ffc8cae4ffcbcce4ffcccde4ffcccee4ffcdcee4ffcdcee4ffcdcfe4ffcdd0e5ffcdd0e6ffcecee4ffd1cae5ffceb9c3ffcbab9effc7a79affb69e99ff8e797effb5a2b0ffd1cadcffcccde3ffcdcee6ffcecfe6ffcdcee5ffcecfe7ffcdcee8ffcdcee7ffcccee7ffcacde5ffcacde5ffcacde5ffc9cce4ffc9cce4ffc9cce4ffc9cce5ffc9cce5ffc9cce6ffc9cce6ffc9cce6ffc9cce5ffc9cce5ffc9cce4ffc9cbe4ffcacbe4ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfdeffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb9c0deffb9c2dfffb9c2dfffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbcc4e1ffbcc4e1ffbcc4e1ffbcc4e0ffbcc4e0ffbcc4e0ffbcc4e0ffbcc4e0ffbdc4e1ffbec4e2ffc0c5e3ffc0c5e2ffc0c5e2ffc0c5e2ffc2c6e4ffc2c6e4ffc2c6e4ffc3c7e6ffc3c7e6ffc3c7e6ffc1c6e4ffc1c6e4ffc1c7e4ffc1c7e4ffc1c7e5ffc2c8e6ffc2c8e6ffc2c8e5ffc2c8e5ffc2c8e6ffc3c9e7ffd5d4ebffeedde1ffdcc0b7ffc5a59cffb69a94ffb29b98ffb89d98ffb39997ffb29997ffb49a98ffb39895ffae9592ffa48d8cffa38e8fffad9da2ffbab3c2ffbfbdd4ffc2c3deffc3c6e2ffc3c6e2ffc3c6e2ffc3c6e2ffc3c6e2ffc3c6e0ffc4c7dfffc4c9e2ffc3cae2ffc5c9e3ffc8cbe5ffcacce4ffcacce4ffcbcde5ffcbcde5ffcccee6ffcccde3ffcccde2ffcacee3ffcdcee4ffd0cbe3ffcdbac5ffcbac9effc09a8cffaa8e8bff8d787effbaacbfffcdcadfffcacce4ffcbcde5ffcbcde5ffcbcde5ffcdcee8ffcbcee7ffcccee8ffcccee8ffcacde7ffcacde7ffc9cce5ffc8cbe3ffc9cce4ffc9cce4ffc8cbe5ffc9cce6ffc9cce6ffc9cce4ffc9cce4ffc9cce4ffc9cce5ffc8cbe3ffc8cbe3ffc7cae2ffb5bddfffb6bee0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfe0ffb6bfdeffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb9c2dfffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbbc4e1ffbbc4e1ffbbc4e1ffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbac3e0ffbcc4e1ffbcc5e2ffbcc5e2ffbcc5e2ffbdc5e2ffbec4e2ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffc0c7e4ffc0c7e4ffc0c7e4ffc0c7e4ffc0c8e5ffc3c8e5ffc9cae2ffd4cedaffcdc0c4ffbeaeb3ffc4b6bdffc0b4bcffbda6acffbfacb3ffc0afb7ffb3a3abffb8a8afffb7a8afffbaaeb8ffc6bdc9ffc3bed0ffbcc0d9ffbac2e1ffbfc5e4ffc2c6e2ffc2c6e2ffc2c6e2ffc2c6e2ffc2c6e2ffc3c8e2ffc5c9e3ffc4c9e4ffc4c9e5ffc5c8e5ffc7cae7ffc8cce6ffc8cce6ffc8cce6ffc8cce6ffc8cce5ffcbcce2ffcbcce1ffcacce2ffcdcee4ffd1cce2ffd0bdc5ffcfaf9fffc19b8effa38685ff917e86ffcac4d8ffcacbe1ffc9cce4ffc9cce4ffc9cce4ffcacde5ffcbcce7ffcacde6ffcacde7ffcacde7ffcacde7ffc9cce6ffc9cce5ffc8cbe4ffc9cce5ffc9cce6ffc8cbe6ffc8cbe6ffc8cbe5ffc8cbe4ffc8cbe4ffc8cbe4ffc8cbe4ffc7cae2ffc7cae2ffc7cae2ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb6bee1ffb6bfdfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb9c1e0ffb9c2e0ffb9c2e0ffb9c1e0ffb9c1e0ffb9c1e0ffbac3e1ffbac3e1ffbac3e1ffbac3e1ffbac3e1ffbac3e1ffbac3e1ffbac3e1ffbac3e0ffbbc4e1ffbbc4e1ffbbc4e1ffbbc4e1ffbcc4e1ffbec4e2ffbec5e2ffbec5e2ffbfc6e3ffbfc6e3ffbfc6e3ffbec6e5ffbec6e5ffbec6e4ffbfc6e3ffbfc6e3ffbfc6e3ffc0c7e4ffc0c7e4ffc0c7e4ffc0c7e4ffc0c7e4ffc3c7e3ffc1c4dcffc0c4daffc0c4daffc0c4daffc1c4d7ffc6bfd2ffc4bed0ffc4bfd3ffc3bed2ffc5c0d4ffc2c0d4ffc0c0d7ffc1c3dbffbfc4deffbcc5e3ffbbc5e4ffbec6e4ffc1c7e2ffc1c7e2ffc1c7e2ffc1c7e2ffc1c7e3ffc3c8e3ffc4c9e4ffc3c9e4ffc3c9e5ffc3c9e5ffc6cae6ffc8cbe5ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffcbcce4ffcbcce2ffcacce2ffcdcee4ffd1cce2ffd3c1c8ffd2b2a2ffc69f93ff9e8280ff9c8993ffcec9deffc9cbe1ffc8cbe3ffc8cbe5ffc8cbe5ffc9cce4ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc8cce6ffc6cbe5ffc6cbe5ffc6cbe5ffc5cae6ffc5cae6ffc5cae6ffc5cae4ffc5cae4ffc5cae4ffc5cae4ffc4c9e3ffc4c9e3ffc4c9e3ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb6bee2ffb6bfe0ffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb6bfdeffb5beddffb5beddffb6bfdeffb8c0dfffb8c0dfffb7c0dfffb7c0dfffb7c0dfffb9c1e1ffb9c1e1ffb9c1e1ffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb8c0dfffb9c1e1ffbac2e1ffbac3e1ffbac3e1ffbac3e1ffbbc2e2ffbdc3e2ffbdc3e2ffbdc3e2ffbec4e4ffbec4e4ffbec4e4ffbcc5e4ffbcc5e4ffbdc5e4ffbec4e2ffbec4e2ffbec4e2ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbfc6e3ffbdc5e1ffbec5dfffbdc5dfffbcc5e0ffbbc5dfffbdc5deffc0c4deffc3c3ddffc3c4deffc3c4deffc4c4deffc2c5dfffc0c6e0ffbfc6e3ffbfc6e3ffbfc7e6ffbec7e6ffc0c7e5ffc0c7e3ffc0c7e3ffc1c8e4ffc1c8e4ffc1c8e4ffc3c9e4ffc4c9e4ffc3c9e5ffc3c9e5ffc4cbe6ffc5cae5ffc8cbe5ffc8cbe5ffc8cbe5ffc8cbe5ffc8cae5ffcacce4ffcacce3ffc9cce4ffcccfe6ffd1cee4ffd3c1c8ffd4b4a4ffcea79affab8e8dffa5929bffcfcadfffc9cae3ffc8cbe5ffc7cbe7ffc7cbe6ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc9cce6ffc8cce6ffc6cbe5ffc6cbe5ffc6cbe5ffc5cae6ffc5cae6ffc5cae6ffc5cae4ffc5cae4ffc5cae4ffc5cae4ffc4c9e3ffc4c9e3ffc4c9e3ffb6bee2ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bddfffb6bfdfffb6bfdfffb6bfdfffb6bfdfffb6bfdfffb5bedeffb5bedeffb5bedeffb5bedeffb5bedeffb5bedeffb4bddcffb4bddcffb5bedeffb6bfdfffb6bfdfffb6bee1ffb6bee1ffb6bee1ffb8c0e2ffb8c0e2ffb8c0e1ffb6bfdfffb6bfdfffb6bfdfffb6bfdfffb6bfdfffb7c0e0ffb8c1e1ffbac3e2ffbac2e2ffbac2e2ffbac2e2ffbcc2e2ffbcc2e2ffbdc3e3ffbdc3e3ffbdc3e3ffbdc3e3ffbbc4e3ffbbc4e3ffbcc3e3ffbdc3e1ffbdc3e1ffbdc3e1ffbec4e2ffbec4e3ffbec4e3ffbec4e3ffbec4e2ffbcc4e0ffbbc4dfffbbc4dfffbbc4dfffbbc4dfffbcc4dfffbec3dfffc1c4dfffc1c3e1ffc0c3e0ffc2c4e0ffc1c7e3ffc0c8e4ffbfc7e4ffbfc8e4ffc0c9e5ffc0c8e6ffc0c9e5ffc0c9e5ffc0c9e6ffc1cae7ffc1cae6ffc2c9e7ffc3c9e6ffc2c8e4ffc3c9e5ffc3c9e5ffc4cbe4ffc4cbe4ffc6cbe6ffc6cbe6ffc6cbe6ffc6cbe6ffc7cbe5ffc9cce5ffc9cce5ffc8cde5ffcccee5ffd2cee3ffcab9bfffd0b1a2ffd2ac9fffb29592ffad99a2ffcec9deffc9cae3ffc8cbe5ffc6cbe7ffc6cbe7ffc6cbe6ffc7cbe7ffc8cbe7ffc9cce8ffc9cbe8ffc9cbe8ffc9cbe8ffc6cbe7ffc6cbe6ffc6cbe6ffc6cbe6ffc5cae6ffc5cae6ffc5cae6ffc5cae4ffc4c9e3ffc4c9e3ffc4c9e3ffc3c8e2ffc3c8e3ffc3c8e4ffb4bde3ffb5bde2ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde1ffb5bde0ffb5bddfffb5bddfffb5bddfffb5bddfffb4bedfffb3bddfffb3bddfffb3bddfffb3bddfffb3bddfffb3bee0ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb5bfe1ffb7c0e1ffb8c1e3ffb8c1e3ffb8c1e2ffb9c1e2ffb9c1e2ffbac2e3ffbac2e3ffbac2e3ffbac2e3ffbac2e3ffbbc2e2ffbac2e2ffbac2e2ffbcc3e3ffbcc3e3ffbcc3e3ffbcc3e3ffbcc3e3ffbcc3e4ffbcc3e4ffbcc3e4ffbdc4e4ffbcc3e2ffbcc3e2ffbcc3e2ffbec4e4ffbec6e5ffbfc4e2ffbec4e2ffbdc3e1ffbdc3e1ffbfc4e0ffc0c5e2ffbfc6e3ffbfc6e3ffc0c7e4ffc0c7e4ffbfc7e4ffc0c7e4ffbfc8e4ffbfc7e4ffc0c9e6ffc0c9e5ffc0c9e5ffc1c9e7ffc1cae6ffc1cae6ffc0c9e4ffc3cbe6ffc6cbe7ffc5cce7ffc5cce7ffc6cbe7ffc5cce7ffc5cce7ffc8cce7ffc8cce6ffc8cce6ffcdcce3ffd3cce0ffd3c5cfffcfb1a9ffcfaa9dffb59896ffae9ba3ffcec9ddffc9cae3ffc6cbe6ffc5cce7ffc5cce7ffc5cce7ffc6cbe7ffc6cbe7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc4cbe6ffc4cbe6ffc4cbe6ffc3c9e5ffc3c9e5ffc3c9e5ffc3c9e5ffc1c8e5ffc1c8e5ffc1c8e5ffc1c8e5ffc1c8e5ffc1c8e6ffb1bde2ffb3bee2ffb3bee1ffb3bee1ffb3bee1ffb3bee1ffb3bee1ffb2bce1ffb2bce2ffb2bce2ffb2bce2ffb2bce2ffb2bde1ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb2bde0ffb3bde0ffb3bde0ffb3bde0ffb3bde0ffb3bde0ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb4bee1ffb3bee1ffb2bfe1ffb2bfe1ffb2bfe1ffb2bfe1ffb2bfe1ffb3bee1ffb5bfe2ffb5bfe2ffb6c0e3ffb6c0e3ffb7c0e4ffb6c0e2ffb7c2e3ffb7c2e3ffb7c2e3ffb7c2e3ffb9c1e3ffbac2e4ffb8c3e4ffb8c3e4ffb8c3e4ffb9c3e4ffbbc3e5ffbac2e3ffbac2e4ffbac2e4ffbac2e4ffbac4e5ffbcc4e6ffbcc4e6ffbcc4e6ffbcc4e6ffbcc4e6ffbcc4e6ffbec4e6ffbcc3e5ffbbc3e5ffbbc3e5ffbcc5e5ffbec6e6ffbcc5e6ffbfc5e6ffbfc6e5ffbfc7e5ffc0c9e6ffbfc7e4ffc0c9e6ffc0c9e6ffc1cae7ffc1cae7ffc1cae7ffc1cae7ffc1cae7ffc1cae7ffc1cae5ffc3cae9ffc7cceaffc5cce9ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffcdc9deffd0c8dbffd2c7d5ffcbb2adffc7a8a1ffa28889ffc2b3beffcbcbe1ffc6cbe5ffc6cbe7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce8ffc5cce8ffc5cce8ffc5cce8ffc5cce8ffc4cae6ffc4cae6ffc4cae6ffc3c9e5ffc3c9e5ffc3c9e5ffc1c8e6ffc1c8e6ffc1c8e6ffc1c8e6ffc1c8e6ffc1c8e6ffc1c8e6ffb0bce1ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde1ffb0bddfffb0bddfffb0bddfffb0bddfffb0bddfffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb2bde1ffb2bde1ffb2bde1ffb2bde1ffb2bde1ffb2bde1ffb1bee0ffb1bee0ffb1bee0ffb1bee0ffb1bee0ffb2bee1ffb4bee1ffb4bee1ffb5bfe2ffb5bfe2ffb6c0e3ffb5bfe1ffb5c0e0ffb5c0e0ffb5c0e0ffb5c0e0ffb6bfe0ffb7c0e1ffb6c1e1ffb6c1e1ffb7c2e3ffb7c2e3ffbac2e4ffb9c1e3ffb9c1e3ffb9c1e3ffb9c1e3ffb9c3e4ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbac2e4ffbac2e4ffbac2e4ffbac4e5ffbcc4e6ffbac4e5ffbcc4e6ffbdc5e4ffbfc7e5ffc0c9e6ffbfc7e4ffc0c9e6ffc0c9e6ffc1cae7ffc1cae7ffc1cae8ffc1cae7ffc1cae7ffc1cae7ffc1cae5ffc3cae9ffc5cbe9ffc5cce8ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffcdc9deffd0c8dbffd7cadaffdfcacbffc1a9a8ffa49399ffd0c9d6ffc6cbe5ffc4cce8ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce7ffc5cce8ffc4cce9ffc4cce9ffc4cce9ffc4cce9ffc3cbe8ffc3cbe8ffc3cbe8ffc3cbe8ffc1cae7ffc1cae7ffc1cae7ffc0c8e6ffc0c8e6ffc0c8e6ffc0c8e6ffc0c8e6ffc0c8e6ffc0c8e6ffadbbe0ffafbcdfffafbcdfffafbcdfffafbcdfffafbcdfffafbcdfffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffaebde0ffaebde0ffaebde0ffaebde0ffaebde0ffb0bde0ffb0bddfffb0bddfffb0bddfffb0bddfffb0bddfffb1bde1ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffafbee1ffafbee1ffafbee1ffafbee1ffafbee1ffb1bee1ffb2bfe1ffb2bee1ffb4bfe1ffb4bfe1ffb4bee1ffb4bfe1ffb4bfe0ffb4bfe0ffb4bfe0ffb4bfe0ffb4bfe0ffb4bfe0ffb4bfe0ffb4bfe0ffb6c1e1ffb6c1e2ffb8c1e3ffb9c1e3ffb9c1e3ffb9c1e3ffb9c1e3ffb8c1e3ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffb9c3e4ffbbc3e5ffb9c3e4ffbbc3e4ffbcc5e4ffbec6e4ffbfc7e4ffbfc7e4ffc0c9e6ffc0c9e6ffc1cae7ffc1cae7ffc1cae8ffc1cae7ffc1cae7ffc1cae7ffc1cae5ffc2c9e8ffc5cbebffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffcccadfffd4cfe2ffdfd5e7ffddd1deffbcb1baffb7b0bdffcdcbdcffc6cde7ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cbe9ffc2cbe9ffc2cbe9ffc2cbe9ffc2cbe9ffc1cae9ffc1cae8ffc1cae8ffc1cae8ffc0c8e7ffc0c8e7ffc0c8e7ffbfc8e5ffbfc8e5ffbfc8e5ffbfc8e5ffc0c9e6ffc0c9e6ffc0c9e6ffadbce0ffadbcdeffadbcdeffadbcdeffadbcdeffadbcdeffadbcdeffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebddfffaebddfffaebddfffaebddfffaebddfffaebddfffb1bde1ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffafbee2ffafbee2ffafbee2ffafbee2ffafbee2ffb0bee1ffb1bde0ffb1bde0ffb2bfe1ffb2bfe1ffb2bfe1ffb2bfe0ffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb3c0e0ffb4c0e0ffb6c0e1ffb9c1e3ffb9c1e3ffb9c1e3ffb9c1e3ffb9c2e3ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffb9c3e4ffbbc3e5ffb9c3e4ffbbc3e4ffbcc5e4ffbec6e4ffbfc7e4ffbec6e3ffc0c8e5ffc0c9e6ffc1cae7ffc1cae7ffc1cae8ffc1cae7ffc1cae7ffc1cae7ffc1cae5ffc3cae9ffc4cbebffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffcccae0ffd2cde1ffdad3e9ffdad3e9ffd0cce3ffc8c7dfffc9c9e6ffc4cae7ffc2cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc1cbe8ffc1c9e9ffc1c9e9ffc1c9e9ffc1c9e9ffc0c8e8ffc0c8e8ffc0c8e8ffc0c8e8ffbfc7e6ffbfc7e6ffbfc7e6ffbfc7e4ffbfc7e4ffbfc7e4ffbfc7e4ffc0c9e6ffc0c9e6ffc0c9e6ffadbce0ffadbcdeffadbcdeffadbcdeffadbcdeffadbcdeffadbcdeffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebddfffaebddfffaebddfffaebddfffaebddfffaebddfffb1bde1ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffb1bde2ffafbee2ffafbee2ffafbee2ffafbee2ffafbee2ffb0bee1ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb1bde0ffb2bfe0ffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb3c0e0ffb4c0e0ffb6c0e1ffb9c1e3ffb9c1e3ffb9c1e3ffb9c1e3ffb9c3e4ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbbc3e5ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffb9c3e4ffbbc3e5ffb9c3e4ffbbc3e4ffbcc5e4ffbec6e4ffbfc7e4ffbec6e3ffc0c8e5ffc0c9e6ffc1cae7ffc1cae7ffc1cae8ffc1cae7ffc1cae7ffc1cae7ffc1cae5ffc3cae9ffc4cbebffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffc3cce9ffcccae0ffcec9ddffcfc9e0ffd1cce7ffcfcceaffcac9e8ffc7c9e8ffc3cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc2cbe8ffc1cae7ffc0c8e8ffc0c8e8ffc0c8e8ffc0c8e8ffc0c8e8ffbfc7e6ffbfc7e6ffbfc7e6ffbec6e5ffbec6e5ffbec6e5ffbec6e3ffbec6e3ffbec6e3ffbec6e3ffbfc8e5ffc0c8e5ffc0c9e6ff87882cff83812bff8b8d2affafaa57fff4dac0ffd8b9a7ffbfa595ffb7a397ffb09e94ffaa978cffa4958aff9e9187ff93897fff8b8177ff7b736aff605a56ff433c3aff5f5250ffa89281ffceb8a6ffc9b3a3ffc3ada1ffbba79bffb3a294ffb0a091ffaa9b8cffa59787ffa49686ffa39585ffa09383ff9c8e80ff9a8c7eff988a7dff988a7dff978a7cff988b7dff958a7cff93887aff908478ff887f75ff837b71ff817970ff7f776eff817970ff837b73ff888077ff8b837bff8b837bff8a8579ff8e887cff938c81ff958e83ff948f83ff959084ff938e7fff959084ff938e7eff8e8879ff8a8276ff898176ff877f74ff827b71ff837b72ff847d74ff8f9131ff8b8a2bff939531ff918e39fff2dbbaffe5c6baffc4a797ffbba495ffb6a195ffaf9b8fffa49489ff9e9186ff988f82ff8e867aff7f776dff615b56ff3f3837ff413230ff9c857affcdb6aaffc7b1a3ffc1aa9effb8a499ffb1a092ffac9d8effa89b8bffa69989ffa29585ff9f9282ff9f9181ff9b8e80ff988a7dff97897cff988a7dff96887bff928679ff8d8275ff8b8073ff887d72ff817870ff7f776fff7e766fff7d766eff7e776fff817971ff867e75ff89827aff888177ff888377ff8b847aff8f897eff918c80ff938e82ff959084ff948f83ff969185ff948f7fff918b7cff90897cff8f877cff8b8477ff888076ff837b72ff857e74ff898d2bff90932aff8e902fff8b8a33ffd9c79cffecccc2ffc7a999ffbea493ffbba597ffb4a092ffab9a8effa29489ff999184ff90897cff847c73ff66605bff443c3cff574845ffb0998fffc8b1a6ffc4aea0ffbaa599ffb19f93ffad9c8effa79889ffa49686ffa09383ff9e9082ff9b8e80ff9c8e7fff988a7dff95877cff94867bff92857aff8b7f74ff857b73ff7e776eff7d756cff7c736aff7b736cff7a736cff79736cff79736cff7a746dff7b756eff827b75ff867f78ff847e74ff837e72ff868074ff888377ff8c877bff928d81ff948f83ff969085ff948f83ff938f80ff928c7dff928b7fff918a7fff918a7dff8c8579ff867f74ff857e74ff7f7f2aff7b7c20ff7f7f29ff7d7c25ffb5a869ffefd2c1ffcdaf9effbda290ffbda595ffb9a496ffb39e91ffaa998eff9f9489ff968b80ff877e75ff716966ff645c5cff7c6c69ffb9a398ffc5aea3ffbca79affb3a294ffaa9d8fffa79789ffa29384ff9e9182ff9c8e80ff9a8c7fff97897dff918579ff8e8176ff8e8178ff8c8076ff867a72ff7f746dff7d766fff7d776eff7d756dff797169ff776f68ff746e67ff746e67ff736d66ff746e67ff767069ff7f7972ff7f7b74ff7c7770ff7c766fff807b71ff858074ff8a8579ff908b7fff948f83ff948f84ff938e83ff938e80ff928c80ff928b81ff928b80ff928b82ff8f877fff8a827aff877f76ff707122ff6f7120ff737425ff767125ff887e37ffe9cdafffd4b4a2ffc0a391ffbfa595ffbba698ffb6a295ffae9d91ffa89a8fff9c9287ff8c8378ff827975ff7d7271ff988a85ffb8a79bffbcaa9dffb6a596ffad9f8fffa5998cffa19286ff9e9082ff9a8c7fff97887eff94867dff91827aff8b7e75ff887c73ff887d73ff867b72ff81766fff7d736dff7f7771ff7e786fff7a7369ff7a7269ff7a736bff7b756cff7c766eff77716bff736c67ff716b64ff746e67ff756f69ff736e69ff78736eff7a746fff7d7870ff837d76ff8a847bff908b80ff938e82ff938e7fff918c7cff918a7dff928b81ff938b82ff938c83ff938c83ff8f877fff8c847bff6f6f20ff66681aff66681cff6f691fff71661fffbda572ffdabca7ffc3a393ffc4a798ffc4ab9effbda79cffb3a196ffae9d93ffa2958bff93887eff8e827cff938782ffa79991ffb4a598ffb7a697ffb2a192ffa89b8cffa19588ff9c8e82ff998c7fff96887cff92837aff908179ff8d7f76ff857a70ff81786dff81776dff82786fff847a73ff857b75ff887f77ff898177ff82786eff82796fff857d72ff868075ff837e74ff7e766fff7a726cff756f69ff706a65ff706a65ff6e6763ff6d6963ff716a65ff77706aff7d7870ff837e76ff8b867eff918c81ff928d7eff918c7eff918a7fff938c82ff958d84ff958d84ff938c83ff908880ff8e877eff757320ff747220ff757320ff7b7222ff827524ff9f8947ffe2c4abffc7a595ffc4a697ffc7ad9effc2ac9effb9a69bffb3a297ffaa9c92ffa1948bff988a83ff9e9087ffac9d93ffb0a094ffb19f93ffae9c90ffa5968aff9e9085ff978980ff96877fff918279ff8d7e75ff8a7c73ff897b72ff82776dff7f756cff81776dff867d74ff928881ff928780ff91877eff938a7fff8d8479ff8a8076ff8c8379ff8b8479ff888077ff847b73ff80766fff7d766fff746d68ff726c67ff756e69ff68645eff6a635dff726a65ff76706bff7b756fff857f77ff8d887fff908b7fff908a7fff90897fff918a81ff938c83ff918a81ff928a82ff8f887fff8d857dff8d832cff958c2effa0952fff948628ff9a8928ffab9634ffe6c99fffd0ae9dffc3a695ffcaaf9effc7afa0ffc1ac9effbba89bffb3a598ffad9f93ffa6978cffa3938affa8998effab9b8effac9a8effa9978bffa39086ff9b8b80ff94847aff8e8177ff897d74ff887c73ff84786eff83776dff81776dff82796fff857a72ff90857eff998d86ff968a83ff978a83ff9a8e84ff978c82ff948a80ff93897fff8d857aff8a8279ff867d75ff82776fff80766eff7c736cff79726bff706c64ff6e6863ff6a6560ff69635dff6f6763ff776f6aff7e7871ff857f78ff89837bff8b857dff8c857dff8f877eff918981ff90887fff8f877eff8e867eff8d867dffb19e37ffb4a038ffc9b242ffb69e32ffbca436ffd0b540ffe1c176ffe1bfa7ffcaab98ffcaac9bffcbb1a0ffc8afa1ffc3ac9fffbca99effb5a69bffaea095ffab9c90ffa89a8effaa998effa8968bffa39186ff9b8a80ff95867dff8e8077ff897c73ff867a70ff84786eff7f756bff7f756bff837a6fff8a8177ff938880ff988e86ff988e86ff968a83ff978b83ff998d84ff9b9086ff988c84ff988a84ff91867dff8e847cff898078ff857a71ff80766dff7d746bff7c746cff7a736bff77716cff706b64ff6a675eff69655eff716a65ff766f6aff7e7871ff827d75ff857f78ff878078ff888279ff8d867dff8d857cff8c847dff8c847eff8b837dffcfb33dffc5a935ffcdb036ffceb034ffd9b93effe8c848ffe3c353ffeacaa4ffceae9bffcaab98ffcdb19fffccb2a2ffc8b0a2ffc1ab9effbba79cffb3a398ffaea092ffa7998dffa6978dffa39288ff9d8d82ff95867dff8f8178ff8b7d74ff877a71ff84776eff84776dff7e7369ff81766cff8c8177ff998e85ff9f938bffa1948bff9c9189ff998d85ff968a83ff988c83ff998e84ff988b83ff978882ff93867eff8f847cff897f77ff867b73ff81776dff7d746bff7e756aff80766bff7d766fff78716aff726e66ff69665eff68645fff726c67ff7a736dff7d7770ff7f7972ff817b73ff807a72ff878078ff8a827bff89817bff89817aff89817affd9bb3bffdabf3dffddc23dffdec63affe0c73bffe5cc3cffe3cb43ffe8c980ffd5b59fffcbad99ffcdb19fffceb4a4ffcab1a3ffc4ac9fffbea79affb6a398ffae9f90ffa6978bffa09287ff9e8f84ff988a80ff91827aff8c7d74ff887a71ff82786eff81766cff82756cff7f7369ff877b71ff988a81ffa8998effa99a8fffa89990ffa1948dff9c9088ff958980ff92887eff968b82ff968881ff95857fff92837dff8e837bff897f76ff82786fff81776dff7e756cff7c756bff7d7669ff7d766bff7d756cff767068ff69655fff68625fff6d6462ff756b68ff78716dff79726fff7b7570ff7c766fff837b75ff887f79ff888079ff877e78ff877e78ffe0c739ffdec638ffe0c937ffead540ffe4d13dffe2cf3affe6d341ffead456ffdebf9effccad9affd0b29effd4b6a5ffcfb3a4ffc9aea1ffc2a79bffbaa296ffb29f91ffa39487ff9c8d82ff998b80ff92847aff8c7e75ff887c73ff84786eff7f756bff7f756bff82766cff81756dff92857effaa9991ffb19e93ffb19f94ffaf9f94ffa79890ff9f9189ff978a81ff91887dff978b82ff94867fff91827cff90817bff8e827aff8a7e77ff857a72ff80776eff7d756eff7b746cff7d756bff7d756cff80766cff7e766aff766f68ff696260ff686060ff6b6463ff6d6764ff706a68ff756e6cff79726fff807a74ff857d77ff847c76ff847c76ff847c76fff6e346fff3e245fff4e344fff3e345fff1e144fff1e145fff1e046ffeedc47ffe3c681ffd0b099ffceaf9cffd5b6a3ffd4b5a5ffcbb0a2ffbea598ffb6a093ffb29e90ffa39487ff988a7fff94877bff8d8076ff887c72ff85796fff82766dff7f746bff7e7469ff7f736aff85776fffa4938affb7a297ffb9a297ffb8a297ffb5a297ffab9b93ffa19289ff978a81ff91887dff958a81ff938680ff90817aff8f7e78ff8d7f79ff8c7e79ff877b74ff827870ff7e7670ff7b736eff7c746dff7c746dff80776fff82796eff7e766eff716a67ff696261ff696361ff6b6562ff6d6765ff716a68ff766f6dff7d7771ff837b74ff837b75ff837b75ff847c75fffaf74bfff2ea45ffe1d938ffdfd239ffe5d640ffded03affe3d43affe2d537ffe8d552ffd6b78fffcdae9affd4b6a2ffd4b6a4ffcbb0a1ffbda497ffb69e93ffaf998effa89689ff9a8b7fff94867aff8d8175ff887c73ff857970ff81756cff7c7368ff7d7269ff85776effa08e83ffb49f93ffbca498ffbea699ffbda59affbba59affb2a195ffa7968aff9d8e84ff958a80ff968b82ff978982ff91847dff8f807aff897a74ff867872ff847672ff827671ff7f746fff796e6aff776f6bff7a716dff7c746dff7e7870ff7b756eff756f6bff6d6663ff68625fff6d6664ff6e6765ff6e6765ff706a67ff78716dff7d7771ff817873ff807872ff837b74fff1ea46ffeee847ffebe448ffe4da47ffe1d648ffd7cc3effcfc33bffcfc33bffd0c542ffdcc389ffcbac97ffcfb29dffd3b6a3ffc9ad9effbca497ffb39d90ffac968affa69486ff9c8e7fff96897dff8e8276ff887c72ff84786fff80746bff7c7066ff81746bff928379ffb09d92ffb6a093ffbda699ffc2a89cffc1a99effbda89dffb5a598ffaa9a8dffa09087ff998d83ff9a8c85ff998a84ff91847dff8e7f79ff8a7c75ff83776fff7f736fff7c736fff7a736cff756a67ff706663ff746b68ff776f6cff79736fff797370ff756f6cff6f6866ff68615fff6d6664ff6e6765ff6e6765ff706a67ff766f6dff78726eff7a726eff807671ff817972ffded440ffd5cd3dffcfc63bffc7bc39ffcabe40ffcabf40ffc4b83dffc3b83dffc3b938ffd1bd67ffcfb394ffcdb199ffd1b39effc8ab99ffbca495ffb29b8effaa9388ffa69285ff9d8e7eff998c7fff92857bff8a7e76ff847770ff80746cff7d7168ff877a72ffa29186ffb49f92ffb9a296ffbba397ffc0a69bffc5aca2ffc4ada2ffc0aba0ffb7a297ffab988dff9c8e83ff93857bff92827bff90817aff8e7f78ff8d7f77ff82776fff79706bff766f6aff756f68ff746b66ff6d6360ff6f6663ff716a68ff766f6dff77706eff716b68ff6c6664ff686260ff6c6563ff6e6765ff6e6765ff6f6866ff726c69ff766f6cff7a726eff807570ff7f766fffe4e45fffe7e85fffdedf59ffe7e852ffebea51ffebe956ffeae85affeae860ffebe860ffede66effe1cc95ffcfb296ffcfb29bffc9ad99ffbfa495ffb29a8effac9589ffa89284ffa49082ff9e8c7dff9a8b7eff92837aff8a7b74ff83746eff81756eff92847dffb09d92ffb79f93ffbea69affc0a89bffc4aa9fffc9b0a6ffcab1a6ffc9b2a5ffc4ada1ffb7a297ffa09284ff918377ff8d7e78ff8d7e78ff90817aff90817aff887c74ff776d68ff6e6761ff6d6760ff767069ff706862ff6c635eff6b6562ff706a67ff746d6bff716a68ff6e6765ff6a6260ff6a6360ff6f6765ff6f6866ff6d6563ff706967ff746d6aff7a736dff807670ff7c746bffcdd57affcad175ffccd377ffd1d978ffd4dd79ffcfd77affced675ffcdd574ffced675ffd0d374ffdfd38fffd3ba9affd0b49cffc9ac99ffc0a594ffb49d8fffae998affaa9586ffa69082ff9f8c7dff9b8b7dff95867cff8c7e74ff84756eff897b73ffa09087ffbaa397ffc1a79affc8ada0ffc8aea2ffc8afa3ffd0b6aaffcfb5a9ffceb5a8ffc8b0a4ffbfa99fffac9c8fff9d8d82ff988781ff988782ff988781ff978781ff9a8b84ff8a7e78ff7d746dff746f65ff777067ff746c65ff6c625fff696261ff6d6664ff6f6967ff706967ff6f6866ff6c6362ff6c6362ff706765ff716966ff706766ff716a66ff756d69ff7a726eff7e7570ff7d746dffcad37effcad27bffcbd47bffcbd37cffc9d27dffc7cf7affc9d27dffc8d17dffc9d17effc9cf7fffd3cf8bffdbc7a3ffd0b39dffcaac9bffc1a597ffb9a090ffb19b8bffab9687ffa89484ffa18f7eff9e8d7dff96877bff8e8176ff877a6fff8f7f75ffa69388ffbfa69affcdb1a4ffd7b9adffd5b8abffd6b9acffd3b9adffcdb5abffcab3a8ffc7b0a5ffc6aca1ffbda496ffb39c90ffae978effb0978effaf978effb19891ffaf9991ffa18f87ff92857dff847b72ff7e756cff786d67ff6e6461ff68605eff68615eff6c6462ff706a67ff716a68ff6f6764ff6e6664ff6f6564ff6f6764ff716866ff746c68ff786f6aff79716cff7b716bff8c7b68ffc8caadffc8caaeffc8cba7ffc8cba7ffc8caaaffc7c9a9ffc9ccafffc9cbb0ffcacab5ffcbc9b9ffcdc8c3ffdeced0ffd6bcafffcdae9cffc3a697ffbea392ffb79e8effb1998affaa9588ffa69384ffa19081ff99897bff908175ff897c71ff918278ffb09d91ffc1a89affd6b9acffdec0b3ffdbbdb0ffdec0b3ffd4b9acffc8b0a5ffc2aaa0ffbea69bffc2a79bffc2a698ffbca296ffbda297ffc6a89cffc3a69affc8ab9fffbfa498ffb49c92ffa29087ff8f8077ff83766eff7b6e68ff706461ff69605eff68605eff696260ff6d6765ff716b69ff716a68ff706967ff6e6664ff6e6564ff706967ff746d69ff756d68ff796e68ff807363ffbaa963ffc3c3d5ffc4c4d8ffc4c5d2ffc4c5d3ffc5c5d8ffc4c4d7ffc4c5d8ffc4c6d7ffc6c6d5ffc6c5d8ffc4c6daffcbc5dcffe0cbcaffd3b5a6ffc8ab9affc4a897ffbfa395ffb79d8fffae988affaa9588ffa59183ff9f8d7eff968677ff8d7e70ff948477ffb09c8fffc0a698ffd5b8abffdabdb0ffdabdb0ffddc0b2ffd4b8acffc4aaa0ffbca398ffb49b91ffb79b90ffb99d91ffb9a094ffc1a59bffcaada0ffccb0a4ffd5b7aaffcfb3a6ffc1a99effad9a8dff98887dff82766eff786b66ff716662ff685f5eff675f5eff67605eff6c6563ff706967ff706967ff706967ff736c6aff716867ff736a66ff756d69ff726765ff7e6d66ffbcab83fff8f27fffbdc1dbffbec0dbffbec1d9ffc0c2dcffc1c2e0ffc1c3e0ffc2c5e1ffc2c5e2ffc3c6e2ffc4c6e3ffc5c8e5ffc7c6e3ffd2c9dfffdfc8cbffd0b4acffc3a89bffbca295ffb49d90ffb39c8fffa99688ffa59384ffa29082ffa09081ff938374ff958475ffac988affc3a99cffd2b6a9ffd5b8abffd4b8abffd8bbaeffceb5a9ffbaa89dffb4a399ffa99a8fffa59589ffa49386ffa59085ffae968affb7a193ffc8aa9bffd6b2a3ffd9b4a6ffd3b4a6ffc4aa9bffa08c7eff85786fff786b67ff6e6462ff665e5eff67605eff66605eff6b6462ff716a68ff716a68ff746d6bff7d7774ff78716fff6f6662ff776965ff7e6c67ffa2908dffdacbc9ffece2d2ffbcbfe2ffbbbfe1ffbbbfe1ffbec0e3ffc0c1e3ffc2c3e5ffc2c4e6ffc2c5e7ffc3c5e6ffc4c6e8ffc3c6e9ffc2c5e9ffc6c6ebffdacfedffe3ccd5ffcfb5aaffc2a79affb69e92ffb49e91ffac998bffa49385ffa08d80ff9f8d80ff978678ff9d8a7cffaf998cffbfa598ffceb2a5ffd3b6aaffd7baadffd5bbaeffc8b0a5ffbca89effb4a49cffab9a91ffa9988cffa69589ffa59285ffa18d80ff9d8a7dffa48b7cffb49587ffc09f92ffc9aa9cffc6aa99ffad9585ff8b7c74ff776b67ff6c6361ff635d5eff645e5cff645e5cff686260ff716b68ff716b68ff78726fff898280ff7e7673ff70645fff7d6c64ffa38e8bffe0cbcaffecdbd9ffeedfdaffbdc0e6ffbdbfe7ffbec0e8ffc2c1e9ffc4c2eaffc6c4ecffc6c5edffc3c3edffc4c3ebffc3c4ebffc1c4ebffc2c5edffc4c6efffcbc8f0ffded2ebffe5d2d0ffceb5abffc0a79affbaa195ffb09b90ffa79589ffa08e83ff9a887cff978578ffa38e7fffb9a194ffbda293ffc7aa9cffd3b6a9ffd7baacffceb5a6ffc4ada1ffbda69effb39e97ffab9890ffab9991ffab978cffa79488ffa18e81ff98857aff8c786dff8d776aff977d70ffa58d81ffb19a8bffa79184ff857872ff746966ff6a605fff655959ff615a58ff625c59ff6a6462ff706967ff706967ff787270ff8f8885ff7b6f6aff806d66ffa58e83ffecd6cbfffbe9d7fffbe9d4fffeecd3ffc5c2ebffc5c4ecffc5c4ecffc7c5edffcac6efffcbc7efffcac6efffc9c5eeffc8c3efffc6c4efffc5c5eeffc5c5eeffc5c5eeffc8c6f0ffcfcaeeffd9ceedffe7d2e2ffd1b6b0ffc2a798ffb89e93ffab968cffa5938bff9d8a81ff998377ffa18a7bffbfa393ffbea393ffc9ac9cffd4b6a7ffd7bcabffc9b1a1ffbfa89cffbb9f97ffb09890ffa89189ffa79188ffa18c85ff9e8a83ff9c8981ff96837cff908078ff957f78ff8f766eff847068ff8b7970ff8f7e76ff85776fff766863ff6c5e5bff695d5cff615a57ff615b59ff696260ff6f6866ff706967ff827a77ff968d84ff86756cffb19a8fffedd8c8fffbead3fffbedd0fffbedd0fffcedd0ffd0ccf7ffd0cdf7ffd0cdf7ffd0ccf7ffcfcaf5ffcfcaf5ffd0cbf6ffcfcaf5ffcdc8f5ffcbc8f6ffcbc8f7ffcbc8f7ffcbc8f7ffcbc8f7ffcec9f7ffd2caf6ffdacef3ffe6d3e4ffd3b9b1ffbea293ffb0998cffa9948cff9e8981ff988375ff9e8979ffb59c8bffc4a796ffcaad9cffd8bba9ffdcc0acffcbb3a1ffbba698ffb29a91ffa7918aff9e8982ff9a8780ff93827cff907f79ff8c7c75ff887872ff84766fff8b7973ff89716cff7f6d66ff7c6c64ff7f7068ff85756eff7f6f6aff6d5e5cff675a5aff605755ff5f5856ff696260ff6e6764ff6f6865ff847c76ff948a7affb19e90fff3e0c9fffcedcffffbeecefffbeecffffbeed0fffcedcfffdad6f5ffdbd6f4ffdbd6f4ffdad6f4ffd9d6f4ffdbd8f7ffdddaf9ffdad8f6ffd8d5f6ffd4d3f6ffd4d0f5ffd4d0f5ffd4d1f5ffd4d1f5ffd6d1f5ffdbd4f6ffddd5f4ffe7dcf4ffeedde4ffddc7bdffbea797ffb2998dffa48c7fff9a8576ff9b8676ffab9283ffc7aa98ffcdb09dffd9bcaaffdec3aeffcdb5a3ffb9a496ffaa978dffa18e87ff998780ff91817aff8c7d76ff8a7c75ff867871ff82746dff75655fff74615cff806965ff82716aff77675fff76665eff76645fff857472ff7d6d6cff6c5f5eff695e5eff635a59ff6b6462ff6f6864ff706863ff857b72ffad9f89fff1e0c8fffdeed0fffbeed0fffaeed0fffbeed0fffbeed0fffcedcfffe9ebfbffe8e8fcffe8e8fcffe6e6fcffe5e3fcffe5e2fbffe5e2fbffe4e1faffe3e0faffe3e0faffe2dff9ffe2dffaffe1defaffe3def7ffe7dff2ffefe3edfff1e6ebfff4e9e6fff9ecdffff9ecdbffe2d4beffbfa896ffb69a8bffa08a79ff958070ffa38b7dffc1a495ffceaf9bffdbbeaaffe2c4b4ffd5b9acffbca59bffa4938bff988a83ff92837eff8c7d78ff8b7d77ff8f847cff93887fff9b8b82ffa9948bffb39a93ffb69a94ffb79d96ffaf948dffa28b85ff917c78ff70605cff8e7f7cff706462ff736967ff706967ff6c6563ff6e6764ff756b66ff998d7ffff8edd1fffbefd0fffaeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fff0ecf5ffefebf7ffefebf7fff0e8f6ffefe4f5ffeee3f3ffece2f3ffeae1f3ffebe3f2ffede4f1ffece4f0ffebe3f1ffebe3f0ffeee6ebfff5e7e3fffdebd8fffbebd6fffcedd7fffdeed7fffbefd8fffdf1ddfff5e3d1ffd2b8a7ffb29d8affa08b7aff988473ffaa9182ffcdb09dffdfc1aeffe1c3b3ffd6b9adffc2a8a0ffad9791ff978781ff90827eff8e807dff8d7f7bff958881ff9f9087ffac968dffb8a097ffc5aa9fffd1b4a6ffd5b6a9ffcbaba0ffbc9f97ffa68e87ff89756fff8e7d79ff7e6e6cff7b6e6cff7f7574ff6d6664ff6e6665ff7c726cffd8ccbafffaf0d2fffbf0d1fffaefd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fff9e9d8fff9eadafffaebdbfffbe8dafffce6d8fffce6d8fffde7dcfffde9ddfffeebdafffdecd9fffdecd9fffdebd9fffcecd9fffcecd5fffdebd5fffdebd5fffcecd6fffdecd6fffbebd4fffcedd6fffef0dafffef2defffbecdbffe1cebaffbea795ffac9484ffa18979ffc1a493ffddbfaaffe1c4b3ffd7baadffc9aea5ffbaa19cffa3928cff91847fff938580ff978781ff9a8a82ff9f8c82ffa48f84ffb79e92ffc4aa9dffd5baaaffe2c2b2ffe3c3b4ffd9bbaeffc4a79dff997b74ff785d57ff654f4bff746260ff8e817fff706764ff706865ff7f746affeadec8fffbf0d3fffcf1d3fffcf1d3fffceed0fffbeed0fffbeed0fffbeed0fffbeed0fffce7d1fffce6d2fffde7d4fffce7d4fffce8d6fffbe7d5fffce6d5fffde7d5fffde7d5fffee9d4fffeead3fffeebd4fffbead4fffcebd4fffcebd4fffdecd3fffcebd7fffcebd7fffcebd7fffbebd5fffbedd8fffcf1e0fffbf1e3fffef1e3fff8e6d8ffddc3b6ffc0a393ffb79b89ffcfb19effe6c7b5ffdbbbacffd3b6a9ffc2a9a1ffac9a93ffa09088ffa29288ffa7968bffa7968bffa7968affa48f85ffa28c80ffab9387ffb79f90ffd3b3a0ffeac9b3ffedccb2ff9f7664ffa4796cffa68579ff735e57ff8b7c77ff716662ff625653ff6e635eff938476fffae8d2fffcebd1fffbefd0fffbf0d1fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffae8d0fffce6d0fffde7d1fffde6d3fffde7d5fffde7d5fffce7d5fffce7d5fffbe7d4fffce9d2fffbe8d1fffbe9d2fffbebd1fffaecd2fffaecd2fffbead0fffeebd3fffdebd5fffbecd5fffaebd5fffaecd8fffbefdffffbf1e4fffdf2e6fffef2e3fffeeddffff4e0d2ffd1b6a7ffc1a394ffd7b6a5ffe0c0adffd7baaaffc6ada3ffb6a299ffb29f95ffb19e92ffb5a295ffb5a295ffb4a295ffb59d94ffa78f86ff9f887fffa48a81ffb79988ffdcbba5fff8d7bdffeac4b0ffe1b8a4ffae8e80ff826e66ff82756fff514542ff544644ff6b5b55ffbca99afffbe9d2fffcebd0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffbeed0fffdedd4fffcead2fffcead2fffce8d4fffde7d5fffde8d5fffce8d5fffce9d6fffbe8d5fffce9d2fffcebd4fffcebd4fffcedd4fffcedd2fffbead0fffde8cffffcead2fffcecd6fffbeed8fffceed9fffceedbfffbefe2fffbf0e6fffcf0e6fffcf2e4fffdf1e3fffef1e4fffdeddfffecd4c6ffcfb3a4ffdbbda9ffd9bbaaffcbb0a3ffbba69bffb7a399ffb9a799ffbfad9fffc3afa1ffc5aea0ffcab0a4ffc3a69dffb59a92ffad938bffa5887cffb09181ffdbbcabfff4d5c2ffe7c6b1ffb19688ff7c6a62ff6c615dff5f5350ff594b4aff665754ffbeaea1fffbebd4fffbedd0fffbedd0fffcedd0fffbedd0fffbeed0fffbeed0fffbeed0fffbeed0fffcf1d8fffcefd6fffaeed5fffcecd5fffcead4fffce9d4fffbebd4fffaecd5fffaecd5fffbedd6fffdeed8fffdeed8fffdeed6fffdeed4fffcebd1fffee7cffffde8d0fffdedd6fffeeedafffcefddfffcefe2fffcefe6fffcf0e6fffcefe6fffcefe5fffcefe5fffdefe5fffdefe6fffdeee3fff8e8dbffe9d5c2ffdcc4b0ffcfb4a3ffbaa194ffb29d93ffb9a59affc4b0a4ffcdb8aaffceb4a5ffd4b9a8ffd4b8a9ffccb0a3ffb79f96ffa49089ff927d76ff9b847effbaa098ffe0c5b9ffb4a199ff776a64ff786d69ff7d6f6dff726562ff5e5252ff7c6966ffefdaccfffde8cffffce9cffffbe9d0fffbecd1fffbedd1fffbeed0fffbeed0fffbeed0fffeeddbfffdecdcfffceeddfffcefdbfffcefd8fffbeed7fffaedd6fffaedd6fffdeed6fffceed6fffbefd6fffbefd6fffbefd6fffbefd4fffaebd3fffde8d3fffde7d2fffcedd8fffcefddfffbeee2fffaeee4fffaeee5fffaeee5fffaeee6fffbede6fffcede6fffbede7fffbede7fffcede7fffcede6fffbede5fff2e0d1ffe2c8b6ffbfa592ffae978cffb29d96ffbea79fffcdb2a6ffd8b8a6ffd8b7a6ffe0c3b5ffe3c6baffc4aaa1ffa9968fff917e77ff7f6e6aff766563ff87756eff84756fff6a5e5aff675b59ff382d2bff716664ff483e3eff5c494bffa99389fffae4cdfffde7cffffce7cffffcead0fffbecd0fffbeed0fffbeed0fffbeed0fffde6d7fffce8dafffbeaddfffcedddfffdefdcfffcf0dbfffcf1d9fffbf0d8fffcf0d7fffbefd6fffbefd6fffbefd6fffbefd7fffcefd5fffcecd4fffde9d4fffde8d4fffcebd8fffbeedefffaede3fff9eee4fff9efe5fff9eee6fffaeee7fffbede8fffbede9fffbece6fffaece6fffaede6fffaece5fffaede6fffaede4fff6e7dcffeed8cbffcfb5a6ffb79d8effb9a294ffcfb0a0ffdab8a6ffcfb09fffb99e94ffb2988fffbaa29bffa7948eff907d77ff63524fff5a4b4aff7b6c66ff8c7f7bff746967ff5c5150ff413738ff4a3f3fff413637ff5c4a4cff7d6960ffd7c4aefffbe5cefffce6cefffde9d0fffcecd0fffbeed0fffbeed1fffbeed0fffce3d4fffde5d8fffce7dcfffceaddfffbecddfffbefdcfffbf2dcfffaf3d9fff9f2d8fffbf0d7fffdf2d9fffdf1d9fffcf1dbfffbf1d8fffbf0d5fffbecd4fffbead4fffbecd7fff9eedffff9ede3fff8ede4fff8ede5fff9ece7fff9ece7fff9ece6fff9ece7fff8ece5fff8ece5fff8ece5fff8ece5fff8ece5fff9ebe6fff8ece4fff9ebe5fff8e5dbffe0c9baffcbb3a1ffd9baa4ffd9b9a3ffbea08fff8d7972ff7b6a65ff72635eff7f706bff5f504bff625452ff615453ff6e625fff716566ff6d6265ff6d6465ff695f60ff615758ff605657ff695e5fff7c706bffb0a194fffae6d1fffce6cefffee9d0fffdecd1fffbeed0fffbeed2fffbeed1fffde1d3fffde2d7fffbe5dafffbe7ddfffbe9ddfffaecdcfffbefddfffbf0defffdf2e0fffdf1e1fffaeee0fffaeee0fff8efe2fff9f0dffffaf1dbfffbeed7fffbedd5fffcecd9fff9ebe2fff9eae6fff8eae8fff8eaeafff8eaeafff8ebe8fff8ebe7fff8ebe7fff7eae6fff7eae6fff7eae6fff7eae6fff7eae6fff8eae7fff7eae6fff7eae6fff8e9e5fffbebe2fff2dccfffe1c6b2ffd6b8a3ffb89c8cff7b6b67ff71615cff7a6c66ff7d6f69ff71635eff70615dff726461ff716763ff6c6263ff6a5f61ff756c6cff7f7675ff766d6dff716868ff756a68ff7e736affaea191fffbe6d0fffce6cefffdead0fffdecd1fffaeed0fffaeed2fffdedd1fffddfcefffee1d2fffee2d5fffde3d9fffde5dcfffce8defffceae0fffaebe2fff7eae4fff4e8e5fff2e6e6fff2e6e6fff4e7e6fff5e8e7fff6eae6fff9ece5fff9ece3fff8ebe2fff6e7e4fff6e7e7fff6e7e7fff6e9e9fff6e9e9fff6e8e8fff6e9e7fff6e9e7fff5e8e7fff5e7e7fff6e7e7fff5e7e6fff5e7e7fff7e8e6fff6e8e8fff8e8e7fff9e8e5fffae8e5fffbe8e3fff6e2d9ffdfc9b9ffddc7b5ffceb6abffb69c93ffa8938bff9f8e86ff98877fff92817cff897a77ff7d7472ff6f6665ff685f5eff746b69ff918885ff8c8281ff817775ff7f736cff827669ffb5a791fffbe6cefffce6cefffbead0fffceed2fffbf0d3fffbf0d3fffceed0fffcddcbfffcdfcdfffddfd0fffde0d4fffce3dafffbe4ddfffbe6e1fff8e7e4fff2e4e7ffefe3e6ffeee3e6ffeee3e6fff1e3e6fff1e3e6fff1e3e6fff2e4e3fff2e4e3fff2e4e3fff3e5e4fff3e5e5fff4e6e6fff5e7e8fff5e7e8fff5e7e8fff5e7e8fff4e7e7fff5e7e7fff5e7e7fff5e6e7fff5e7e6fff5e7e7fff6e7e5fff5e7e7fff7e6e6fff8e6e4fff8e6e4fff8e6e4fff8e7e3fff7e7dbffe8d6c6ffeed1c1ffdebeaeffc3a798ffb39d8fffac9689ffa08d82ff8f827dff857879ff776e69ff6a655bff6c645cff9e9287ff9c8f84ff8e8176ff887a6eff998b7cffe9dbc5fffce7cffffce6cefffaecd1fffcf0d4fffdf3d7fffcf3d6fffcf1d3fffbdbcafffbdbcbfffbddcffffaddd3fffae0d7fff9e2dbfff9e4dffff6e3e5ffeee2e6ffeee2e7ffeee2e7ffeee2e8ffede1e5ffede1e5ffede1e5ffede1e5ffede1e5ffede1e5ffefe3e7ffefe3e5fff0e4e6fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff1e5e7fff3e5e6fff4e6e6fff3e5e5fff4e6e6fff4e6e6fff3e5e5fff3e6e8fff4e5e6fff4e4e3fff4e4e3fff4e4e3fff5e4e4fff7e4e1fff7e4dbfff7dbceffefd0bdffddc0aeffc4ab99ffb79f8cffad9785ffa08d82ff95847dff857971ff716b62ff7a7169ffa8998dffaa9a8bffa49485ffc5b6a6fff3e5d1fffceed5fffde7cffffee7cffffceed2fffcf2d5fffaf5d7fffaf4d7fffdf3d6fffadbc9fffbdac8fffbdbccfffadcd1fff8e0d6fff9e1d8fff6e1dffff0e2e6ffede1e6ffede1e7ffede1e7ffede1e7ffece0e4ffece0e4ffece0e4ffece0e6ffece0e6ffede1e6ffede1e5ffede1e7ffeee2e6ffefe3e6ffefe3e6ffefe3e6ffefe3e6ffefe2e6fff0e2e6fff1e3e6fff0e2e5fff0e2e6fff0e3e6fff0e3e6fff0e3e6fff1e3e6fff2e3e6fff2e3e6fff3e4e6fff3e4e6fff4e5e5fff6e4e3fff6e2deffecd3c4ffe1c5b1ffd5b8a2ffcbaf96ffc0a48effb9a08cffae9685ff9b887fff847772ff8a7b77ff907d74ffb29e94fff5e4d9fffdefdbfffdf1d8fffdf1d4fffdedd0fffdebcffffdedd1fffef1d5fffbf4d7fffbf4d7fffbf2d6fffadbcafffbdac8fffbdbccfffadcd0fffae0d5fffae0d7fff4dfddffecdee5ffebdee7ffebdee7ffebdee7ffebdee7ffecdee6ffeddee6ffeddee6ffebdee7ffecdfe7ffecdfe7ffecdfe5ffecdfe6ffece0e7ffede1e6ffede1e6ffede1e6ffede1e6ffede1e6ffeee0e5ffefe0e6ffefe0e6ffeee0e6ffede1e6ffede1e6ffede1e7ffeee2e7ffeee2e7ffefe2e7ffefe1e7fff0e2e8fff1e3e6fff1e4e6fff2e4e5fff1ddd5ffdec1b0ffd7b7a2ffd0b097ffc6a78effbea18bffb29583ff9e8982ff8e7b7aff826d6dff736361ffbcaba9fff3e3e1fff6e7dffffbedddfffcf0d9fffcefd5fffaebd4fff8e8d7fffbedd9fffcf3d7fffbf3d7fffbf1d7fffcdcccfffadac9fffbdbccfffbdbd0fffaded1fffaded4fff3dcddffe9dae5ffe8dae6ffe9dbe7ffe9dbe7ffe9dbe7ffebdce6ffebdde6ffebdde6ffeadde8ffeadde7ffebdee7ffebdee7ffebdee7ffebdee6ffebdfe5ffebdee5ffebdee6ffebdfe6ffebdfe6ffebdee5ffebdfe6ffebdfe6ffebdfe6ffece0e7ffece0e6ffecdfe6ffecdfe6ffecdfe6ffecdfe6ffeedee6ffeedfe6ffeee0e7ffede0e5ffece0e6ffeedae0ffcaada3ffac8e7bffb2947effae927dffa68d7dff9c8378ff92807bff867272ff7d6868ff7c6c69ffa1918effedddddffeedee0fff0e1e0fff3e4defff3e5defff3e3defff0e1defff7e9defffcf2d9fffdf2d9fffdefd9fffadecffffadbcefffadad0fff9dad0fff7dacefff2dcd4ffe8d8dfffe5d9e4ffe5d8e4ffe5dae5ffe5dbe6ffe5dbe6ffe8dae6ffe8dae6ffe8dae6ffe9dce6ffe9dce5ffe9dce5ffeadde6ffe8dde7ffe8dce6ffe8dce5ffe9dde6ffe8dde7ffe8dce7ffe6dbe6ffe8dae6ffe7dbe6ffe7dce7ffe9dde7ffe9dde8ffe9dde6ffeadde7ffeadde7ffeadde7ffeadde8ffecdde7ffeedee8ffeddfe7ffecdee6ffeddde5ffd3bcc2ff8e7375ff634946ff836b64ff87716cff98817dffbca7a5ffe8d7d6ff9c8989ff897272ff84716dff907c79ffe9d5d8ffeddde0ffeedee0ffeedee1ffeddde1ffebdde1ffebdde0fff1e1e0fffbeeddfffef2d9fffef0d7fffaddcffffbdbd0fffbdbd0fff8dad3ffefd7d4ffe6d6deffe1d6e5ffdfd5e5ffdfd5e5ffe0d6e4ffe1d7e4ffe2d8e5ffe4d8e6ffe5d8e6ffe5d8e6ffe5d9e4ffe5d9e4ffe5d9e4ffe6d9e4ffe4d9e6ffe4d9e5ffe4dae4ffe5dae4ffe5dae6ffe5dae6ffe5dae6ffe5d9e4ffe5d9e5ffe5d9e6ffe5dae6ffe5dae7ffe6dbe6ffe7dce7ffe7dce7ffe7d9e6ffe5d9e6ffe8dbe6ffebdbe6ffeadce7ffebdae5ffe2cbd3ffb09397ff88696bff644646ff8c7473ff7b6468ffddcacfffe7d7dcffe8d9d9ffbba6a7ff9d8585ff836c68ff816a69ffd8c2c7ffecdbe0ffecdbe0ffecdbe0ffebdbe0ffebdbe0ffebdbe0ffecdcdffff1e1defff9ecdefffbecdbfff8d9cffff8d9d0fff7d9d1ffeed5d9ffddd1dfffdbd1e4ffdbd3e5ffdbd3e6ffdbd3e6ffddd4e4ffded4e3ffded4e4ffe1d4e4ffe1d4e4ffe1d4e4ffe2d6e4ffe2d6e4ffe2d6e4ffe2d7e4ffdfd6e3ffe0d6e2ffe0d8e2ffe1d8e2ffe3d8e4ffe3d7e4ffe3d7e5ffe2d7e2ffe2d8e4ffe1d9e4ffe1d9e5ffe2d9e5ffe3d9e6ffe4d9e5ffe4d9e5ffe3d7e5ffe2d7e5ffe5d9e5ffe6d8e5ffe6d9e6ffe3cdd9ffba9da2ff98777aff836161ff876867ff967c7eff9b898effe7d7e2ffe4d8e1ffe4d8dcffcfb6b9ffb29595ff836868ff755c5dffbfacb2ffebdae1ffebdae1ffebdae1ffebd9e1ffebd9e2ffebd9e2ffe9dae1ffe9dbdeffeadcdeffecdddefff4d7d2ffe9d4d6ffdfd1dcffd8cde2ffd4cee4ffd4d0e5ffd4d0e5ffd5d1e6ffd6d2e7ffd7d2e5ffd8d2e4ffd8d2e2ffdad3e3ffdad3e3ffdad4e4ffddd4e5ffddd4e5ffdcd4e5ffddd4e6ffddd4e5ffdfd5e5ffe0d6e5ffe0d6e4ffe1d6e5ffe0d6e5ffe0d6e6ffdfd7e5ffded7e5ffddd8e5ffddd8e6ffddd8e6ffddd8e6ffe0d7e6ffe1d6e6ffe1d7e7ffe1d6e7ffe1d6e6ffe1d5e4ffdeced8ffbda2a6ff957578ff876566ff7b5959ff9f8381ff897274ffcfc0c5ffe6d8e2ffe5d9e2ffe5d8e1ffc8aeb5ffab8f94ff7a6064ff6d4f55ffb09b9fffe7dadfffe7d9e2ffe8d9e2ffe8d8e1ffe9d7dfffe9d7dfffe8d8e0ffe7d8dfffe7d8dfffe7d8dfffdacdd9ffd1c9e1ffcfcbe3ffcecbe4ffcecce5ffcfcde4ffcfcde4ffd0cde4ffd1cee5ffd3cee6ffd4cfe6ffd4cfe3ffd5d1e4ffd5d1e4ffd5d0e4ffd8d1e6ffd8d1e6ffd7d1e5ffd7d3e5ffd7d3e5ffd9d3e5ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e5ffdcd4e6ffded4e7ffded4e7ffddd4e6ffddd4e6ffddd4e6ffdcd4e5ffded4e5ffe0d4e7ffe0d4e7ffded4e5ffddcfdbffc2aeb1ff9b817eff866869ff7b5c5fff7b5d5cff9d8582ff8d7b7cffdfd2daffe4d8e4ffe4d8e3ffe3d8e2ffc9aeb5ffa88d92ff765d61ff694c51ffa69094ffe4d9ddffe4d8e2ffe4d8e2ffe4d8e1ffe6d7e0ffe5d7e0ffe5d7e0ffe4d7e0ffe3d6dfffe3d6dfffcdc9ddffccc8e2ffcac8e2ffcacae3ffcbcbe3ffcdcbe2ffcdcbe3ffcdcce3ffcecde5ffd0cde6ffd1cde6ffd1cee4ffd3cfe5ffd2cee4ffd2cee4ffd5cfe5ffd5cfe5ffd3d0e6ffd2d2e6ffd5d1e3ffd8d1e3ffdad2e5ffd6d0e5ffd6d1e6ffd7d1e6ffd7d1e6ffd8d3e5ffd9d3e5ffd9d3e5ffd9d3e5ffdad3e5ffdad2e5ffdad2e5ffd9d3e4ffdcd2e4ffdcd1e2ffcec1cdffb2a1a4ff95807fff886e6aff7e6061ff77595bff896e6cff988581ffab9c9fffe1d4dfffe3d8e5ffe2d8e5ffe2d7e3ffcaaeb1ffa38b89ff73605dff6a5252ff9e8b90ffdfd5dfffe3d8e3ffe3d8e3ffe3d7e2ffe3d6e0ffe3d6e1ffe2d6e2ffe1d6e1ffe0d4e0ffe0d4e0ffc8c8deffc8c8ddffc7c8e0ffc8c9e1ffcacbe1ffcacbe1ffcacbe3ffcacce4ffcacce4ffcdcce3ffcecce3ffcecce3ffd0cce4ffd0cce4ffd0cce4ffd1cce4ffd1cde4ffcbc6deff847e94ff8a7e8cffc7b5c2ffe2d0dfffd3cde1ffd1cde3ffd3cfe5ffd3cfe5ffd3cfe3ffd5d2e3ffd6d2e3ffd6d3e4ffd7d3e4ffd7d3e4ffd7d3e4ffd7d1e3ffd7cfe0ffbfb2bcff978686ff8d7874ff866f6aff846b65ff7c605dff7b5e5cffa08683ff8a7a77ffcfc2ccffe1d6e4ffe3d7e6ffe2d8e5ffe2d7e2ffc3b2b1ff9a8883ff776461ff715c5bff9d8b91ffded3e0ffe0d7e3ffe0d7e3ffdfd6e3ffe0d5e3ffe0d4e3ffded4e2ffddd3e0ffdcd3dfffddd2dfffc3c7dfffc5c7e1ffc5c7e1ffc5c8e1ffc6c9e1ffc6c9e1ffc8c9e0ffc9cae0ffc9cae0ffcbcae2ffcbcae3ffcbcce2ffcdcbe2ffcdcbe2ffd0cbe1ffddcbdbff946e72ff442122ff341316ff240b0eff361d21ffccb4beffd2cde0ffcecce1ffcecce1ffd0cce1ffd1cde2ffd2cee1ffd2cee1ffd3d0e2ffd4d1e3ffd4d1e3ffd4d1e2ffd3cee2ffccbfccffa08688ff927673ff8c6f6aff846a63ff826861ff80635fff8c6f6bffab948dff857977ffd7cfdcffdfd5e5ffe0d5e3ffe0d5e4ffe0d4e2ffc2b2b0ff9b8a83ff766561ff766665ff9b8e95ffdad2e1ffded4e4ffddd4e4ffddd4e4ffddd4e4ffddd4e4ffdbd3e2ffdad1e0ffd9d1dfffd9d1dfffc2c5e0ffc2c5dfffc2c5dfffc3c5dfffc4c6e0ffc4c6e0ffc6c7e0ffc6c8dfffc6c8dfffc8c8e0ffc8c8e0ffc8cae0ffcacae1ffcbcae1ffcecae0ffb898a0ff5d2c2aff431b14ff290b05ff1f0605ff23060bff785a68ffd3caddffd0cce1ffcfcce1ffcfcce2ffd0cde2ffcfcde2ffcfcde2ffcfcde3ffd0cee4ffcfcde4ffcfcee1ffd0c7d5ffb8a2a5ff987678ff8d6b6bff8b6967ff886664ff886563ff8e6966ffa3807bffa48c88ffa09399ffd6cfe0ffddd3e5ffdfd4e3ffddd4e3ffdcd4e2ffc7b3adffa69087ff7a6660ff7a6869ffa3969fffdad2e2ffdbd3e4ffdbd3e4ffdbd3e4ffdbd3e3ffdbd3e3ffd9d2e4ffd7d0e2ffd7d1e0ffd6d0e0ffc0c4dfffc1c4deffc1c4deffc1c4deffc1c4dfffc1c4dfffc2c5e0ffc3c6dfffc3c6dfffc4c7deffc5c8dfffc5c8dfffc6c9e0ffc6c9e0ffc9c8ddff8b6368ff54231fff3d160fff210800ff1b0300ff1d0007ff5c3e4fffd4c7daffd0cae1ffcecce1ffcecce1ffcecce1ffcecce1ffcccce3ffcbcce2ffcbcce2ffcbcce2ffcac8d5ffbda9a9ff9a7d7bff8d6b6dff866463ff836060ff805d5eff875f60ff946c69ffb9918aff8f7978ffb7b1bdffd5d0e3ffd9d2e4ffdbd3e5ffd8d4e5ffd7d4e3ffc8b6b3ffb49c91ff806b60ff786667ffb7aab4ffd9d2e3ffd7d2e3ffd6d2e3ffd8d3e4ffd8d3e4ffd7d2e4ffd5d1e4ffd3d0e2ffd1cfe0ffd1cfe0ffbec1deffbfc1e0ffbfc1e0ffbfc1e0ffc0c2e0ffc0c2e0ffc1c3e1ffc1c3e0ffc1c3e0ffc2c5e0ffc3c6dfffc3c6dfffc3c6dfffc3c6dfffc6c5dcff684046ff491815ff4a221cff36160dff200500ff22060dff88788bffcecae0ffcdcbe1ffcdcbe1ffcccbe2ffcccbe2ffcbcbe2ffc9cce2ffc9cae3ffcac8e0ffcbc2d3ffb6a8acff9d8782ff8a726cff826362ff7e5e5eff7d5d5eff7d5d5eff8a6969ffa17e7affaa8680ff998e92ffcbcdddffd2d0e2ffd6d3e4ffd7d2e4ffd6d2e2ffd6d1dbffcdb5aeffc2a79cff877167ff8c7c7dffd7ccd8ffd6d2e4ffd4d2e3ffd4d2e3ffd4d2e3ffd4d2e3ffd3d1e3ffd1cfe2ffd0cfe1ffd0cfe1ffcfcfe1ffbbc1dfffbdc1dfffbdc1e0ffbdc0dfffbdc1e0ffbec1e0ffbec1e0ffbec2e0ffc0c2e1ffc0c2e0ffc1c3e0ffc1c4e0ffc2c4e1ffc1c4e1ffc3c4ddff673843ff4b141aff411818ff360f12ff330513ff634d60ffcbc6e0ffcacae3ffcacbe4ffc8cbe2ffc9cbe2ffc9cbe2ffc9cbe2ffc8cbe2ffc7c8e2ffc7bfd7ffac989eff927a7aff846c6aff7d6462ff7a5f5cff775b5bff785c5cff7c6060ff997c7dff9c8181ff99868cffc9c6d7ffcbcce2ffcfcee2ffd2d1e3ffd4d1e3ffd4d1e2ffd7cfd9ffc9aca8ffc0a49bff856f6affafa1a6ffd5cfddffd4d1e3ffd0d0e2ffd1d0e3ffd1d0e3ffd1d0e3ffd0d0e3ffcfcfe3ffcfcfe3ffcecee2ffcecee2ffb9c1dfffbac1deffbac1dfffbac1dfffbac1dfffbac1dfffbbc1dfffbcc0dfffbfc1e0ffbfc2dfffbfc3e0ffbfc4e0ffc0c4e0ffc0c4e0ffc1c4deffa18694ff5d3745ff472330ff472231ff86617affcabdd8ffc7c9e6ffc7c9e6ffc7cae3ffc7cae0ffc7cae0ffc7cae0ffc7cae0ffc7cae0ffc9c6deffb3a4b4ff8f7878ff826666ff785c5fff775a5eff755a57ff755a5aff876c6cff9c8181ff957f85ffa3949fffcdc6d7ffc9c8dfffcacbe3ffcfcee3ffced0e2ffd0d0e4ffd1cfe5ffd6c8d9ffd4b2abffbea198ff8d7877ffcdc6d1ffd3d0e1ffd2d0e3ffcdcfe3ffcdcfe4ffcdcee4ffcdcee4ffcdcee4ffcdcee4ffcdcfe4ffcccee2ffcdcee2ffb7bfdeffb9bfdeffb9bfdeffb9bfddffb9c0ddffb9c0ddffb9c0ddffb9c1deffbdc1e0ffbcc1dfffbdc3e1ffbbc4e1ffbec4e0ffbec4e0ffbfc5e0ffc7c8dfffbdbed4ffacadc2ffbcbbd1ffcbc9e0ffc9c9e2ffc6c8e5ffc6c8e5ffc6c8e3ffc7c9e1ffc8c9e0ffc7c9e1ffc8c9e0ffc8c8e1ffc7c1d6ff927d7bff7e6661ff715856ff6c5153ff7b6062ff8b736dff9d8481ffa38c8dffa2949cffbfb8cbffc6c5dcffc6c8e0ffc6cae1ffcacae3ffcecde2ffcccfe3ffcdd0e4ffcfcfe5ffcfc0d2ffcfafa5ffae9593ffb4a4adffd0cfe4ffcecfe4ffcdcee5ffcccee4ffcacee3ffcbcde5ffcbcde5ffcbcde5ffcacde5ffcacde5ffcacde3ffcbcde3ffb6bedfffb7bedfffb7bedfffb7bedeffb8c0ddffb8c0ddffb8c0ddffb8c0ddffb9c0deffbac1deffbac2dfffbac3e0ffbbc3dfffbcc3dfffbdc4e0ffbfc5e0ffbfc6e1ffbfc6e1ffc1c5e1ffc3c6e1ffc3c6e2ffc4c7e4ffc4c7e5ffc3c6e4ffc2c6e3ffc2c7e3ffc3c8e5ffc3c8e4ffc3c8e5ffd2cad9ffb89b92ffb19792ffaf9490ffad9390ffb09693ffa9938fffaa9a9fffafaabdffc1c3deffc3c6e1ffc3c6dfffc5c7dfffc4c9e1ffc9cbe4ffcbcce4ffcccde4ffcccee3ffcccee4ffcec1d4ffc7a698ff9e8787ffc3b8caffcbcce4ffcccde5ffcccee7ffcccee7ffcacde6ffc8cbe4ffc9cce4ffc8cbe5ffc9cce5ffc9cce4ffc8cbe4ffc8cae3ffb5bde0ffb5bee0ffb5bee0ffb6bedfffb8c0deffb8c0deffb8c0deffb8c0deffb8c0deffb8c0deffb8c0deffb9c2e0ffb9c2e0ffb9c2e0ffbac3e1ffbac3e0ffbac3e0ffbac3e0ffbbc4e1ffbbc4e1ffbdc4e1ffbec5e2ffbfc6e3ffbec6e3ffbec6e3ffbfc6e3ffbfc6e3ffc0c7e4ffc0c7e4ffc8c8deffc2bdcaffc1bccaffc1b3c0ffbeb3c1ffbdb4c1ffc0bbccffbec1daffbcc4e3ffc1c6e2ffc1c6e2ffc2c7e2ffc3c9e3ffc3c8e5ffc7cae5ffc8cce6ffc8cce5ffcbcce2ffcbcde3ffd1c5d4ffcaa698ff9b8387ffcac8ddffc8cbe4ffc8cbe4ffc9cce6ffc9cce6ffc9cce6ffc7cbe4ffc7cbe5ffc6cae6ffc6cae4ffc6cae4ffc5c9e3ffc5c9e2ffb5bde1ffb5bde1ffb5bde1ffb5bde0ffb6bfdeffb6bfdeffb5bedeffb5bedeffb5bedeffb4bdddffb4bdddffb7bfdfffb6bfe0ffb7bfe0ffb8c0e1ffb7bfdfffb7bfdfffb7bfdfffb9c2e1ffbac2e1ffbbc2e2ffbcc2e2ffbdc3e3ffbcc3e3ffbbc4e3ffbdc3e1ffbdc4e1ffbec5e3ffbec5e2ffbcc4dfffbbc4dfffbbc4deffc0c3deffc1c3dfffc2c4dfffbfc6e2ffbfc7e4ffbfc7e5ffc0c8e4ffc1c9e5ffc2c8e5ffc2c8e4ffc3cae4ffc5cae5ffc7cbe5ffc7cae5ffc9cce4ffcacde5ffd0c5d3ffd1ad9fffab9397ffcbc9e0ffc7cbe6ffc7cbe6ffc8cbe6ffc9cbe7ffc9cbe7ffc6cbe5ffc6cbe5ffc5cae6ffc5cae5ffc4c9e3ffc3c8e2ffc3c8e3ffb3bde2ffb4bde1ffb4bde1ffb3bde0ffb3bce0ffb3bce0ffb2bddfffb2bddfffb2bddfffb2bde0ffb3bde0ffb3bde0ffb4bee1ffb4bee1ffb3bee1ffb3bee1ffb3bee1ffb3bee1ffb6bfe2ffb7c0e2ffb7c0e2ffb8c2e3ffb8c2e3ffb9c1e2ffb9c2e3ffbac3e3ffbbc2e3ffbbc2e3ffbbc3e4ffbcc3e4ffbcc3e4ffbdc4e5ffbdc3e3ffbcc3e3ffbec4e3ffbec5e4ffbfc6e4ffbfc7e4ffbfc8e5ffc0c9e6ffc0c9e6ffc1cae6ffc1cae6ffc5cbe8ffc5cbe7ffc5cce7ffc6cce6ffc9cbe3ffd2c7d7ffccada5ffb19b9fffc9cae1ffc5cbe6ffc5cce7ffc5cbe7ffc5cce7ffc5cce7ffc4cbe6ffc4cae6ffc3c9e5ffc2c8e5ffc1c8e5ffc1c8e5ffc1c8e5ffafbbdfffb0bcdfffb0bcdfffb0bce0ffb1bde2ffb1bde2ffafbde0ffafbddfffafbddfffb0bddfffb0bddfffb0bddfffb1bde1ffb1bde1ffb1bde1ffb0bee0ffb0bee0ffb0bee0ffb3bee1ffb4bfe1ffb4bee1ffb4bfe0ffb4bfe0ffb5bfe0ffb5c0e0ffb6c1e2ffb8c1e3ffb9c1e3ffb8c1e3ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac3e4ffbac3e4ffbdc5e4ffbfc7e4ffc0c9e6ffc1cae7ffc1cae7ffc1cae7ffc1c9e6ffc4cbe9ffc4cce8ffc4cce8ffc4cce8ffc8cae3ffd6cddfffcebdc2ffbeb5c1ffc4cbe7ffc4cce8ffc4cce8ffc4cbe8ffc3cbe9ffc3cbe9ffc2cae8ffc2cae8ffc0c9e7ffbfc8e6ffbfc8e5ffbfc8e5ffc0c8e6ffadbcdfffadbcdeffadbcdeffadbcdfffaebde1ffaebde1ffaebde1ffaebde1ffaebde1ffaebddfffaebddfffaebddfffb1bde1ffb1bde2ffb1bde2ffafbee2ffafbee2ffafbee1ffb1bde0ffb1bee0ffb1bee0ffb2bfdfffb2bfdfffb2bfdfffb2bfdfffb3c0e0ffb7c0e2ffb9c1e3ffb9c1e3ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac2e4ffbac3e4ffbac3e4ffbdc5e4ffbec6e3ffc0c8e5ffc1cae7ffc1cae7ffc1cae7ffc2cae7ffc3cbeaffc3cce9ffc3cce9ffc3cce9ffc7cbe4ffd2cce1ffd2cde7ffc8c8e5ffc2cae7ffc2cbe8ffc2cbe8ffc1cae7ffc0c8e8ffc0c8e8ffbfc7e7ffbfc7e7ffbec6e5ffbec6e4ffbec6e3ffbec7e4ffc0c8e5ff89882cff97963affe8ccb6ffbda496ffaf9c91ffa19287ff91877cff6e6760ff483e3cffb7a192ffc5aea1ffb5a396ffab9c8dffa49686ffa09282ff9a8c7eff97897cff95887bff908577ff887d73ff80786fff7e776eff847c74ff898279ff8a8479ff928b80ff948f83ff948f82ff918c7cff8c8479ff867f74ff837c73ff848627ff85852cffdac3a2ffc3a796ffb9a394ffaa998dff978e82ff78706aff5e5351ffbda69bffbba699ffab9b8effa29485ff9d8f80ff978a7dff928479ff8e8177ff837970ff7d766dff797169ff767069ff767069ff7c766fff817b74ff817b71ff888377ff928d81ff948e83ff928d7fff918a7fff8f887dff867f76ff6c6e1fff6f6d21ffa7955dffccad9bffc0a798ffb5a196ffa5978dff8b8179ff938782ffb7a699ffafa090ffa09387ff998c7eff93847bff8b7e75ff847970ff837870ff827972ff80786fff7e766dff7f7a70ff78716bff726c66ff716b66ff746e69ff7d7770ff8a847bff928d7fff918b7dff938b82ff938c83ff8e867eff827c26ff897f26ff998731ffd7b79fffc5a999ffc0ab9dffb2a296ffa2958bffa5968cffad9c90ffa7968aff98897fff8f8178ff887b72ff83786eff81776eff90857eff938881ff948a7fff8f857bff8a8278ff837971ff7b726cff736e67ff6a645fff706964ff7d7670ff8a857cff8d877eff918980ff90887fff8d867dffbea638ffc6ac37ffd3b63fffe3c384ffcbab99ffcab0a0ffc1ab9fffb4a499ffa99b8fffa6958bff9c8b81ff8f8178ff867970ff81756bff83796fff958a81ff9b9088ff968a83ff998d84ff978a83ff90857cff877d74ff7e756cff7d746aff76706aff6b6860ff706a65ff7d7770ff837c75ff868078ff8a827bff8a827bffdcc13affe1c93bffe2cc3bffe6ce56ffd2b39cffcfb3a1ffc9afa1ffbca498ffaa9a8cff9c8e83ff91837aff887a71ff80766cff80746bff968880ffac9b90ffa79890ff998c84ff94897fff93857eff8f827bff867b73ff7e766dff7c746aff7d756bff746e66ff696260ff716966ff766f6cff7d7771ff867d77ff857d77fff5e946ffe9dc3effe9da40ffe8d93fffdcc07effd0b29effcfb2a2ffb9a195ffaa988bff96887cff8a7e74ff83776eff7d7369ff8a7b72ffb29d92ffbaa398ffb3a096ff9f9086ff948980ff92847eff8d7d77ff877974ff807670ff79706bff7c736dff7e766eff6f6865ff6a6461ff6e6765ff76706cff817973ff827a74ffe4dc42ffd9d040ffd3c741ffc9bd3cffd0bf5affcdb098ffcdb09dffb79f92ffa89387ff9a8c7eff8c8076ff82756dff80736affa69488ffb9a296ffc1a89dffbda99dffab998eff988a81ff93847dff8c7e77ff7f746eff78716bff716764ff726a67ff77716eff706967ff6a6361ff6e6765ff716b68ff78716dff7f7670ffd8dc6bffd8dc66ffdee166ffdbde68ffdddd6dffd8c294ffccaf9affb9a091ffab9587ffa18e7fff97877cff877871ff8e8079ffb8a195ffc3aa9dffc9afa4ffcbb3a6ffc0a99eff9e8f82ff92827cff93847dff887c76ff726c64ff746d65ff6a6360ff706967ff6f6866ff6b6261ff6f6765ff6f6765ff776f6bff7d746dffc9ce94ffc9cf91ffc7cc92ffc8ce96ffc9cc9affd6cbb0ffcfb2a0ffbea393ffb1998affa69283ff9b8b7dff8b7d72ff9d8c81ffc8ada1ffd9bbaeffd6baadffc8b0a5ffc3aa9fffbba295ffb89e93ffba9f95ffb09a90ff91847bff7d716aff6b625fff69615fff6f6967ff6f6765ff6e6564ff726a67ff776e69ff908266ffc0c1d8ffc1c3d6ffc2c3dbffc3c5dcffc4c5dcffc6c6dfffd8c4c6ffc7ab9dffb99f92ffad978affa29081ff958576ffa18f81ffcaafa1ffd7baadffd5baadffbba59bffae998effae978bffbba295ffcfb0a3ffcfb1a4ffaa9688ff7d706aff6b6160ff665f5eff6e6765ff716a68ff766f6cff736965ff84746fffded2a7ffbcbfe3ffbebfe5ffc3c2e7ffc3c4e9ffc3c4e9ffc1c4eaffcbc8edffddc9ceffc1a89cffb29c90ffa29084ff99877bffaa9486ffc4a89affd5b8aaffcbb3a6ffb8a49bffaa988fffa79488ff9d8a7dff9c8376ffb19487ffb29a8bff7e716cff675e5dff625c5aff6c6664ff746d6bff847b78ff84726affdac5bdfff4e3d6ffcac7f1ffcbc8f1ffccc8f2ffccc7f1ffc9c5f2ffc8c6f2ffc8c6f3ffd2caf1ffdecadaffc2a79bffaa958bff9b867bffac9484ffc5a898ffd7bba9ffc3ac9dffb09890ffa18c84ff98857fff918078ff8c7b74ff86716aff85746cff7f706aff6a5c5bff605856ff6b6462ff79716eff988a7effe3cfbbfffbeccffffbedcfffe1dff7ffe0def8ffdfdcf8ffdfddf8ffdcdaf8ffdbd7f7ffdbd7f6ffe1d9f2ffeadfeeffefdfd6ffc4af9effa58d7eff9f8879ffc8ab99ffdcc0adffc5ad9fffa19088ff92827cff8c7e77ff8d7f77ff917d76ff9b847eff8f7a73ff7e6d69ff796b6aff6b6261ff6d6663ff80766effe4d6bcfffbeed0fffaeed0fffbedcffff4eae7fff4e9e8fff5e4e6fff4e4e7fff4e7e5fff4e7e4fff4e8e2fffbead9fffbecd6fffbedd6fffbedd9ffd8c3b1ffa89281ffb69b8affdfc1afffceb2a7ffa8948eff90827eff94857fffa39086ffbda499ffd7b9aaffd0b2a6ffa28981ff7a6561ff7f716fff6e6664ffafa496fffaf0d2fffbeed0fffbeed0fffbeed0fffbe6d0fffce6d3fffce7d5fffce6d5fffce8d3fffce9d2fffaead2fffbebd2fffcebd5fffaebd5fffaeedbfffcf1e4fff4e1d4ffceb5a5ffd3b4a2ffd9baaaffbaa49cffa9978dffae9c90ffac988dffa48d82ffb99d8effeac9b1ffc39a89ff92776dff736762ff635652ffd0bfadfffbecd0fffbeed0fffbeed0fffbeed0fffcedd5fffbebd4fffce8d4fffbe9d4fffaead4fffcecd6fffcedd4fffce9cffffcead3fffceed9fffbeee1fffbefe6fffcf0e4fffdefe3ffebd7caffdec4b1ffc3aa9dffb6a397ffc4b1a3ffccb2a4ffc6aa9effab9289ffad9388ffddbfb0ff958279ff6f6460ff635654ffc8b6a9fffbeacffffbebd0fffbedd0fffbeed0fffce9d9fffbecdcfffbeed9fffaeed7fffbeed6fffbefd6fffbefd5fffbe9d3fffce9d5fffaeddffff9eee4fff9eee5fffbede7fffaece6fffbece5fff8e9e0ffe1cabbffb9a195ffc4aa9effd6b5a4ffcbafa4ffb39d96ff806e69ff746460ff7b6e6aff4e4443ff504646ff776360fff2dcc6fffce7cffffbedd0fffbeed0fffce2d5fffbe7dbfffaebdcfffaf0dbfffbf1dbfffbefdcfff9f0dcfffaeed6fffbebd6fff9ebe2fff8ebe6fff8ebe8fff8ebe6fff7ebe5fff7ebe5fff7eae5fff7eae5fff2e0d6ffddc3b1ffc9ab98ff7d6b66ff796b65ff685a55ff6c605dff6d6163ff726969ff696060ff756a67ffd4c3b1fffce7cffffbedd0fffbedd1fffcdfcefffde0d4fffbe4dcfffae8e1fff2e6e5fff0e4e6fff2e5e6fff4e7e4fff5e7e2fff4e6e4fff5e7e7fff5e7e8fff5e8e7fff5e7e7fff5e6e6fff5e7e6fff6e7e6fff8e7e4fff8e5e0ffe6d3c3ffd4b8abffaf998dff9d8a81ff867a77ff6d6561ff837a74ff8d827cff887b6fffe5d3bcfffbe8cffffbf0d3fffbf0d2fffadac9fffadccffff8e0d8fff5e2e2ffede1e6ffede1e7ffece0e4ffece0e5ffece0e5ffeee2e6ffefe3e6fff0e4e6fff0e3e6fff1e3e6fff1e3e5fff1e4e5fff1e4e6fff3e3e4fff3e4e4fff6e4e1fff2d7cbffd5b9a6ffbba28dffa69183ff857870ff8f8078ffbdac9fffecdecafffcecd2fffdebd0fffbf2d6fffbf3d6fffadac9fffadbcefffadfd4ffefdce1ffe9dce6ffeadce7ffebdde6ffebdde6ffebdee7ffebdee6ffebdfe5ffecdfe5ffece0e6ffecdfe5ffecdfe6ffece0e6ffece0e6ffede0e6ffeedfe6ffefe1e6ffefdee0ffcaac9cffbd9f87ffac9180ff917d7aff7b6967ffcfbfbdfff3e4dffff7e9dafff5e5d9fffaeed9fffcf1d8fffadccefff9dad0ffefd8d5ffe3d6e3ffe2d7e4ffe3d9e5ffe6d9e6ffe6d9e5ffe7dae4ffe7dbe5ffe6dae4ffe6dbe5ffe6dae6ffe6d9e5ffe6dae6ffe7dbe6ffe8dce7ffe8dbe6ffebdce6ffebdce6ffd4bdc4ff775a5aff846d6affc6b2b3ffc9b7b7ff8b7472ffb49fa0ffecdce0ffecdce0ffebdce0fff2e2defffceedafff3d7d1ffe6d3daffd8d0e2ffd7d1e5ffd9d2e5ffdbd3e3ffddd3e3ffded4e4ffdfd5e4ffded5e4ffdfd6e3ffe1d7e3ffe1d6e4ffe0d7e4ffdfd8e4ffdfd8e5ffe2d7e5ffe1d6e6ffe3d6e5ffd8c5cfff9b7b7eff896968ffa28d91ffe5d7e1ffd7c5caff967a7dff947c80ffe9d9e0ffe9d8e1ffead8e0ffe8d9dfffe9dadeffd0c9deffcccae2ffcdcbe3ffcecce3ffd0cde5ffd2cee4ffd3cfe4ffd4cfe4ffd5d0e5ffd5d2e4ffd9d2e4ffd9d2e5ffd9d2e5ffdad3e5ffdbd3e5ffdbd3e5ffdbd3e4ffded2e5ffcec1ccff9e8785ff7d5f61ff8e7572ffbeafb5ffe3d8e4ffd6c2caff8d7576ff856e71ffe2d7e0ffe3d7e1ffe4d6e0ffe2d6e0ffe1d5dfffc6c7deffc6c7e0ffc8cae1ffc9cae1ffcacbe2ffcccbe2ffcecbe3ffd3cbe1ff9d8895ff594651ffaa959fffd1cce1ffd1cde3ffd2cee2ffd4d0e2ffd5d2e3ffd5d0e2ffc0b1bcff907875ff846b64ff806460ff96837fffd9cfdcffe1d6e4ffd1c3c9ff887672ff877679ffddd4e1ffded5e3ffded4e3ffdbd2e1ffdad1dfffc1c4deffc1c4deffc2c5dfffc4c6dfffc5c7deffc6c8dfffc8c9e0ffb6a3b1ff4c1f1bff210602ff442732ffd1c9deffcecce1ffcecce1ffcdcce2ffcdcce3ffc9c1cdff9d8081ff886665ff856161ff9f7974ffa29295ffd8d1e2ffdbd3e4ffd0c4c9ff957f75ff928388ffd9d2e3ffd9d2e3ffd9d2e3ffd6d0e3ffd3cfe0ffbdc1dfffbec0dfffbec1e0ffbfc2e0ffc0c3e0ffc2c4dfffc2c5e0ff968090ff471918ff2f0b0cff766476ffcbcae1ffcacbe1ffcacbe2ffc8cae2ffc1b8c9ff9a8584ff806563ff7a5c5cff866868ff9f8281ffbebbc9ffd2d0e2ffd5d1e2ffd0c0c2ffa38a81ffb9aeb5ffd3d1e2ffd2d1e3ffd1d0e3ffcfcfe2ffcecee1ffb8c0deffb9c0deffb9c0deffbac0deffbdc1dfffbdc3e0ffbfc4e0ffbab5ccff837182ff948196ffc7c5e1ffc6c8e4ffc7c9e0ffc7c9e0ffc7c6ddff947f82ff755a5bff7c6160ff8f7575ffa4939bffbfb9ccffc8c9e1ffcdcee2ffcfcfe4ffd2babeffab9493ffcfcddeffcdcee3ffcbcde4ffcccde4ffcbcde4ffcbcde2ffb5bddfffb6bedeffb8c0ddffb8c0ddffb8c0deffb9c1dfffbac2dfffbcc3e0ffbcc4e0ffbec4e1ffc0c5e2ffc0c6e3ffc0c6e3ffc1c7e3ffc7c8e0ffbaaaaeffb6a3a8ffb5a5abffb4b2c6ffc1c5e0ffc3c7e0ffc5c9e3ffc9cce4ffcbcde2ffcbb4b6ffb1a2adffc9cbe4ffcacde6ffc8cbe5ffc7cae4ffc7cbe4ffc6c9e2ffb4bde1ffb4bde0ffb4bddfffb3bddeffb3bddeffb4bddfffb5bee0ffb5bee0ffb5bee0ffb7c0e1ffb9c1e2ffbac2e2ffbac2e2ffbcc3e2ffbcc3e2ffbbc3e1ffbec3e0ffbfc4e1ffbfc6e4ffbfc8e4ffc1c8e5ffc3cae5ffc6cae6ffc8cbe4ffcfb9bbffbcb0bdffc6cbe6ffc6cbe6ffc5cbe6ffc4c9e5ffc2c8e4ffc2c8e3ffaebbdeffaebcdeffafbde1ffaebde0ffaebddfffafbddfffb1bde1ffb0bde1ffafbee0ffb2bde0ffb2bedfffb3bfdfffb3bfe0ffb8c0e2ffb9c1e3ffbac2e4ffbac2e4ffbac3e4ffbdc5e3ffc0c9e6ffc1cae7ffc2cae7ffc3cce8ffc5cbe5ffd2c8daffc3c4ddffc3cbe8ffc1cae7ffc0c8e7ffbfc7e6ffbec7e4ffbfc7e4ff8a8a2effd0b6a1ffac9a8eff837b72ff86756effb8a497ffa39585ff988b7dff8f8277ff837a70ff7a736bff827b73ff898378ff938e82ff8f897cff878076ff797523ffb8a072ffbea799ffa19389ffa7978dffa39487ff908378ff847970ff897f78ff887f75ff807970ff746d67ff726c66ff888279ff90897fff8f887fffd0b738ffdfc454ffcdb09dffbea89cffa5968aff908278ff81766cff968980ff9c8f87ff958980ff8a7f77ff7d746bff746e66ff716a66ff7e7872ff877f79ffe6dc41ffdbcd3effd2b883ffc3a899ffa08f82ff867a71ff8b7d73ffb9a297ffae9c91ff94867fff877a73ff786f6aff78706bff6c6663ff706a67ff7e7670ffd0d57dffd1d67dffd4cd92ffc4a897ffa89384ff918176ffaa968cffceb3a6ffc5ada2ffa89489ffa18e85ff7d736bff6b6361ff6e6664ff6f6765ff7e7469ffbec0ddffc2c3e1ffc3c4e3ffd1bfc7ffb69e92ff9c8a7dffb69e90ffd3b7aaffb29e94ffab9589ffba9d90ff95847aff665e5dff6f6866ff7c716cffccbbaaffd5d2f4ffd5d1f4ffd1cef4ffd5d0f3ffdecbceffab9588ffb59b8bffceb4a4ffa08d86ff908079ff8f7b74ff84726cff6b605eff746c68ffd6c7b1fffaeccffff7e7dcfff8e5ddfff8e7dbfff8e9d7fffbebd5fff2e3d2ffc8b0a0ffd6b8a8ffa6948dffa49288ffbca194ffc7a798ff7f6d67ff93877efffaeed0fffbeed0fffbebd7fffaebd6fffbecd5fffbebd2fffbebd8fffaeee3fffbede4ffeedbcfffc4ada1ffcab0a2ffbba298ff9f8980ff736661ff7c6d68fff9e5ccfffbedd0fffbe1d4fffae9dcfff6eae0fff6eadffff7e8dffff6e9e7fff6e9e6fff6e8e5fff5e6e1ffe1c9baff9e8980ff7d6f6aff736a68ff7c716cffecd9c2fffbeed1fffadacbfff5dfdbffebdee6ffebdee5ffecdfe5ffede1e5ffeee1e5ffeee1e5ffefe1e5fff1e2e4ffdfc6bbffb29885ff887772ffdacbc1fff9e9d5fffbf0d7fff2d8d2ffe0d3dfffded5e4ffe1d6e4ffe2d7e4ffe3d8e3ffe3d7e4ffe2d9e5ffe4d8e5ffe4d4e0ff9b7e81ffb4a0a3ffb09a9bffc7b3b8ffeadae0ffefe0ddffcac8dfffcacae2ffcecce3ffd1cde3ffa89cabffcbc1d2ffd5cfe3ffd7d2e3ffd3c9d9ffa08a8aff886e6cffd6cad6ffae9b9effb2a3aaffe0d5e1ffddd3dfffbfc2deffc0c3dfffc3c5deffb5acc0ff381210ff958799ffcccbe1ffc8c6dbffa08a8dff836262ffa79194ffd6d1e2ffb5a3a0ffbdb4c0ffd5d1e3ffd1cee1ffb6bedeffb8c0ddffbac1deffbbbfdaffa49eb6ffc3c5e2ffc3c7e1ffb6adbbff968083ffa99fadffc3c4dbffcccde3ffbea9acffcbcce2ffc9cbe4ffc8cbe3ffb1bcdfffb0bddfffb0bddeffb2bde0ffb3bee0ffb5bfe0ffb8c0e1ffbac2e2ffbcc2e2ffbec7e4ffc1c9e6ffc5cae5ffc7bdcbffc4cae6ffc1c8e5ffc0c7e3ffa29558ffa39388ffa29086ff93877aff887e74ff7c756dff857f76ff8d867cffdbc842ffc7ae95ff96887dff96877dff9c8e85ff81766fff726b66ff7c7570ffc8cbaeffcbbdb4ffa28f82ffc0a79bffb29c91ff9b887eff6b6361ff8d8179ffe6dbe8ffe5dbe6ffddcbbfffc8ad9dff9e8c84ffa58d83ff7c706afff1e3c8fffae8d7fff8ead9fff8eae0fff5e6dfffd9c2b7ff9d8880ff776b67fff6e6cbfff0d8d5ffe5d9e4ffe7dbe4ffe8dce4ffeadbe3ffb79f99ffb6a3a1fff3e4daffc4c5dfffc5c2d9ff8f7d89ffd0cce0ffa58f94ffb6a6aeffb4a5aaffd8d1e1ffb3bddeffb5beddffb3b7d6ffbabdd7ffaea9bdffc5c8e2ffc4becfffc4c9e3ffb9a76dff98897eff887d75ff807972ffd7cfccffc1ab9effa38f85ff998d83fff1e0daffeee1e1ffc5b1acffc5b5abffbcc0dcffb2afc5ffb3a9b8ffc5bfcfffbaaa95ff91847bffd3cbd6ffc0b3b7ffb7aba7ff
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-BigBuck720p30.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-BigBuck720p30.asset.meta
new file mode 100755
index 0000000..c57e447
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-BigBuck720p30.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: dd228857f0bc21b4682b515c2b698543
+timeCreated: 1592334546
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Mono.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Mono.asset
new file mode 100755
index 0000000..0190ec0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Mono.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Local-MP4-Cones-360Mono
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/Cones-360Mono-4K30-H264.mp4
+ _hints:
+ transparency: 0
+ alphaPacking: 1
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad9145ffa99144ffae9143ffae9143ffb19648ffb69b47ffc1a852ffceb45dffd8bf66ffe7c870ffeecb70fff2ce6efff3cf70fff4d070fff4cf70fff4d06dfff4cd6cfff5ce6bfff5ce6bfff3cd67fff4ce68fff3cd67fff2cc68fff3cd68fff2cc68fff0ca65fff0cb61fff0ca60ffefc95fffefca63ffebc861ffeac760ffe9c461ffe1be5affd7b552ffd3b14fffc8a645ffbf9e41ffb4923affaa8d3cff846e27ffb4a98afffefefbfffffefefffffffefffefefdfffdfefdfffffffdfffffffcfffffefdfffffdfffffffffdfffffffdfff3f1f1ff8e3d63ff892353ff8f2253ff8a2253ff8d2051ff8e2153ff912554ff972a59ff9f3262ffa03262ff9f335fff9f3360ffa23560ffa13560ffa13560ffa33661ffa13862ff9f3961ffa03a61ffa03a61ffa03a61ffa23c64ffa13b63ffa23c64ffa33f66ffa44165ffa34266ffa44269ffa14167ffa24168ffa74268ffa54168ff98375dff89244fff852048ff86214aff86224dff85224eff8a2250ffa46380fffefdfdfffffffafffffef7ffbbb29bff89805eff78693dff776835ff796934ff796831ff7a6931ff7b6a32ff7e6d34ff7e6d30ff7f6e31ff7f6e33ff7f6e33ff807030ff807030ff827232ff817034ff827233ff857239ff807340ff867543ff948658ff84733cff938035ffab9242ffac9342ffac9346ffab9248ffac9347ffab9245ffab9245fffff0a1fffef0a1ffffefa1fffff09fffffed9fffffec9effffeb99ffffe898ffffe593ffffe48fffffe18affffde85ffffdc82fffcd97ffffcd77bfffbd676fff7d372fff7d26ffff5d16cfff3cf6afff4cd66fff3cc65fff0ca61ffefc960fff0ca61ffedca5dffedc759ffedc759ffecc656ffebc757ffebc557ffeac556ffe9c555ff7f8051ff2a6988ff206d96ff237ca7ff267da9ff2c83abff5fb6d8ff8bdefeff94e0ffff94e0ffff91dffcff8dddffff88d8fdff87d8fcff7fd5ffff78cffbff55acd9ff1f7aa6ff1d729cff1e6f96ff20668cff1e6082ffa3255affdc407affdd427fffde4281ffde4281ffdf4581ffe04682ffde4780ffde4982ffde4982ffe04d83ffdd4e83ffd54d80ffbc3c6effa22e5dff9f2e5cff9e2f5cff9e315eff9f335eff9f345fff9f3761ff9f3761ffa03a63ffa13b62ffa23e63ffa34165ffa44266ffa8456affa6486affa74b6dffa84f6fffac5272ffab5674ffad5875ffaf5c78ffb2607cffb3627eff841f4dff892051ff8a2152ff75612dffe4c25dffeac457ffeac557ffebc557ffecc658ffecc658ffecc658ffecc658ffeec85cffedc75cffeec85fffeec85fffeec85fffefc960ffefc960ffefc960ffefc960ffefc960ffefc960ffeec85fffeec85fffeec85fffeec85cffefc85affe7c462ff907b32ff174f44ff185048ff195348ff20544cffb2c4bbffd7c991ff166570ff126370ff11626fff116171ff116171ff106070ff10616eff106070ff106070ff0f5f6fff125e6fff105f6fff105f6fff115d6eff115d6eff115d70ff115d70ff146071ff196271ff146270ff1b5f70ff1d6286ff1a6285ff1a6285ff186180ff196182ff1a6083ff1b6184ff1b6385ff1a6284ff176081ff165e80ff1a5d80ff1a5d80ff53b9e9ff65c6fbff64c5fbff63c4f9ff63c4f9ff61c3f8ff5fc2fbff5dc1f7ff5dc0f7ff59c1f7ff58c0f6ff57bff7ff55bdf5ff51bdf4ff50bdf2ff50bcf1ff4dbcf2ff4abcf1ff49bbf0ff48baf0ff47b9f1ff631c1eff5f2b2bff5b1941ff59183eff5b183eff5a163dff972257ffdb367affd73679ffd93876ffdb3a7affdb3a7affdc3b7bffdd3c7cffdc3e7dffdd3f7fffde407dffdd427fffdf4380ffe34783ffe34a84ffe14b84ffe54e86ffe35285ffc34275ffa1305eff9d335effa13562ffa13661ffa33762ffa53b61ff7d1e46ff7d1e4aff7d1e4bff821e4eff841d4eff851f4fff851f4fff881f50ff881f50ff881f50ff81233effeec952ffefc95bfff0ca5ffff2cc63fff5ce67fff6cf6cfff7d06ffff9d474fffbd678fffcd97dfffedb82ffffde86fffee18dfffde38effffe48fffffe38fffffe38fffffe18dffffdf88fffedb81fffdda7efffbd678fffbd472ff306244ff1c5f52ff1d5e51ff115044ff145349ff17534aff195a50ff1d597bff126a76ff106372ff0f6273ff137a87ff61cbd9ff5dcbddff5acadbff54c8d9ff50c7d7ff4ec6d6ff50c7d7ff47c5d3ff45c2d3ff42c2d2ff026174ff115d70ff115d70ff135f72ff11626fff116171ff116171ff4f93bfff4c92bbff478eb9ff438cb9ff76cdfeff6ecbffff67c6f9ff5fc3f7ff57c0f5ff53bef3ff4ebbf2ff4bbaf0ff45b9f0ff42b6eeff1a6b92ff175849ff145446ff12564aff2988a0ff3db5e7ff3bb4ecff3db5edff3bb3ebff3ab3ebff38b5ecff3ab0e8ff39b2ebff35b4e9ff5da0c9ff551b21ff6c171bff67181aff6a171aff791c1fff761b1eff631a21ff5c163fff601640ff601640ff601640ff621540ff641540ff641540ff641540ff641540ff641540ff641540ff621540ff60163bff58173aff2c4e4cff186251ff89531fff8e551eff8f561dff905720ff93581eff975a21ff965c22ff975c23ff8f551cff8a531aff87501dff7f4f1fff8d6e42ffd9377affd93a7affdd3f7cffdd447effe14a84ffe25287ffe55b8affe96593ffee7097fff27ca3fffb8bacffff96b5ffffa2bfffffa9c5ff9a2357ff6e1d44ff711c45ff751d47ff791e41ff2f4f2fff879059ffb6b374ffdedc9dffbec58dff889f6bff325933ff1b5a4bff185d54ff176152ff377967ff3b7a6aff3b7a69ff3d7c6bff417c6aff3f7c69ff3e7b68ff377867ff367765ff317563ff39806bff50a789ff185980ff73d6e3ff88e0eeff88e0eeff85dfecff80dcebff79d9eaff73d6e4ff6ed3e4ff66d0dfff5fcdddff58cadbff52c8d8ff4bc7d8ff45c4d4ff41c2d4ff3dc1d3ff37bfcfff0b667eff0e616eff0e6170ff0f5f6fff0d5e6bff3a88b2ff3690bcff58c1f4ff55bff4ff51bcf1ff4cbbf2ff49b9f1ff43b6eeff43b6eeff3eb5ecff3db5ebff3cb4eaff527159ff165f4eff347969ff317666ff3c8470ff5dad94ff56aa8eff4da689ff45a58bff42a285ff165b49ff732c37ff8b1f22ffd86367ffd46567ffd36767ffd36767ffd36769ffd56566ffd56162ffd35c60ff7c181cff6a1a22ff5c163fff933465ff9c3d6bff9a4068ff9b436bff9d456eff9f486effa24b71ffa14f72ffa15173ffa55474ffa65575ffa5597aff64143fff25544dff156252ff89531fff90541dffe2914affea934effed9656fff09d60fff4a26afff6a974ffffb380ffb87538ffa15e20ff9e5f1fff8e792efff0ca67ffda387bffdd3c7dffe04180ffe14783ffe24e87ffe6598bffea6492fff0749efff986a9fffe9bbbfffeb4ceffffc9dfff1d788cff6c191dff6c1a41ff721a44ff771a46ff7d1b4aff144d46ff449a86ff46a188ff4ca288ff51a68bff56a78eff58a88fff5aa88fff56a78fff186754ff0f5e6eff0e5c6fff0f5d70ff0b6072ff0f637bff10657bff0f707fff1a648cff175c81ff165a80ff24719dff4fa2cfff358ab7ff3787b4ffa3f1ffffa2f1fcff9dedfbff96e9f6ff8ae4f1ff81ddecff76d9e9ff6ed3e3ff63cfe1ff59ccddff52c8d9ff49c6d4ff42c4d6ff3dc1d3ff38bfcfff36bfcfff74d6e6ff60cedfff4dc7d9ff40c2d4ff36bfd1ff125e73ff711942ff6e1840ff6c1940ff6b183fff6c1940fff5d06dfff7d16afff2ce62fff0ca5fffeec85affecc656ffecc655ff959967ff13637eff369e84ff329d82ff329b7eff339c7fff309b7eff2e997eff107376ff15808eff0a808dffc73c3effc73c40ffc53b40ffc73c40ffc63b40ffc73c40ffc73c40ffc6393fffc5393fffc5393eff4c1230ff812353ff952a5eff952d60ff962d60ff952f61ff963063ff973365ff963463ff973565ff993765ff993a67ff9a3b68ff6b2048ff692148ff2b7363ff307665ffe18732ffe38937ffe48a3cffe88d42ffe88f46ffec9250ffee9757fff19c60fff5a167fff8a770fffcac78ffe59b5effefc95bfff2cc63fff5ce65fff7d16efffcd779ffffdc80ffffe28cffb69f56ff0f6273ff066b82ff4fc4d6ff59c9daff61cddbff208395ff0f7b8dff6b161eff6a1940ff6f1941ff781845ff7d1848ff80194bff52ab91ff60b099ff73b9a2ff86c6b0ff9ad1bdffa5d8c5ffa2d6c3ff94ccb8ff417c6dff0d5e70ff0c5d6fff0c5d6fff0a5f70ff0c6174ff0d6779ff126e82ff1b628dff5092bcff5494beff8bcef1ff93d9fdff418db7ff5f1319ff69181eff185e82ff175b80ff4595aeff7ddbecff71d4e4ff67d1dfff5bcedfff52c9d7ff4ac8d9ff45c5d5ff3fc4d3ff655077ff9f2b58ff845b85ff58cee0ff50c9ddff48c4d7ff3cc1d2ff30bfd0ff2cbdceff831b47ff821a48ff811947ff861847ff701742ff6d1741ff6c1940ff275a67ff265966ff255865ff225563ff245565ff2280acff67c9fbff62c5f9ff5ac2f8ff56bff4ff4ebcf5ff1b6a95ff10667cff44c7d9ff43c7d9ff41c6d8ff3ec5d6ff3cc3d6ff37c3d4ff38bbcfff377786ff912035ff9a243bff721b3fff6a1d42ff7a2a53ff9a3a67ff9a3a67ff74234dff872747ff8d2056ff902259ff91235aff91235aff92255bff94265dff92275dff93285cff952a60ff922b5eff207b65ff369e84ff39a084ff3ca286ff247161ff32715dffdf8733ffe08835ffe18937ffe68b3bffe88d40ffe99045ffed9149ffd09969ff8a521aff8e551bff90561dff975b1cff9b6318ffb0863dff246177ff1a6d9eff3592c4ff2077a7ff3ac1d0ff44c4d6ff52c9dbff60d0e1ff73d8e9ff87e3f2ff4a99a9ff6b161affde4a82ffe2568bffeb6c99ffec87aaffeb94b1ffffc7dbffffcde0ff3a5c7bffef9e66fffaac79ffffbb91fffdc89ffffdc59dffdab79aff5cccdcff6cd1e1ff78d7e5ff7bd7e6ff71d4e3ff64cddeff55c6d7ff19618cff1d709cff60171aff5d1417ff5b1217ff5e1218ffca5658ff6e1616ff23799eff93dcfdff87d5feff7acdfdff6bc7f8ff5ec0f4ff52baf0ff4197c7ff114e40ff0e4a3fff274447ff783053ff854f72ff0b6d6aff0c6661ff0e6460ff0e615eff196182ff176081ffa52459fff06a97ffe75e8fffe34e88ffe04481ffde3d7effde387cffdb3377ff265966ff2d6472ff275f6dff245968ff245563ff46baf3ff42baf0ff40b7f0ff3eb6efff3cb7efff3bb5eeff38b3edff0c6c79ff0c8b9cff28bdcdff28bdceff25bcceff23bcceff22bbcdff33b9c2ff804a13ff882e4aff94245eff92245eff94265fff93265fff93265fff93265eff8e2558ff872449ff941d53ff991d55ff991d55ff971c53ff941d52ff8a1f4eff8e1d52ff921d53ff991d55ff9a1e56ff991d55ff941f50ff573e49ffc43f45ffca474affce5354ffd35f61ff6c171bff28bbccff29beceff30c2d4ff38c4d4ff34aabdff824d1bff8a521aff8c541aff90561dff96591cff9b5c1dff906032ff43b6efff3083afff3486b3ff3888b4ff3f8bb7ff19608bff186a96ff1b709eff1c73a1ff2273a0ffcb4e51ffcd6264ffc56a6effa2465affa03561ffa43b63ffa4456bff635a75ff096a7cff0a6f83ff0e7589ff127b8fff806d2dff9df2eaffc5fffcffe6fffcffedfeffff7adae9ff8ee6f3ff96e8f7ff89e0f2ff70d5e4ff65c4efff5ab8e7ff1b709dff681519ffe08285ffe07e82ffd46b6cffcd5358ff285b71ff9fe6feff9ae2ffff8bdaffff7cd1ffff6bc6faff5bc1f6ff51bcf1ff48b8eeff6db69eff56aa90ff44a287ff1c7461ffa5faeeff7fe4daff5bd3c5ff43cbbfff31c4b7ff207da7ff6cc9fcff59c0f3ff5cb8eeffdf387affdc357bffdc3278ffdc3077ffd1306cff347381ff2d6d7dff2c6e7eff2a6c7fff275c70ff245563ff741540ff72153fff6d153eff741841ff6e153eff29b1c3ff30c0d4ff31c1d5ff30c1d1ff2ec1d3ff2ec1d3ff2abfd1ff585442ffac631fffeb9046ffea8f47ffeb8f42ffe99243ff86501bff861c23ff851b20ff851a1fff84181dff621516ff852546ffe0387cffe13d7fffe14382ffe44582ffe54784ff971f54ffdd337affdc367affde387cffdf3c7dffe03f7fffe2417fff128498ffc12e35ffc23238ffc4363bffc83c42ff864d18ff38b2e8ff2681afff2b84b2ff2e85b1ff3587b3ff834d1bffe28c43ffeb924bffef9a5bfff7a66fffca8043ff8f6034ff62c2f3ff79cffbff20729fff0d687cff0d7286ff18608cff56baecff6ec7f9ff52a8d1ff1f7da9ff7bddd2ffc5fefaff297e77ff5e1316ff651318ff0e5c6fff0b5e72ff0a6377ff0b697cff0a6f82ff0e7589ff117a8cff806d2dff887a35ffd7fefafffcfefdfffffffdfffffffdfffcfbffff7cd0f8ff94e1fbff9fe6ffff8bdaffff70c9fcff0b6f70ff1a658fffe98687ffe18181ffd66b6bff73b8ccff53a3b7ff086271ff75d0deff62c7f1ff5ac1f5ff52bef3ff72b4d1fff29d5dffeb9457ff8b9c6fff4b5c65ff1c6d91ff145c80ff135b7fff145780ff105142ff165748ff125344ff4ebef4ff4bbbeeff42b8f1ff40b6efff39b3e9ff2186afffeb8c3dffe48a36ffe48734ff6ba8b7ff5eafc3ff5bacc0ff55acbfff53a8bcff4fa6bbff721541ff871848ff831847ff781643ff6c153dff265968ff235866ff22bdceff22bcd0ff21bccfff2db6cbff2c6b78ff2f5f6affe58933ffe58933ffe58933ffe58933ffe58932ffe58932ff861b21ff851a1eff84191dff83171bff7c181cff92561bffd62c72ffd92e75ffd82e77ffdb3079ffdb3079ffaa235bff933c3dffd82e76ffda2f78ffdc3077ffdd3279ff34b6c8ff49cadaff0d879aff8b531bff95581bff9c5b1aff975c1eff545765ff76161cff7c171fff80181eff851a20ffdf8732ffe38a3cffe88d42ffeb9048ffec9450fff09958ff53b3e5ff4fbcf0ff3587b6ff186f9bff0b677bff0a7388ff4ab9eeff4fbcf1ff5bc2f5ff6dc9faff446174ff3b9693ff3c9993ff137f7affc94e51ffd4696bff299aabff5dcbddff71d4e2ff8adfecff9beaf5ff9fedf9ff0f7d90ff806d2dff8b7933ff56133dff6a163eff6d123eff6d133eff731541ff0f6561ffc4f4f3fffbffffffe7fffcffc2fffcff0c6f6cff196791ffa4d8e5ff9ad1e0ff89c5d7ff76d6e6ff298ea0ff7adceeff6dd5e4ff51c9d6ff3ac2d2ff776227ffca7f43ffde9053ff703f11ff801945ff6a153dff1a6f96ff7cd3fdff59bef2ff105b89ff466c6bff3ca284ff329e83ff3b9381ff81e3d8ff52cfc4ff34c7b8ff2883b4ff46baf1ff43b9f0ff3fb7f0ff3bb6eeff3ab4edff49addbff347b8bff51a1b5ff2a7588ff9d1f55ffe04281ffe23f80ffe23a80ffe1367aff731342ff3b788cff38788dff3d8598ff245562ff327585ff2f707eff2b6a77ff28606effa15e1eff9e5a1affac6016ffa25e10ff8f5317ff7b1e22ff851920ff86181dff83171bff82161aff7f151cffe08630ffe38630ffe48731ffe58934ffdc367affe0367cffdf3a7dff85412dffe08b41ffeb9144ffeb944bff3a7069ff20bccfff29bfd1ff1b8c99ff885218ff93571aff9d5c1bff9e5d1cff4e5b68ffc23439ffc53d40ffc94548ffcc4e50ff885219ff35c6b7ff47ccc3ff5ad3c4ff66dacfff978134ff937d32ff18608bff186a97ff19709eff34bed0ff49c4d5ff64d0e1ff80dfedff9b406cff6e2e4aff743954ff0c6464ff0b7172ff0a7c7bff217d83ff2a6378ff4bc5d8ff54cadcff67d1e1ff7ad8e7ff88e0eeff8ce3f1ffe5e0a3fffff6affffeeda2ff58123bffffa0c1ffffcae0ffffe6f7ffffe0f1ffdafefffffffffdfffffffdfffffffdffd2fffeff9cf1e7ff65bdedff096571ff9decf9ff8de2f0ff60cedeff55c8d9ffb5905dffae954bffb29342fff4d068fff1cb60ff7e4c1aff704213ff6d3f13ffb23d70ffee6995ffb26793ff47bbf2ff3eb8f0ff35b2eaffa5597aff993b66ff420e30ffc23e75ffda3e7cff3d4037ff0f5c4bff0d4e3fff104a40ff2d7ea2ff3cb3e5ff3eaddeff2c6674ff225a69ff54abc0ff53aabcff52a8bdffde317bffde3178ffdc3178ffdb2e78ffda2d77ffda2d77ff347f96ff4da7bbff4da7bbff999151ff519eb3ff5aacc2ff55acc1ff357b8effa35f1cffe7882fffe58932ffe58932ffe58932ff821c1fffb92f38ffc6343affc8353bffc8353bffc4353bff76161aff961b52ff911b4fffdb2d77ffd92c76ffdd2e78ffde2e78ff01897fffe2852dffe3872effe58932ff47656bffbc2d34ffc92c34ff46739bff8d5018ffe58a39ffeb9148ffee9651ff51a7bdff52aabbff9c5b69ff875560ff3e7d8dff8b5319ffc57837ff9e5e1bff836d2dffeec85cfff7d26fffac8e37ff16608cff176996ff19709eff1973a0ff1b77a3ff1f7dabff25576eff275e74ff28697cff2d6b7fff0a6363ff09706fff097b7aff218087ff2b6479ff2d6b7fff735f26ff896339ff9d4369ff73463cff430a2bff47082dff490b32ff510b36ff58123dfffffffdfffff0faffec7da8ffc76078ff5f1017ff691217ff135e79ff489da9ff10567eff165b84ff186692ff84e0efff7cdceaff70d5e5ff43092eff42082cff460a2fff0a5c6dff266072ff83c3d4ff75bacaffffae77fff39e64ffe68d45fff68679ffe04280ffde3d7effda3778ffdb337aff44082dff7b1e4fff8a2056ff904944ff991e56ffda3076ff7d4b14ff0f5c4aff0a4e3fff104b40ff225764ff215464ff55acc1ff55aac0ff51a8bdff4ea8bcff461f44ff669cb1ff36193eff4a0833ffab3a79ffb3397aff55a6baff4da6bbff0d5b49ffeec54effecc54effebc44dff4ea7beff4ca5baff4ca5baff4da5b9ff741419ffe4862affe3852bffe3852bffe3852dff745978ffc22b30ffc22b30ffc32c31ffc32c31ffc32c31ffc32c32ff961b52ff901b4fff1a7ca9ff1d7dacff1c7ca8ff1e78a1ff1ec3b9ff20c5b7ff22c7b8ff29c8baff486469ff1b77a4ff1c7caaff1d7dacff9c7f59ffe3872effe58933ffe78b39ff187783ff39869bff55a4b7ff887630ffedc85bffe28834ffe78c3fffec9149ff1b838effeec858fff3cc5fff9f9352ff126896ff4bbaf0ff4fbcf3ff57c0f5ff61c3f8ff2d92c0ff5faec0ff62b0c2ff6ab4c7ff73b8cdff56d0c6ff5bd2c7ff81e3d9ff71b8c8ff93ccddff97d1e1fff2d070ffffdc88ffffeda2ffe0cc81ffa65d7affb0738affbf869affc08c9fffc07e99ff99f1e8ff9bf1e9ff5b1316ff5c0e15ff601015ff6b131aff92defeff9fe3fdff98defeff85d4feff73c9faff12587eff145984ff450b31ffb77891ffa96282ff9e4e70ff47b4c5ff4ac0d2ff6ab3c7ff5ca5b8ff4990a4ff600c11ffee954dffe88f46ffe78c3fffe48a3aff274f63ff9d426eff983963ff952f61ff4c0d34ff7b6927ff766327ff8f5519ff7e4c18ff339f81ff2a9c7dff2a9781ff265c6cff2d697dff205363ff2e7285ff256778ff225c67ff94245dff94215bff94215bff911f5bff7e1e52ff90782dff74652aff2c9e81ff2b9d7fff289c7dff37473bff951a51ff8a184cff851920ff82161cff7e141aff751318ff651318ff7b151aff6f1417ff327489ff1e7da9ff2285b2ffc2282cffc0272cffc0272dff9c1b4cffa61c59ffa31c59ff921950ff187ca7ff1d7dacff1c7da6ff1f79a1ff5f0d3bff620d3eff620d3eff5a103aff476469ff1c7dafff3eb8f2ff41b7edff2287b7ff1e729dff33b5ebff36b7ecff0d8b85ff4ea6b8ff64a5abffac8b2dffedc653fff1ca5bff907a2cff2dc0d1ff35c2d4ff3dc6d8ff2e8fa1ff0e748dff47b6ecff46baf1ff49bbf2ff4bbdf5ff4dbcf5ff51bdf4ffd5636afff2cc62fff2cc65fff6cf6bff3ea386ff4ea78eff68b199ff107174ff3d9aa4ff0c6063ff768f58fff5cd62fff8d26dff10615fff9a416aff9f4c71ffa35377ffa65779ffab6632ffa76838ff125780ff5c1217ff5c0e15ff601015ff6b1218ff6c1140ff6bc7f8ff68c8faff3287b1ff0a4a3effa4e8ffff74c6f7ff470a2fff9c486eff9b416aff963560ff6d4014ff096270ff055f6cff085b6eff13677aff8a262affc53c40ffa93843ff60b0c2ff5eaec2ff57abbfff942a60ff94275eff95225aff781545ffa28e40ff4b6c5cff985719ffe98d3effe78a3bffde893cff519db3ff50a9bdff4fa8bcff4da7bbff50acc0ff50a9bdff4ea8bcff4da7bbffa81f5fff961a59ffdb317affa18633ff90782cff736429ff70133fff3f5b57ff81171dff7b141aff951a51ff8a174bff941c20ffc42e33ffc42d32ffc22e34ff651318ff7c1319ff6e1316ff4da7bbff30b4ecff30b4ecff32b5edff32b5eeff45b3e3ffdb2b78ffdc2c79ffdc2c79ffdd2e78ff187babff2083b1ff1b82afff1c7aa2ff931c59ff931e5bff93205cff90245aff6f5e36ff32b3eaff33b5ebff34b6efff37b6f0ff1a6f9dff0a7c7bff098682ff0c8a83ff86712eff937d31ffa08a38ff968034ff866134ff8f7a30ff927e30ff9f8635ffa58b37ff0a6b83ff46bed5ff166b97ff1d73a1ff1c7cacff731218ffc83e44ffc64043ff670a2cfff5c768fff0ca5ffff0ca5ffff2ce63ff927e32ff59d0c6ff7be0d4ffb1fdf6ff0a6264ff056765ff77d1cdff0b7b7aff69d4ccff85e5daffa6f4ecffb9fff8ff8cf1e9ff0b7084ff13597dff11567fffd36d70ffde797cffdf7b7dffd96f73ff6e103fff761445ff0e4f42ff094a40ff0b4a40ff0e5348ff096564ff5a5268ff076061ff086869ff6d3f11ff6d3f13ff096270ff055f6cff065b6eff126575ff076370ff055f6eff065b6cff116175ff387989ff58a9b5ff0d4e41ff7d1544ff6e123eff6a123dff135f82ff135d81ffe08a3effe68832ffe4862effe3852cff0d4c42ff5e1015ff2a6675ff25606dff215464ff15857fff0a7a74ff086c68ff0b6361ffd62a73ffd62b76ffa18633ff90782cff746427ff71123fff62666eff82161dff7b1319ff951a51ff89174affc12830ffc1282effc1282effc1282effb92a2fff831519ff6e1217ff50a6bbff55a4b0ffab8739ff948740ffc0272fffc3282effd82b76ffda2a77ffd82976ffc73179ff30b4ecff32b5edff33b6efff34b7f0ffc32b32ff941853ff913d49ff97591affbf7029ffb86920ff736441ff1173a5ff1b79a8ff1e7caaff25c7baff2ecabbff3ed0c3ffd6c163ffedc654fff0c856ffad9342ff886334ff907b30ff957f31ff9e8534ffa48a37ff32c0d3ff39c2d6ff41b9efff46bbf2ff47bbf2ffc74348ffc84348ffb94855ff560b38ff580d3aff235065ff756226ff84712cff917d31ff6c612cff20a090ff77763bff5ab495ff4bcfc3ff5cd5c6ff6bd9cbff7acdffff50c7beff4bd0c2ff309c9dff085f71ff0a7184ff13597dff11567eff145b84ff146592ff7c3925ffc5547cffec6b96ffe75d8dff0d4e40ff0b4940ff0c4b41ff105348ff086660ff066161ff69d7ccff43b9b0ffee9657ffe6924dff48c7dbff3ec4d5ff34c0d3ff3cbbc4ff046370ff055f6fff065b6cff0f6074ff0b4c40ff37a184ff339f81ffdf357cffde3178ffd82e75ff3cb8f0ff3ab7efff36b5efff36b3e7ff0f5e4cff0b4e40ff0d4c40ff5e1014ff2c6a7aff2c6a7bff205564ff158983ff077a71ff076b66ff0a6360ff796825ff1a769effefc54fffeec44effeac049ffdb2b78ff586d6dff8f191fffbd373dffde2c77ffdc2c79ffd92b75ff91184dff871649ffc3282effc3282effc2282effc2282eff087e8bff9f8637ffa48a35ffa08532ff8e7a2bff620c3dff0c8294ff0e879bff32b1ecff36acdfffccc373ffd3c768ff2a6d83ff327487ff43707eff2d5a5affa98731ffe4862cffe6872dffe6872dffc9742aff1a71a1ff1f7fafff1f81b1ff1d79a8ff2ebbc3ff1976a1ff855017ff91561bff8a5218ff741418ff855b2dffeec654fff0c858fff3cb5efff2cd5fff7c4816ff895017ff8e541aff8f551bff096d6fff097d7bff0b8481ff4d0932ff6a1a45ff5d0e39ff215065ffeec95cffeecb5efff4ce64ff736125ff896c1efff4d275ff957c2eff51a08bff49b9f0ff49bdf2ff50bcecff056364ff096e6dff48c0cbff53c9d9ff56c9daff62c3f7ff69c5f9ff6ec6faff68c6f9ff6d3f11ff774414ff895320ff9aede3ff226959ff6fb8a2ff65b199ff53a68eff09706bff87e7dcff38cbbeffa1a571ffe88d3effe78a3bffba4045ff3ba185ff389f83ff339c7fff219cadff39c1d4ff35bfd1ff0e6174ff379e84ff0a4f41ff84501aff714113ff8b2944ff761240ff30315eff31b6ebff32b3ecff36b5ecff2b9d7eff289c7fff27997dffc52b33ff50a9beff4da7bbff4ca5baff158781ff088981ff05807aff0a6360ff7a6926ff1b779fff176a8eff125b7fff135f82ff145c80ff178378ffc3282effc2272dffd02859ffd72b77ff9b1b55ff931850ff861649ff6f133fff2a6581ff178493ff0b8292ff077c8aff9d8737ffa48a35ffa08532ff907a2aff620c3dff16bed0ff19bed1ff1abfd2ff1bbfd1ff43baf1ff218bbaff4ba7bbff4ba7bbff4da8bcff3f9ba4ffebc44dffebc44dff536970ff42b2dfff3cb6ebff31b2ebff32b3ecff34b6efff1a92c8ff37b5ebff2193c7ffe38631ffe68a34ffe88c3cffc12f35ffc63a3ffff1c657ffefc753ffefca52ff098497ffe58b43ffe88d42ffe78e45ffe98e47ff3db5aeff55d2c8ff50d0c7ff922d5fff942d60ff7a2551ff225166ff295f72ff306980ff1d5778ff435543ffeec85afff0cb5afff3cb5cff3fa285ff3fa387ff44a488ff48cfc1ff56d2c3ff5fd4c7ff66d7caff5cc0f5ff65c2f8ff67c3f7ff2495a5ff4ac0e7ff6c400fff6c3e10ff774414ff885320ff279189ff23918aff41a489ff3ba286ffc55a82ffe04c82ff3fcec0ff982b5dff115a7dff225476ff6d2b37ff796229ff135b7fff13567dffdf387dff2bc3d4ff2ac1d2ff26bfd0ff2d9e80ff2c9c80ff289c7fffea8c36ffe58933ffb33250ffde3178ffdb2e78ffd72c75ff33b8eaff2080aeff207fadff096877ff4e444cff661014ff610f14ff1abfd0ff1bbdcfff18bfc5ff18c7b8ff19c5b7ff2fbeb1ffa88d35ff2087b5ff36a6d5ff145e83ff1b82adff125d80ff1ac8b8ff1ac6b8ff18c7b8ff33b4efff32b5eeffdd2b77ffdd2b78ffdb2b78ff821650ff17698dff109cb0ff18bfd2ff1abfd2ff9e8834ffefc64fffefc64dffc3a43dff620c3dff5c0b38ff2b7082ff2195a9ff2d6e79ff35b2e7ff088793ff0d8078ff33b2ebff30b4ebff307285ff327585ff306f80ffa43e7bff30b4eaff30b4eaff3d899aff2b737fff580c3cff32b3ecff33b5edff33b6efff8c6027ffdc3179ffde357cffbc306dff106153ff0e6769ff32bdd0ff34c2d6ff1296aaffb86d49ffe48a38ffe68b3bff8b6a3eff5c734dff30cabcff62af80ff1a73a2ff1f97a8ff39c1d2ff205068ff295e71ff2a697fff1a5575ff24566aff276175ff2d687eff50cec5ff61d4ccff2992c8ff4dbcf0ff075c73ff066072ff086b7fff12798dff5ec0f3ff58c0f4ff11567fff14608cff834d16ff704012ffc68658ff975721ff885221ff5f1017ff6b131aff8a4c0ffff89465ffdf3c7cffde397cffbb3571ff1b658cff125a7dff13567dff175b84ff746425ff155c84ff135983ff195f8aff125a7dff4893a5ff53a9beff51a7bcff14604fff0b4e3fff0a4b3fff0e4b42ff8a1d23ffc32f34ffc12d33ff601d42ff4b0830ff44082cff430f30ff228193ff3d7592ff631116ff621013ff5d1014ff208d73ff259b7eff19705aff299c7fff065142ff0e4d41ff30b4eaff2fb3ebff2fb3ebff30b4ecff31b4eeff821f4fff22c3bbff93265eff317283ff2b6876ffcd3074ffdb2b78ffdc2977ff1d80a9ff13688fff24b6c1ff18bdcdff16bdd0ff14a4b8ffe6c350ffebc54cff651141ff6d1042ff5d0a3bff552529ff327487ff2d6c79ff0e8c86ff0b8980ff0c8178ff1f7dabff1c6181ff317386ff327585ff307080ff097e91ff108598ff4ca5bcff4da6bdff699eb8ff911b5aff901e5aff855017ff975b1bff8e6023ff60764cffb3734fff8e7c2cff106153ff136c58ff24becfff28c1d2ff28c1d2ff4e0932ff560b38ff5b0e3dff273b42ff816a26ff8e7a33ff9c8634ff1e7caaff2d768aff1a8b9eff55a6bcff53aabdff55acbfff1d5475ff56aabeff5bacc0ff5dadc1ff32c5bcff437a5cff7a6727ff88722eff065d6eff075e75ff0a6c7fff127b8dff57bef4ff1870a2ff11567dff15618dffeb924dffeb9046ffea8f44ffea8f44ff631104ff5e1016ff6b141aff726125ffe38d41ffe98d3fff9a466dff9b3a69ff1a618aff125a7dff14577eff175a84ff746527ff3bb8f2ff3ab7efff0f5c83ff13597fff17587fff0b5141ff0b4c40ff14604eff0b4e3fff094c3fff0f4b42ff0e5c7fff4c4965ff763429ff612041ff500a33ff4a0830ff451030ff215264ff915517ffc42a32ffc3292fffc1282dff285465ff1f5667ff0a7973ff239b7dff259b7eff0e5e4cff259b7eff259b7eff239a7dff239a7dff239a7dff953a63ffdc2d77ffc42d70ff50a7bcff4da8bcff534966ffd63a7dff32b4ecff30b4ecff30b4eaff259b7eff5c0c38ff474669ff1bbdcfff19bfd0ff931a56ff911a5aff901958ff901958ffa82d3bff4da8bcff4da8baff17c6b7ff18c7b8ff20c3b2ff31b4ecff4e9abfff367c90ff3c859bff307081ff0b7e91ff128d9eff0c828eff610c3dff6a0e43ff1b72a0ff1d7aa9ffcf7f2fffe5872fffc09148ff72733dffedc654ffb0953aff2b9b81ff329f83ff276f98ff78161cff801921ff4b0c33ff540c38ff5a103cff3b6265ffcfc263ffd4ae4affeec95eff1c7aa9ff912e60ff265a6eff2c6779ff691419ff77151bff13577bff51a7beff51aabfff50a8c5ff0b7676ff725e27ff7b6828ff88732cff39bfc0ff34c2d4ff39c2d5ff47b7d4ff1f739fff476a78ff4cb9f2ff57bdf2ff6f3f12ff7d4b16ff2281a2ff5e1013ff5b0d11ff5f1115ff6b141aff716225ff716024ff806d2dff155a81ff14577eff47b3eaff41b8f1ff3eb6efff3cb7effff3c957fff1c756ff104b40ff41b6efff3bb5eeff43a4daff0e5443ff0b4c40ff14604fff0b4e3fff094c3cff104a41ff35b5ecff1a79a7ff934241ff8d4034ff911e5dff8f1c59ff871f58ff245364ff935418ff7e4c15ff2c6775ff215665ff285264ff1e5a67ff1bc7b9ff1bc5b3ff269980ff50a5bcff168883ff0a7a73ff096763ff4da6bbff50a9bdff0b5342ff620e3cff520a33ffc22931ffc42931ff146e5bffd73078ffda2f78ff1d7ba5ff197097ff631240ff5c0c3aff524767ff208596ff1f97a6ff257eacff207eaaff1e78a0ff1d8badff0c7a8bffda6f4effc2272dff773e3aff189e87ff239a7eff289986ffc12830ff4ca5baff4da7bbff798a70ff1ab9cdff1bbdd1ff56aec8ffdf7555ff8f9b8eff31b2edff32b5edff33b6efff2480adff136456ff136c58ff34b6efffedc651ffefc556ffe0b852ff8b501eff76161cff801921ff852a5bff942a60ff952c5fff247576ffd43d7bff135f89ff41b7edff2382b4ff155a4fff255a6eff2a687cffc43239ffc53339ff3cb7eaff3ab7efff3bb7efff3db8eeff0e7776ffe8c95effeec856ffeec858ffeec95eff7d4918ff685e49ff11577eff18628cff496b7dffe78f4aff744413ff9e622eff7f491bff0b6162ffb63f44ffcb4548ffc84346ffc63f42fff2ca5afff1c957fff0c857ff43b9f1ff40b9efff4a6c6eff15587fff175880ff1a6080ff145980ff0e5143ff0d4c3eff074e53ff4eb4dfff5d1015ff116751ff359a81ff339e83ff2d9d81ff2b9b7fff299c7fff24bbd5ff086461ff74153fffe58930ffe4882fff8b9d8cff4ea8baff4da6bbff175a7cff707058ff4da8beff4da7bbff579bb3ff276371ff3f515fffc22a2fff206e5cff135e4dff148982ff118b81ff086a67ff269c7fff289c7fff289c7fff644e6aff41596bff177096ff19688cff17735dff299b7fff19765eff1c7ea9ff19729bff651340ff600b3aff554b6bff2f7484ff2c6c7bff31b4ecff30b4ecff30b4ecff0b7e88ff0d7984ff631340ff62113cff147592ff207eadff1f7da7ff1f74a1ff227eadff1f7da9ff9a591affe28836ff446a83ff207eafff1f7da9ff219aaeff0d8091ff2183b4ff176050ff176958ff166c5aff156d5aff19725dff382436ff136254ff196a59ff206b50ff8b501effb23539ffb63a3cff2b6c70ff145c4eff186959ff127c7aff0c7b77ff541137ff53133fff30697fff319e83ff53a8bdff53a9beff57a9bdff0c6568ff117b79ff754315ff885017ff34c7bbff34c9beff168a86ff46c5aaff44b7a0ff6c3e12ff7d4919ff6d5c45ff11567eff176189ff2174a1ff6d3f11ff7f4a18ff916728ff631311ff0a6161ff0b6162ff2c5569ff73a6b9ff306d83ff2783b1ff517b86ff345968ff23867eff736125ff41b7efff3fb7f0ff3eb6efff0d6462ff36a1ccff35a385ff35a084ff359e83ffe98c3bffc73b42ffad4148ff53acbdff3580a3ff829373ff736226ff155a81ff0a6f67ff076360ff871f4fffdb3076ffeac458ff776328ff22c6b7ff1a739bff155a81ff247b8eff29bbcbff34aeddff50a8c3ff50a6bdff7c4c17ffecc54eff206e5bff145e4dff025d4fff1dc4b9ff26bec5ff9b8643ff4b654bff367788ff0e857cff0b726cff1f769dff18688cff4ca9bcff31c5bdff1898a9ff38b6ecff3ab2e7ff94265dff912259ff861b50ff4da7bbff4da7bbff207d7eff296c55ff138798ff22bbcbff18bed1ff63143fff62113cff18859fff30b4ecff32b5edff30b4ecff30b4ecff32b5efff5e123dff621240ff2172a2ff207caeff1f7da8ff0a798bff7a181fff861b21ff166050ff146857ff166c5aff79171aff861c22ff3d2638ff136254ff196a59ff206a50ff8a511cff995c21ff0f788bff1e8093ff266d75ff339d88ff13807eff128984ff952d60ff922c5fff30697eff545b70ff845020ff733723ff4d262cff29c9bcff2ac6b9ffe48a36ffe68a36ffa5915fff55a9baff0f6369ff137170ff19817fffe58a37ffe78b37ff6a5f4fff40b2e6ff2482aeff407ba3ff704013ff7c4917ff836e2eff872227ff41cabfff1b8d87ff3dc5b8ff381f28ff651419ffa06426ffa16225ff145a7eff15587eff266a95ff255165ff1b5a7eff215462ff37c9baff33c8baff1a5449ff1c5e78ff165c82ff195a84ff0c687aff0b6073ff196d6eff57abc0ff54a9beff157c74ff46baedff2ab2a9ff2dc4b8ff186383ff0c756dff0d6462ff977e31ff77662bff36b8ecff34b6eeff65151cff60181eff115567ff34b3ecff965921ff7c4c1bff6c4a2aff21715cff1c6e59ff135241ff242237ff10817affa08a36ff486648ff156250ff30c6beff32b0bdff3cb6ebff2897caff0d7872ff3bb7edff3bb5f0ff41b3e7ff168d87ff309e83ffde347bffdb3077ff217fafff1f7aa5ff23668bffe6882effe38830ff237aa3ff892225ff921d58ff921d59ff1a8595ff0f7f8cff1c6c5aff2676a4ff2681aeff217ba8ff921c5cff921d5aff249bb1ff32b5edff33b4edff7a1d22ff79181fff871c22ff269b7eff269d7fff279e82ff78161aff841d22ff422f43ff2b9d80ff2d9d81ff429572ffe18934ffe78c3aff3ab8caff55abbfff3e7e93ff38c8bdff37ccbeff0b998fff54aabeff428597ff55abbeff6a5d76ff844f20ff8e551eff0b6178ff42b2e5ff39b6eeff116165ff2c7f82ff288589ff127978ff0b6060ff157271ff18827eff5f1117ff6b161cff5ca8b9ff37788eff247a75ff21709effa35f2bff916024ff836d2eff704016ff6f1e20ff6c173fff5c1316ff62191cff45112fff45102eff4d1231ff2b84b2ff2b84b1ff235467ff265165ff195b81ff437f91ff467f93ff1b554aff276e60ff3d1f38ff470e30ff295761ff494863ff6b1c45ff0d6964ff0b605fff576973ff026860ff34cbbeff34c6beff145c80ff275b71ff0d756dff0c6560ff8d1f24ff4e4a5eff621418ffc52d38ffc42d34ffc32d37ff481530ff8d7830ffe5892fffe68731ffc78a51ff6b5366ff894362ff952760ff50465dff1fa298ffa28938ff4b6f5cff369f85ff3cc4cfff861b1dff701719fff3ca5bff0d7871ffa33539ffc33640ff287fa9ff34cabeff2dc9bcff5bbcafff8d1929ff33b4efff36b5eeff3ab5e1ff127f8dff2781aeff207aa3ffc32c33ffc22b30ff972054ff22bccdff2eb6c2ff1a6b56ff2878a5ff267fadff2179a2ffb12e3aff32818eff158292ff1dbdceff1dc0d1ff8c222affbf2c38ffc02e34ff198092ff8c215cff6c3868ffc42c33ffc32e35ff0f798cff77171eff9c2a5eff826c2dffeac856ffefc95aff855f29ff147e7dff188883ff3d9d85ff21856cff4a1538ff923461ff106576ff1e8191ff83694affe48a38ffe48a38ff207c92ff1d638eff20739fff20648fff2575a3ff764d23ff7c5e37ff356b81ff4a1925ff67191fff862128ff882226ff7f2220ff0d605eff1a7a77ff124c43ff791647ffaa8d3effa58e40ff6d4116ff6a1c3dff6d1c43ff892528ff8a262aff4e1032ff642145ff5a193cff1e5c82ff195a80ff245364ff3f788bff195a81ff676057ff328b89ff287770ff5ba797ff1b5c7fff215b82ff275965ff464961ff6c1e42ff61a9b0ff60a5a6ff6d4626ff44bfb3ff38cbbeff530f35ff361037ff1a678aff085e77ff306a74ff176671ff326c7affbd303aff354c39ff843f30ff652d3cff481531ffedc650ffedc651ff79794fff897630ff308c75ff309a7fff3181aaff21668aff387688ffe9c956ff7b773eff6b96cbff13837bff12726cff21799effa78c40ff267da9ff872126ff178696ff107885ff63674cff9a8231ff17877fff841f23ff791a1bffa48a37ff1d879aff138090ff39b5edff3cb4e7ff831c21ffcb745effdc3076ff6f1c4cff269d7dff279c7dff2e78a7ff2781aeff2178a2ff386f7eff22a0b1ff1591a2ff9e5e28ff3190bdff93a177ff2875a1ff277cabff358eb0ff9a285dff127788ff1d9facff8a2053ff11788cff76171bff1e73a1ff2376a3ff861e4fff962258ff8b612aff157e7dff178985ff36c2d4ff166279ff17798bff1c5e85ff2275a2ff1f648fff2274a1ff265b71ff197183ff207d93ff145884ff2878a3ff20658eff2576a1ff7e4c23ff90592bff1d6f70ff19657bff88232aff4a4a4dff1b7177ff2f606effa89042ff226f5dff207060ff21705effa48e3eff6b1a41ff5d191bff6a1a3fff6e1d42ff1d5d82ff19577dff216691ff297361ff297161ff1f5d83ff1b5a82ff417788ff60181aff71451cff6f421dff6a1b3fff1b5c7fff732647ff1b5b81ff245b85ff275865ff484b66ffb13c6dff1d5b81ff691640ff6d4626ff144e41ff1e4e48ff0f626fff145e6fff267298ff185a80ff471530ff166772ff326c7aff255664ff394b3bff984c39ff682c3cff471530ff8e2350ff751e44ff777951ff897730ff766737ff1b7d76ff3a98c5ff3ea4d9ff57a7b8ffa48b3eff85722cff731c42ff16847dff13736dff20789fffa78c40ff63c3f2ff852227ff18899aff158594ff645a41fff0ca60ff198593ff28737cff4b6e76ff5d163cff627050ff32bae0ff3ab6edffa05a30ff995627ffa38838ff25705fff682047ff347eaaff237fa9ff3daedfff32b5ebff30b6efff36707fff2680abff9f6230ff995d24ff9f6028ff7c5227ff2677a2ff187c91ff336780ffc83771ff187387ff21c6b9ff8d2051ff13788cff97833bff1c739fff2376a3ff892151ff952357ff8b6136ff277ea7ff8f5625ff22524eff156678ff3dbdd1ff1990a6ff3691b8ff1f618dff2174a1ff29596fff268b9aff248a99ff1b5b84ff2a78a3ff2985aeff2984abff804e22ff965b2bff9a2854ff27889cff7e1d4bff146264ff147474ff5d1618ff704118ff754e29ff68173dff762149ff716127ff6a1b40ff712222ff6b1940ff6d1c43ff216089ff455275ff6a2247ff491730ff4d2038ff1d5349ff1b5a80ff611921ff1b5a80ff704619ff6e411cff681c3fff1d5c80ff722545ff1c5b7fff255d84ff285969ff26556cff185b80ff1b5b81ff681740ff6e4627ff144e41ff1e4e48ff3e92a3ff2b93a3ff277499ff1c5a7eff461530ff136774ff346c7bff255664ff1c4f46ff185043ff4b576dff6b2021ff8e2252ff761e46ff7e7e4fff897631ff776738ff1b7e77ff196763ff5c193bff957e37ffa58c3fff86732eff7d1d45ff60d5cfff72dcd9ff267ca5ffa68b3cff8b762eff872429ff21769bff168290ff2c4357ff227da5ff239daaff1b8f9cff147e8aff5e173bff9c5d23ff3b7372ff1d6c57ff985d28ff945820ffa48838ff287362ff642246ff347eaaff257faaff237caaff217f93ff1d7c8aff35707dff2680abffd5853dffb26c2dffa06027ff845020ff2676a2ff157c90ff167081ff1d6a5aff166e68ff1d798fff8a265bff1d7c8fff97823cff1e739fff2476a3ff8b2352ff952457ff8a6238ff2a7dacff8e5824ff22514cff1c807eff79682eff948037ff5a2040ff388bb5ff3385b2ff6e7560ff23719fff28879aff288a9dff21658fff2877a6ff6d2043ff8e2f59ff2f7060ff875020ff1b5b83ff206d9bff136262ff147373ff5e171cff6e4119ff784d28ff68173eff7c264fff75602cff816e30ff2c566aff49778cff185881ff25618aff8a3a5eff9f2c5dff481832ff4e203bff1a666bff256669ff6d6434ff806d37ff73451fff6e4120ff6d1c43ff1c5d82ff742746ff1c5d80ff245c83ff285969ff27566cff185b7eff205a81ff6c173eff7c5942ff144f41ff1e5046ff572327ff5f181bff277398ff1a597cff7b314fff187380ff346c7bff255664ff1b6b68ff1a6864ff4b576dff6b2021ff2f524bff73481fff6a2737ffeac06fff3a714eff1c827bff196866ff5b1a3bff937d34ffb99a46ff9d8434ff7f1e46ff27729cff49a0caff9a3562ffb03667ff861a48ff86262aff20759aff168290ff2b4355ff247ea6ff206f93ff9b5c21ff147e8aff5e173bff9c5d23ff3f7374ff1d6c57ff367488ff948035ffa58836ff277362ff672347ff377fabff257faaff237caaff268091ff1e7d8cff33707dff762d14ff70804cff287fabff925a23ff855121ff2676a2ff187b90ff178695ff349883ff1b7d7bff1d798eff147285ff1e7e91ff7a5127ff1e739fff2777a4ff892553ff98265aff8c633aff2d7dadffa16027ff20524dff1c807eff915233ff742626ff592240ff20628cff2a76a4ff707660ff24719fff2c586bff407289ff24648eff2775a4ff5d2143ff1f6770ff2b7a75ff875120ff20668fff2777a6ff2c73a2ff72431cff60151bff164e45ff1f5f50ff265263ff315d71ff73612aff816e30ff2b566aff4a788eff1a5a80ff25638dff1a6364ff5e1c22ff652b4aff6d3252ff205a81ff1b504bff72622dff826d33ff74622cff2a5667ff6c1b3fff1c5d80ff6f2847ff4d8db2ff2f6a90ff9fbcc9ff9bbed0ff99b9c5ff5d191dff47142dff136564ff60191dff753940ff582327ff60191cff29749aff1c5a7eff7b491cff187281ff326c7aff275664ff1b6b69ff1b6763ff4a576dff6c2021ff305347ff734920ff6b2747ff561e3bff1c7570ff196a77ff1e5e4dff5d1b3cff937d34ff1a7f77ff932150ff7d1e46ff3383abff207093ffa03560ff368c88ff621b43ff87262aff207599ff17818eff2c4358ff237da6ff216d91ff9b5c21ff147e8dff7f2627ff9c5d23ff457c7bff1f6c58ff367486ff978336ffa58836ff19838fff672649ff3881adff257faaff1b8595ff2e9087ff367387ff33717effbe9f4eff858e57ff287fabff945c26ffa05f25ff9c602eff187b8eff158594ff286c88ff187b90ff207a8eff157384ff1d7d8eff725327ff2193aaff1b8090ff6a5a41ff8e5624ff8d633aff2d7eabff70221eff23524eff78222bff97572fff85282dff713456ff20628cff2976a4ff707460ff23709eff2a586bff417489ff24648fff2776a7ff5b2043ff206770ff237e7bff646843ff88743bff55706dff2c74a0ff73451cff5d1619ff164e43ff1f6052ff265263ff336075ff73612cff816e2eff2b566aff4d7d92ff674f60ff315e74ff287b8eff71481fff734627ff246791ff20608aff1a4d4aff74632eff816d33ff74622cff5a8393ff6c1b3fff1c5d80ff702848ff6e5747ff451732ff77672dff746230ff641a1dff60191eff46142dff126463ff611b1cff773d43ff572421ff1d5f82ff2c76a1ff1b5a81ff78481dff754a2fff326c7aff275767ff1b6b69ff1b6763ff4b586eff6f2022ff385352ff89254fff6b2646ff571f3bff1d7570ff1e7783ff1e5e4dff485970ff947d37ff1c857dffaa2c62ffa32757ff3282adff207093ff2b6053ff3c9893ff631c44ff561230ff177f8eff14828fff351d34ff915520ff8e2350ff912a37ff157f8cff802627ff9c5d22ff467d7dff1f6c58ff3a7389ffa0873bffa28a39ff1c8291ff67264aff3881afff257fa8ff1f8798ff2d9088ff4fa2a6ffa31e5aff762143ff277764ff288597ffc28539ff8e8260ffa0632fff187b8eff188695ff296d87ff187b90ff207a8eff903a60ff2b77a5ff745327ff14807eff157c7aff855322ff8d5627ff8d633aff2d7eabff71221fff21514dff79222bffa05d33ff2c719fff306072ff20628cff2976a4ff897439ff98823aff2b5769ff417489ff24648fff2877a6ff2a668fff206670ff237d7bff656843ff88743bff917155ff702126ff73451cff875020ff164e43ff1f6052ff275364ff346073ff4e242eff295565ff2b566aff4e7e93ff3a6d82ff286182ff28618dff744822ff734625ff71284dff1e6462ff1d4e4bff74632eff816d33ff75632eff628189ff6c1b3eff1c5d80ff6f2847ff6a5747ff461735ff77672bff746230ff48182fff421e37ff46142fff136564ff611a1fff602930ff45202dff1c6082ff7a692dff436c70ff78481cff754a30ff672044ff2e5764ff1a6a65ff196763ff4b586eff6c2024ff6a273fff8a2750ff6b2545ff614c71ff4a6077ff1f7781ff205c4cff475970ff917c36ff2e6e6effa67f4bff957e34ff3383adff207093ff296051ff3c9893ff631c44ff521534ff19808fff13828fff341e31ff90561eff902250ff922555ff167e8bffce2c62ffed297dffee2a7bfff5297affe82c7affba7551ffa5893aff178391ff67254bff3c80acff277ea9ffa68f45ff2c938dff3d6463ffdc3172ffd93276ff286a94ff248495ff9b853bff298095ffa2622fff167b8fff178595ff2a6c86ff177b90ff20798dff923962ff2c78a4ff755428ff14807eff167d7aff855324ff8e5527ff8d633aff2d7eadff70231eff27524fff792128ff7c2a30ff2a719eff316070ff21648dff2778a4ff897439ff96823cff2b576bff41748aff24648fff2878a4ff964468ff346778ff1c6674ff646943ff89743bff917155ff712124ff73451dff885220ff164e43ff1d6052ff275362ff346073ff4e232dff2a5566ff2b566aff4f7e94ff396c80ff276285ff28618dff1e5246ff724a2bff702849ff1e6562ff1d4e4cff74622dff816c33ff75632eff628189ff6c1b3eff1b5c80ff885653ff655849ff6d431fff7a672cff73622fff481833ff421e37ff481330ff136564ff7b2549ff7c1741ff811945ff8d1d4dff7c692bff426970ff79481dff754a2eff672044ff2e5764ff196c66ff1a6864ff4c586eff6c2024ff6a273fff8a2750ff6e2546ff266385ff24808dff1e7883ff205c4cff46576fff8f7b35ff2c6c6bffa67f4cff967e34ff3383aeff227094ff29705dff399795ff641b42ff501537ff7b5577fff1297cffee2a7bfff22a7cffb62465ff962554ff297ea8ff87242aff862229ff1f91c4ff096d95ff096b8fff9f8a3dff206b5bff206d59ff6a2449ff3782aeff257fa8ffa68e44ff2d918cff306a65ff661e43ff606581ff2d80a7ff238394ff9c873cff257f94ff9f622cff167b8fff178697ff2a6d87ff177b90ff20798dff933863ff2a79a4ff755428ff14807eff167d79ff835223ff8e5625ff8d633aff2d7eadff712220ff8e2651ff792128ff7c2b30ff2a729dff305f70ff3a6f83ff2c76a3ffb69635ffac8e30ffa3862dff3e7588ff968141ff944068ff954366ff366578ff1e6377ff646943ff88733aff907056ff712023ff73451dff875022ff164e43ff216053ff1b6367ff30757aff4d242eff2a5566ff2b566aff4b7e90ff376a80ff296280ff28618dff756330ff724a29ff72284aff226466ff1d4e4dff74622dff1c5145ff75632eff608085ff6c1b40ff205a81ff72461eff655849ff6f421fff6e2042ff6a2046ff1d6270ff226073ff71451bff2f6f82ff891a4aff8a1a4bff8c1b4cff901b4fff7e5739ff3b666cff77672dff732043ff672045ff285765ff6f3d5dff236182ff236285ff2a5e81ff752445ff8a2750ff712549ff29698dff24808dff387181ff225d4fff46576eff947d33ff296b6affa67f4cff948033ff3181afffea297dffee2a7bffee2a7bfff0297bff226182ff187870ff18828eff322036ff1a707eff932151ff972654ff2a84b1ff81262aff832629ff27afeaff30a7ddff0b6e99ff1e91c2ff206b5bff216c59ff672448ff2a80a9ff38788fffa78e44ff2e918dff326966ff651d42ff616581ff2d82aaff238394ff9f863cff277e93ff287078ff157c90ff178595ff2d6e8bff187b90ff1f798dff715376ff2977a5ff76522aff14807eff167d79ff177a8eff8c5523ff8d633bff2c7eacff702321ff91284eff792329ff7c2a30ff2a719cff306070ff3a6f83ff2c75a2ffb59841ffcead40ffcead40ffcead42ffc8a645ff762548ff943d63ff366679ff2a6a7dff1e666eff297b77ff491b35ff6e1f22ff73451bff885120ff164e43ff1d6052ff166465ff1f7979ff4e2630ff2a5667ff2b566aff487989ff652425ff2a6184ff26628bff726230ff724b2bff60615cff345f70ff1d4d4eff225c7fff1d5044ff776230ff59797cff6c1b40ff205a81ff714720ff67584aff704320ff72224aff78608cff1b6372ff226074ff71451bffc55f8cff981d52ff961e52ff981c54ff961e55ff9b2254ff3c646aff77672dff732043ff671e44ff285765ff6c3b5cff246182ff297197ff295d81ff732546ff8a274eff702447ff2a698dff267e8bff387181ff225d50ff45556bffe62d77ffef2a7bffee2a7bffef297cffc73677ff26749bff29705bff31938cff25729cff1e6387ff1a7870ff1a828eff32203eff1c707bff922352ff972654ff992755ff942d32ff90272dff28b1edff28b0ecff46c7f9ffa28738ff1c6d5bff226c59ff692347ff2980aaff397786ff41787dff2b8f8aff326a63ff661d42ff616581ff982b56ff238497ff8d3535ff257e92ff218796ff167c90ff158595ff24779eff187b90ff1f798dff346e81ff2777a4ff77532aff14807cff167d7aff187a8fff8c5524ff8d633bff2d7dabff672528ff892c54ff6a2325ff7a282dff28719dff306072ff396e82ff376c7fffb69948ffcead3fffcead40ffcead40ff97833dff762548ff933b61ff366477ff376e8cff236367ff207d7aff491b33ff6f2022ff29658eff246c9bff164e43ff1c5e51ff156464ff21797aff50262eff2c5666ff2b576aff487888ff632427ff2b6282ff276188ff746332ff744e2eff60605cff326070ff215047ff225b80ff1c4f45ff246274ff246281ff6c1b40ff1e5a80ff71471eff665748ff704420ff306286ff205e84ff1c6473ff206072ff71451bff275c82ffc32c6cffb7376cffa9225effa11f58ff897731ff38646fff786830ff732043ff692146ff285765ff683755ff246182ff3486aaff3e7997ff742547ff8a2750ff702645ff782b2cff23808dff387081ff30737fff892d46ff9d4c6eff3d7d6fff2d7ba5ffa1863cff6a8065ff26749bff2b7587ff30928cff267aa2ff1d6386ff1b796fff1b838fff3c8192ff1f707bff932452ff962453ff9a2856ff89292dff792628ff3b7788ff5fcefeffa0622cffa38835ff2d8e83ff257e75ff6a2146ff2a83aaff3e7c8eff3e5e69ff2c918cff498478ff661e43ff686082ff9a2b57ff23889aff8e3434ff257e92ff218696ff198595ff2fa0a9ff277ca8ff187d91ff1d798dff356f82ff2778a3ff8f6330ff15807cff14807cff187a90ff8c5522ff9c5e38ff661c44ff6a242aff862a52ff803034ff2e7598ff29719eff326377ff367080ff366b7effb79c4affcead40ffcead42ff2f8787ff97823cff288481ff68262bff356376ff27608bff226467ff227d7aff905c31ff6d1f23ff28638cff256d99ff797970ff216b99ff186566ff1f7a79ff1f5b84ff2c5665ff2b576aff447785ff642529ff4a7267ff75264cff7b7853ff734d2eff605e57ff336070ff214f47ff245c81ff4b1f34ff216273ff2a6284ff6e1d44ff215a7fff714720ff665749ff704320ff2e6285ff315a68ff1d6474ff206071ff714627ff786830ff2c5350fffc8db2ffd52f77ff521e3dff897730ff376a73ff786830ff714821ff6e4824ff285765ff693351ff276c6aff335e6bff3a6f7eff742645ff4f2439ff415f5eff782b2dff26808dff326e80ff2d747fff793047ff703235ff53795aff2c7ca3ffa3893dff6a8065ff26759bff20687aff3680a4ff287ba3ff1f6287ff1d7971ff19838fff1d8796ff1d707bff942251ff952654ff982856ff89262bff7a272aff3d7989ff1f7d8cffa0612cff611e40ff2d8e82ff24867fff84242aff7f2829ff29868cff632847ffa16430ff856040ff651e45ff8e2f59ff982c57ff827343ff873034ff227d93ff218897ff407d8fff19807cff208584ff187e92ff1d778bff346e83ff2576a3ff8f612fff97823bff187385ff16798bff8c5320ff89653eff8c2656ff6a252cff852b54ff7e2d32ff317396ff27729eff762b2eff255d52ff50233bff602946ffdcbc5eff248180ff2b8585ff8f582cff288381ff69262aff356378ff28628bff2e848aff28595dff31655aff6d1f23ff28638cff206b99ff777a6eff216b98ff176467ff1d7877ff1f5b84ff357898ff366f76ff2e7a78ff45544cff456e5eff772649ff34586bff715030ff605e59ff335e70ff1f5047ff215b80ff4c2035ff206172ff2d6285ff226081ff225a7fff7c481fff744745ff704320ff306185ff325c69ff1d6574ff1d6070ff714626ff786830ff28544cff1e6673ff236182ff4a1c34ff8a7632ff5a7d89ff796931ff734820ff6e4826ff285765ff64304eff296f68ff2f606eff37707eff752749ff512439ff426056ff792c30ff2c8794ff226d7bff2c737eff763141ff8b3038ff42605aff2d7ca1ff6c7454ff6c8062ff27759cff20697aff3480a4ff2d84abff1c7493ff1e7871ff256a8cff1c8794ff1d707bff9a2856ffa12958ff982856ff89262bff79292bff922c58ff985f2dffa1612eff622043ff2b8b81ff248b81ff802429ff80292bff278489ff632a48ffa16430ff886243ff327da1ff8e2f59ff9a2b57ff827243ff883034ff52475aff439cb9ff326a7dff1c807eff228b85ff907a3aff187a8eff356f83ff2a7eadff9d5f24ff97823bff187385ff16798bff15788aff19778aff892555ff69262bff862c54ff7d2d31ff307396ff2a719cff752a2dff285d52ff50263dff602945ff266691ff2d78a4ff278282ff915823ff288383ff682527ff356378ff25618aff2a8287ff2b5a5eff30655cff6e2026ff26628bff226c98ff787a70ff246a97ff2b749eff25574eff25648dff336b7cff357177ff2c7979ff5e4251ff746331ff76274bff33586bff744f31ff615d58ff336070ff214f47ff245c81ff4b2035ff206274ff2d6386ff216081ff215a7fff2b5665ff4e263dff6e4422ff2d6187ff315d6cff7b6b33ff733446ff714626ff776830ff26524aff31706dff236182ff4c1c35ff897631ff557985ff7a6a32ff734722ff6e4826ff2b5766ff632c4aff2c6e68ff30616fff38707cff4c2a3aff502338ff436059ff792c30ff2b8691ff236e7bff257583ff6d2745ff8f2c52ff41605aff2d7ca1ff6c7555ff907b38ff3f90b3ff287f8dff3381a4ff287499ff2c9383ff3c8b78ff935b28ff1a8795ff1d707bff642143ff2b7fa6ff982957ff8b272aff822a2eff982a58ff985f2dffa1612cff652042ff276b59ff288594ff7f2328ff812a2cff387e80ff642a46ffa16430ff866343ff347da2ff8d2d58ff9b2c58ff837344ff882f33ff5d475dff2a7095ff3d798bff1b8180ff218a84ff89916bff3f656aff326e83ff3689b0ff78703fff978239ff197385ff14798bff197084ff187c8eff8b2557ff652529ff882d55ff7e2c2fff307396ff2b719cff73282bff285d52ff7a2d2eff297072ff702a4aff30596bff387083ff256669ff298383ff692628ff356378ff256188ff298289ff2b5a5dff30665dff6e1e25ff25638aff216b98ff79796eff206b98ff2a739dff23564dff23648fff346c7bff6c614dff3a5f6eff5b4250ff746433ff457274ff2a7374ff765032ff885a38ff345e72ff225048ff265c81ff4a2033ff206275ff2d6386ff316f6eff325d69ff2b5564ff4e263dff296284ff2d6187ff345e6bff796b35ff743746ff714624ff776830ff24524aff32706bff236182ff4e1c35ff6b282fff417e89ff786a31ff734722ff6e4826ff2a5866ff642c4aff2c6e68ff53858cff38717fff4b293aff4c2438ff43605bff7a2d30ff602a2bff515762ff2b808dff6c2745ff902e55ff41605aff2e7ca2ff6a7354ff8f7a37ff6e262aff297f8eff3381a3ff297399ff316a5dff8e572aff925929ff1a8795ff1d707bff642142ff3080a8ff2c8895ff238897ff3188b0ff9a2b59ff9a5e2cffa1612cff8f5a2dff276a59ff298594ff7f2328ff822b2dff397d80ff642a47ffa1642eff80756eff3381a6ffa88f45ff96833cff847342ff872e32ff6c473cff3b7196ff3d798bff1c8787ff3da7aaff2878a4ff2f6478ff316d82ff316a7fff787041ff998538ff197386ff16798bff1a7186ff208798ff8a2355ff742a2eff7c2336ff7f292cff327497ff852750ff74282bff295c52ff792d2dff297073ff702a4aff278281ff8a773cff266669ff2a8484ff6a2729ff267676ff256188ff2f77a2ff2c595fff256860ff712025ff246e71ff226c99ff79796eff206b98ff2a739dff23564dff22648fff356d7cff6d6048ff3b6170ff316385ff746433ff3c7572ff297274ff714a2aff774a2aff502b41ff285b55ff245c81ff492034ff206275ff306388ff326f6eff38626eff2e5567ff50273eff346489ff275f84ff30688aff255d82ff712847ff714624ff776830ff235149ff235c54ff216084ff521e39ff67272cff407e90ff786a32ff724824ff724621ff2d5c6aff642a49ff2c6e68ff7a673dff36707eff4b2939ff502439ff42605aff7a2f30ff63282aff55595eff942d55ff6e2847ff7d5130ff8c9052ff2f7ca3ff667356ff8d7c39ff77292dff27818cff7e7340ff7c4f5fff89284fff8f582cff935a2bff468796ff52687fff5b7195ff3381aaff2a8794ff218696ff267e8bff9b2c58ff985e2cffa0632fff8f5a30ff2a7060ff2b8594ff812227ff812d2eff662344ff662e48ff9d305aff3b7486ff8c7a3cffa88f44ff96823cff9e8e51ff8e313aff968141ff763157ff3d798bff218295ff266e9aff297dacff2d6376ff316d81ff306a7fff50768bffbba351ff177286ff208597ff1a7185ff208697ff216052ff75292eff257c8eff2e6893ff307699ff367b8dff5c6576ff235d52ff782e2fff287174ff702b4bff298481ff8b7739ff266669ff298382ff3079a5ff822c52ff712c47ff845c50ff227680ff226a69ff375e61ff1f6f6eff4e3134ff7a786cff206b98ff29739cff22554bff216590ff666f5bff216d70ff406271ff326586ff736332ff407874ff2a6a6cff734a2bff784a29ff512d43ff276373ff296384ff4a2037ff206273ff316487ff347070ff492237ff65353dff512b3fff502539ff285e83ff387486ff275d7fff712a4bff704522ff26574cff225048ff235349ff60222bff531f39ff67282cff3d7b89ff786a32ff734925ff714625ff225e80ff632747ff2c6e68ff512a30ff5c2b3fff502936ff604c60ff42605cff7b3134ff63272aff53595eff942d55ff712745ff7c5230ffa48a42ff337ca2ff4b6151ff8e7b38ffa68d3eff2a828eff7e733eff7a505fff89284fff90592eff955b2eff652644ff56203aff3381a6ff3482abff2c8895ff228796ff277f8dff9c2d5bff985e2cffa06330ff925b31ff3081aeff348799ff407988ffa56636ff662344ff662f4aff9a325cff3a7486ff907a40ffaa9046ff968339ff9c915eff593649ff958141ff872d53ff208280ff28837eff2a6c97ff2b7faeff32647bff367284ff306a7dff4d778aff948337ff288b93ff30919dff197083ff1f8596ff915826ff24685aff257c8eff5d7b80ff2a76a4ff338085ff376c7fff70282bff762e2fff297072ff227070ff25837fff8b7739ff28676bff298382ff2d78a4ff852b52ff702e49ff855e51ff267580ff226b6aff375e62ff1f6f6fff796d44ff797d5dff216b97ff2772a0ff826e35ff471d36ff702447ff216a6cff416470ff535869ff4e263aff457a77ff29696bff734a2cff774928ff522e43ff266271ff2a697cff491e35ff206073ff336687ff387270ff67373bff6a373aff532d40ff4c2339ff4d2c3eff377482ff724728ff63272aff385e6cff3e5956ff204f49ff235248ff642326ff531f39ff205c80ff297d90ff7b6c34ff734925ff704626ff235e82ff424454ff2e7069ff53293eff6d3b4fffa3834cff5d4b5eff42605cff73363eff4b7062ff55575bff952e56ff712745ff805232ffa48a42ff347da3ff246185ff682847ffa68d3fff30828fff7d723eff745e61ff8a2a50ff328277ff9d8061ff672947ff56223cff3981a8ff367361ff2e8896ff4083a7ff672446ff9c305bff316b59ff62876cff2e8881ff3080adff327ca3ff427b89ffa56738ff632545ff68334dff9a315bff3d7589ff8e7b3dffa89148ff288b86ff817647ff5b364bff99853eff842c52ff1d817eff3a9b9dff4d746fff2b77a2ff894d2cff197b79ff236e9bff511e3cff96803aff792226ff1e5a4eff1b7286ff248799ff642848ff226759ff247b8fff767556ff2a75a3ff2c8582ff376c7fff702a2cff7a2f32ff2f727dff237070ff25837fff8b7738ff2b676bff298382ff2e77a4ff852b52ff77693cff8c7f4cff24757fff246e81ff276567ff1d6e6eff7a6d45ff757b63ff216c98ff27729fff826f33ff481d36ff702448ff216a6cff552c30ff552e47ff4f2638ff50818eff26696cff744b30ff774928ff553246ff266271ff41717fff4a1f36ff206172ff376a8bff407776ff6a3a40ff6d3a40ff563344ff4e2438ff4e2d40ff3a7485ff296573ff63282cff3b616fff702546ff397474ff2a554cff65272aff612943ff225c81ff2a7c90ff724825ff734925ff714725ff545a77ff325f6eff31716cff53293eff3b6463ff3d6470ff6c5a71ff2b6185ff71353dff497061ff57504bff357ca3ff2c6483ff4280a1ffa48a45ff357fa5ff236084ff682a47ffaf9443ff348590ff98894cff417163ff347ea2ff32847dff3481acff692e49ff58243eff3c84abff3c7563ff328a98ff4285a8ff652445ff2a705dff336b5cff3f4553ff85364dff2c83b2ff3885abff457d8bff9d9c94ff358598ff3480a8ff9b325cff684b41ff8e7b3dffa9924bff2a8b86ff827749ff5e3a4eff96833cff872e54ff8a3033ff4e5c70ff20807eff2b77a3ff8a4e2eff1d7b7bff266e9dff501d3dff998439ff7a2327ff1e5a4eff2b6f62ff2c7260ff642848ff226759ff885e37ff7a785cff296d72ff2e8986ff4c7c7dff895b33ff783135ff3d6e91ff46769eff6d566eff347aaaff3075a0ff2c658fff2e77a4ff822b51ff786a3dff927f3dff855d36ff226d80ff226666ff1e7777ff7d7047ff907c3fff70232bff29729eff297a8eff491e37ff732347ff216a6cff6b262bff552840ff4f283dff2e6088ff3c6c8cff734c33ff764928ff59364aff266271ff487383ff4a1f36ff72494dff3c6c8dff4a7c7cff6e3e45ff6d4245ff573d4cff4d2439ff516d87ff2d6087ff2c6674ff632a2eff416475ff6c2744ff437877ff2f574eff682a2dff4f2a3cff2b5b74ff317293ff744829ff336485ff714725ff6f2843ff325f6eff397a77ff572f43ff446774ff3e6472ff5b6b85ff4e293bff7a4738ff47715fff325c50ff37706aff83723dff4982a5ff2c5859ff387fa6ff375d7cff672a48ff51263bff236880ffa58c42ff477568ff379896ff41918fff3681abff368894ff4e747fff4786adff447968ff9f6432ff4588afff652445ff2a7160ff366d5eff6c3a51ff903b54ff427067ff8c3438ff864248ffa86f44ff458bb3ffad9652ff99335cff624e5aff808461ffa9924cff298a84ffaa8d4cff524447ff978540ff873054ff8c3338ff546076ff5f8794ff88582fff8f5031ff1e7b7bff217d8dff31817bff9d8840ff7a2327ff235a4eff277167ff5a2041ff554357ff24695bff905b2fff797b5fff296e70ff2a8482ff507f82ff8b5a33ff783135ff536e83ff4577a0ff8d335aff4c6a7aff3075a0ff84345dff876072ff832b51ff502a3bff473949ff855d37ff226e82ff2c6086ff948348ff7f7450ff8f7c3aff266367ff2b73a3ff2b6382ff492039ff732345ff216a6cff692829ff532b3bff50283cff2e6088ff3c6c8cff27564eff32596bff5b3c4aff266271ff4d7283ff61262bff775356ff594e5eff5f8b8eff6e4449ff72484dff5b4552ff4e2539ff4b7493ff2e5f83ff326a76ff652e30ff2d544dff326385ff4e7c7dff335950ff672f31ff522e40ff34596cff387394ff754c2eff376989ff714927ff732e49ff276373ff3d7e78ff6b3e4dff48707eff436772ff626e88ff4e2b3aff7c4738ff47715dff335e52ff377069ff416975ff4f86a9ff2f5859ff30678aff984362ff5b7b9aff43779dff29677effa68d41ff713a46ff3a7781ff538db2ff3d7ca1ff3b8a99ff53767fff508bb0ff4c8070ff466a61ff4c8dadff3884aeff2f7a66ff509699ff713f53ff92405bff894f57ff8b3639ff8a494fffb37e55ff833837ff58334cff99335cff61535fff40798dffab9551ff2b8e8bffab8f55ff823134ff652c49ff8b3655ff98375eff54677bff648c99ff905d37ff79292bff227d7aff237d8bff918141ff9e8942ff3a6f83ff31647aff478aacff893055ff347165ff368e88ff915c30ff7d7c65ff286e72ff2a8584ff548287ff895932ff783234ff747679ff742f52ff8d365bff526e7eff3075a0ff2e7a8bff95707fff832c52ff532b3bff49384cff855d37ff843456ff2d6087ff958349ff847958ff937d3bff276469ff2e73a1ff316083ff4b2638ff70244aff79a3a8ff69292aff77663aff532b40ff2e6084ff3e6b8cff27554dff33586bff604250ff8e6376ff597686ff36596aff805b5eff6d5362ff734829ff734c50ff775254ff693a3eff325551ff557c99ff316084ff376c78ff673036ff30574eff376484ff568284ff355b53ff506e79ff71334cff31554dff437a9dff754d30ff3b6b8bff744b2bff73304aff276573ff906d59ff5f4451ff507382ff7c4b51ff4a7c9cff557970ff815639ff4b7260ff3c6156ff3c726cff406a78ff5b8dafff345b5eff386886ff636377ff4e87acff447a9bff556067ffaa8e45ff754253ff407a81ff6092b2ff924d51ff4380a1ff587a7eff5992b4ff68364bff466c63ff5794b6ff3a86b1ff7d735dff5094a3ff7a485bffa99351ff95385dffa46e48ff9c8642ff34899cff46778aff5a3750ff987a65ff635b61ff4586b2ff308b88ff92325affad925cff863639ff672e4bff3a779cff946139ff427385ff6b93a1ff94603cff2e675aff2a7e7dff287f90ff8e814affb9ae7eff3b7084ff467f8fff336a5bff8f335aff39756cff306961ff8f5e35ff5f8494ffa59151ff307789ff618d8cff8d5c38ff3c7171ff7e7b76ff386057ff456373ff597586ff417284ff317a8cff743e43ff906037ff405e55ff396a77ff3f807bff873758ff447ca0ff94844dff46646eff727a59ff34607fff35759fff356284ff4d273cff907b48ff8db6bbff586e83ff7d673eff532f41ff396384ff744e30ff405958ff596d7dff654b5bff9e758bff66808dff375a6aff71344bff6b373dff754930ff617b94ff623035ff6d4041ff887a5eff59809eff326184ff3c6e7aff396c79ff7c6f4aff396586ff5e8a8aff395d54ff6a8796ff4a708aff375951ff396489ff785137ff427191ff7e504fff75354dff34706cffa18171ff7f7346ff3a6987ff7f5157ff53809fff5f837aff855a38ff4e735eff42675eff44756eff406988ff7b9088ff375c5eff3e6a89ff676476ff5589adff497f9eff596166ff9f7252ffb39d69ff618e83ff6e99bbff955558ff6c4456ff5e878cff73a7cbff6b3a4eff54736dff7e474cff82bab6ff894f53ff407669ff7b5b75ffab9453ff953d5effab7550ff9f6382ff535a74ff487989ff66889bff8f8273ff577c7dff4586b0ff3f8586ff3c7da7ffac965eff883a3eff853c40ff3a7a9bff98663bff427586ff7199a9ff94633fff6097c1ff2d807bff4e7d86ff593a53ff3d80a8ff613449ff873c3eff3b7ba9ff8f365cff497562ff347b7bff936037ff4c8ab0ff6f445aff307488ff8a867eff8e5d3aff417574ff5f6371ff386158ff4a6774ff5f7a8dff437385ff407da7ff784247ff8e445eff456057ff396d7cff6d9fa9ff893b5aff486779ff4d6664ff37746fff3b6a7aff3b6586ff485e78ff396487ff39759aff783b54ff9cc3c8ff3a798bff704141ff553342ff907b67ff3a6588ff553843ff5b6b7bff6d5162ff395d6bff6a8793ff623e44ff643e50ff6b3940ff3d6686ff604763ff487380ff846a5bff4c718bff396e6eff587c97ff3f717eff725440ff80714cff3c688bff6c4043ff406057ff5a7781ff4d7590ff3a5d53ff406683ff477681ff436c7bff83744cff446272ff5c404dff517c97ff82764eff426988ff87575cff5984a1ff607c88ff4a7b85ff457771ff688c81ff5c8e89ff436c8aff909079ff6a8d82ff426d89ff6d6973ff618cabffa77049ff59656bffa97e74ff446b62ff76998fff7d5152ff644852ff704a5cff5b8c94ffad975aff45776cff5e8479ff56536aff9fcecbff915658ff995959ff5c8eafff43938fff9a4164ff518198ff9c8654ff8a3f40ff4b7a8aff658fa8ff42948fff5f9c96ff4a88b2ff709dc2ff874748ffb39765ff884043ff884143ff5a7c96ff976740ff5a9b97ff43706dff8c4361ff6ea0c5ff99526dff636e70ff823d40ff4280abff428682ff8a4245ff98864cff3c8788ff7f6b4bff387d7dff8c6648ff5c8eb1ff754e60ff5288b0ff839faeff457fa6ff487878ff649490ff527278ff4f6c78ff7f6b83ff6993a9ff4780a8ff83434dff904862ff4b625aff407180ff76a4b1ff864652ff4d6a7aff526a66ff8c4763ff796d46ff3f698fff4b6b85ff48799fff6e4545ff7c4157ff3e7a8bff7198a8ff754648ff978285ff947d67ff406689ff573d4aff78523bff44635cff3f5e70ff406787ff6c4044ff5d4351ff597c99ff738a9dff7290a9ff4d7683ff877060ff52728dff714857ff837451ff477281ff9b8f78ff827453ff4e7978ff49717fff46645dff496566ff496d8bff749aa6ff856073ff5e7781ff8a5656ff477573ff796870ff5e4450ff8f7f67ff857953ff466f8dff5e4551ff6087a2ff5c868fff518088ff507b7dff7297b4ff5b7672ff81acabff627f8aff6b8793ff5b809cff776e79ff785361ffa36d80ff8aa89cff7d6370ff507871ff578e96ff7da6aeff696868ff588fb2ff639093ff558db1ff48786aff64877dff61596eff785461ffb88c8bffa06263ff618fafff49948fff9b4668ff608392ffa5825eff956c61ff4c7c90ff716879ff698d82ff68a29dffbc96a4fffbfffcff8b4f50ff5d818bff44889cff884849ffc39984ff8b7461ff5284a4ff50746fff8f4863ff87b5d9ffbe8597ff946643ff4c82a8ff5184adff5e7970ff956641ff968a58ff6f4b5affb49777ff8d634bff43716dff6697b9ff7d586cff914c67ff959175ff528a88ff537a73ff51716aff5b8392ff55707eff8a6e85ff506c65ff4c6f67ff7a4c53ff688d8aff51695eff845657ff979e9aff90674dff536d7dff57706bff8f4d68ff5081a5ff84624cff4c708fff4d7a9fff724b4bff7d475cff634e55ff8ca2afff754e4eff8e8783ff83705dff6f4e4fff4e6f8bff6c7d84ff4c6660ff456861ff477182ff4b717fff604b5bff5a8099ff536c69ff7694acff567985ff6d7e78ff847856ff7d879dff776977ff765354ff66535cff647c77ff557e7bff667a84ffb1a889ff667f8aff5b717aff8dacb5ff6a565effa98778ff72888eff647580ff688597ffa4a897ff6b5860ff8d7375ff6b939bff8f5e62ff775a65fff8f3eeff967b68ff827174ffa27f6eff627c74ffd8b2bbff658489ff708b97ff5c809aff73707cff7f5969ffa97d69ff9eb9afff937e72ff70a69eff928673ff88aeb9ff7a9177ff765d72ff64929aff5b90b3ff976065ffd9b09fff715d60ff7d5e6affdfcca4ff9c6b6aff8b6167ff579791ffac9560ff588079ffa55771ff6a888cffc1909ffffffffdff6d7b73ff6e8c85ffa6c9c6fffffffbffb7889dff755361ff4a8a9cffae7881ffd5af9bff85b3beff568bb0ff5d8aa1ff904e68ffb27083ff885656ff955069ff5085abff5584a9ff627d74ff778e82ff95b5b1ff725160ff8c7972ff8b5762ff5383a8ff6d7d7eff4c7ca3ff91516eff928467ff578b8bff648684ff5b776fff557fa1ff587281ff8f7689ff917886ff55756eff74626dff709192ff576e65ff8b5c5eff9b8678ff557169ff5d7a98ff607470ff6e8587ff91b1cdff6189aaff5c80a1ff94865eff8d6b56ff6e747dff68545dff8ea4b1ff7a5555ff908b85ff817466ff775555ff785859ff68818dff53708dffa39c8bff808773ff5f7c97ff7c5b5bffbbafa7ff867077ff648097ff778d9cffbda7aefff7f7fdff806463ff7a8e97ff6d827dffada38eff8397aaff91aaa8ff7c6966ff667f7eff6d869bff708385ff708892ff8299afffd3b0b8ffece0ddff657c82ffa3b0bcff6f7573ff8c7467fffffffdfffffffdffc09795ff756269fff4f1ebffa17883ff937376ff78a49fff87ada8fffffffdffa78b76ffe4c8b5ff84907dff8d958cffaf8876ffab8672ffb0ccc3ff84a3b8ff958188fffefffcffd4e6e1ff839789ffa88185ffb6917cff73919cff8e7f82ff65a19bff699f9affafa076ff826872ffa38778ff965e64ff8a7f88ffa48884ff648677ffab9d6affafa185ffbc8e9dfffffffdffac8588fffefffffffffffdfffffffdff6592b3ff8eb3d1fffffffdffb2c8d3ff80616dff689e9ffff0cddcffb2cccfffcde5f0ff968c89ffb49c7ffffbffffff8e90a0ff648fb0ff989379ffd4c6a7ff9d6075ffad898cff856b6dffbd9c8bff5a89acff7f8a84ff688996ff709eadfffffffdfffdfefcfffefffdff637e75fffffffdff777a7bff977865ffa58a94fffeffffff776770ff856b68ff607c8eff8d6666ff688a8bff6a7f7bfffff6faff866365ff677e7afffffffeff69829fff786a71fffffffdfffffefdff8c6771ff88777aff677f96fff3fefeffb6bcbcfff9eef3ff778084ff816164ff949076fffeffffff607a95fff7fefffffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffefffdfffffffdfffffefffffffffdfffffffdfffffffdff87aaa7fffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4c072ffd6c071ffd9c272ffe3cb77ffefd37efff7d57bfff8d478fff7d273fff5cf6dfff4ce6afff3cc66fff0ca64ffefca62ffeec85cffedc75bffeac65bffccb158ff7d8f6fff738f75ff7a957eff95b5abffc8eefcffc4ecfdffc0eafdffb2ddf3ff8ebacfff8cb1c4ff753964ffb43167ffb53169ffb9366bffbe3d71ffbf3f70ffbd4170ffa83562ff9f335eff9f365fffa03861ffa03962ffa23e63ffa34166ffa44368ffa6476bff9d4064ff993d5fff9b4165ff8e305bffbe9f9dffe2cd91ffb59c52ffb29746ffb29744ffb49947ffb69a47ffb69b49ffb79c48ffb89d49ffb89d4affb89e50ffbda252ffad9442ff617145ff637248ffb7ac75ff126572ff116776ff3795a5ff3394a4ff2f92a2ff2e92a2ff2990a0ff0d5e70ff125e70ff136170ff266d89ff31799fff3a86aeff4294bfff3a91bdff338db9ff318bb8ff45a7d9ff3c8da0ff3f99b6ff4dbaf1ff4bbaf1ff48b9f0ff46b7eeff4cb3e5ff556a87ff586885ff664252ff5e1d33ff5d173fff6c1845ff9e255cff9f275cff9f275dff9e295cff8f3860ff974e5bffb84e50ffba5152ffb4524fff99443eff94433eff954b48ffab2b61ffae2f64ffb23669ffb63f6effbc4a76ffda837cfff7b78fffbb7659ffb47559ffa78557ffcdbd72ffe6d78fffadaf6eff8c9f6fff93a673ff9caa74ff9da86fff326d59ff266758ff256658ff276c74ff75cbe0ff92e7f4ff86e0eeff75d7e7ff65cfe0ff55c9daff46c5d5ff3cc0d2ff3baec0ff3295a5ff248f9fff3c6388ff616c9aff5c6998ff9ec3adff98c0a6ff94bda1ff7a8b58ff2b7b74ff3f9a81ff41a184ff319481ff296166ffbc3e41ffcc5053ffcc5154ffcd4e51ffb6393eff641938ff963163ff973764ff9a3b69ff9b406aff9e456cff934267ff473f4dff6b6c41ffce7d36ffe9914bffef995cfff6a66effd38950ffc08f41ffeca76affeb8978fff09485ffa56f79ff8f8aa7ffadb9cfff528fa3ff6b182fff731944ff632648ff4fa58eff65b199ff7bbda7ff79bca6ff1d6767ff0d5c6fff0c6074ff0f6a7dff266d95ff468bb2ff56a4ceff802529ff3983a7ff70c4e5ff68caebff4fb9dbff2b898bff506279ff6c506eff30989fff2a91a2ff46809effb63f6dffb23065ffa6285fff643f60ff275c6aff235664ff44afe2ff4ebcf3ff46b9f1ff1b7b9dff2eb5c6ff32c0d2ff2dbfd1ff488d8aff912546ff80204fff8e2c5eff8b295aff8b214eff941f57ff932056ff8f2256ff942359ff79385bff566668ff7b665dffac6a51ff957854ff89a687ff90a387ff99622dff8e551bff985c1bff697f75ff2c81b1ff3492b8ff3195b4ff42a2c2ff6f8fa2ffb64b5bffc34f77ffc7668aff9a96aaff50777bffa29371ffd7dfc8ffc2dfdcff7bdae8ff82dcecff63cae1ff2a7eabff813033ff9b4347ff6e8292ff6dbed2ff70ccf9ff62beedff9da9a4ff669680ff24777eff52a4b1ff319183ff2c94a5ff54bef3ff6c96d0ffb15e77ffdd5c53ff4a8d9eff418c9eff3b7f92ff771541ff761642ff4a4d69ff29a5b7ff28bed0ff2ca8b9ff86673fffe78c3cffe78c3aff9d4424ff84191eff79161affb33753ffdc377bffdf3b7effac2c59ffdb3279ffdd377bff5c91aeff864e48ffaf492cff6a6c60ff504c66ff594f68ffc97a33ffeb924cffe79456ff64a4beff398dbaff0b6d81ff41a3d5ff62beeeff4694a0ff4fa59fff97373aff27879aff439fb0ff54aebeff47745dff8f8167ffb4899dffb6889eff78c2d1ffc3effeff52a9b5ff6f8aa3ffb6a0a8ff54becfff92b59eff8cbb94ffab7d39ff8a5322ffa23561ff6399c5ff36a0d5ff706873ff5c5f6aff7a8c93ff1e7d7dff318eb0ff3db3e8ff3488a9ff4a9cafff7d5b85ffdf387cffdd327aff6f4d76ff4392a6ff507e7aff428c9dff68664dffc57224ffbe7022ff8e2026ffa5252bffa3252bffb34f33ffcd564affdc3179ff904c68ffe38a37ff947c54ff737482ff5d6858ffc0732dff8a7d64ff9d5d67ff965961ff837848ff709a73ffb8bd73ff5b725fff186c9aff2c9bb9ff4aa0b9ff554d69ff2d5a66ff097575ff25717eff4f9696ff81939aff728491ff9d7a6cff7f4653ffffd6e5ffeca8c2ffa8878aff96bec7ff65a8b9ff429ab7ff85dfedff793a5bff4d5a74ff57a5b7ff86a7a7ffc97241ffe9785fffb05364ff942d5dff791e4eff864c3aff98462eff1d7961ff206564ff306f81ff3e8a9eff525171ff713d69ff801f56ff836e62ff2c8e81ff8e9b55ff956769ff675e6cff6c3741ffa94c21ff99643eff5d6180ffc1292effb82636ffa81f4dff554a7bff1c7ca9ff2e708dff41697aff446871ff2489bbff468eaaff868d7aff50918bff509dadffc3a342ffd2963eff5aa59eff92ba8bff418998ff4abaf1ff54bef5ff6c98b7ffacbf93ff7fbea0ff64c3b1ff54a3afff82a382fffad97eff8c7270ffac6583ffb47178ff7ba8a2ff5b1015ff651116ff81a6ccff6dc0e9ff4c94adff444d76ff515468ff773c26ff07606eff0c6072ff564952ff476979ff519eafff6c2c50ff791646ff446d67ffd17d31ffe28734ff426871ff3a8596ff358b97ff2b8d94ff873163ffbc5955ff816e29ff603950ff7e141bff8f184dffb6262cffc22a30ff87191eff5e5c68ff58a4b0ff6e8692ffae4c7fffda2a77ff7a63a1ff279bcfff695e87ff922454ff955234ff638d8dff2596caff198b9fff20aaa0ffb69d45ffb49941ff8b6e32ff988232ff619071ff35a8ccff3199ccffb2353bff8e273eff977b59ffb69a45ff798b55ff70bca5ff2c9288ff52beb5ff6ed3d8ff76d7d0ff2a8c98ff12577dff766980ffbe5d64ffad3b69ff0b4b40ff0d4e44ff1c5f63ff61c0aaffe88f47ff5e9a9eff36ada6ff188797ff157689ff207662ff81594affad265cff3595c9ff35b4ebff1b7962ff554841ff3d899bff258288ff067b74ff416542ff4e8686ff7f8f65ff575d77ffb4272dffd82a70ffa61d59ff8f193fff714e5cff376975ffa08836ff977f2eff395677ff1cadcaff58b9c5ff5a9997ff438c9eff808f5effc28e45ff8b9888ff2695c9ff2290c3ff279ec5ffb76d25ffa94828ffca8845fff0c856ff978853ffb96f2dff6f815fff2ea8a2ff771f4dff463555ff8d976bff717650ffd6b451ff86a266ff45afbcff3cafb5ff45b6b2ff5ac5e7ff55b8e3ff63a3baff714112ff74896aff3d9583ff6e948bff6b9ca2ff355078ff2e4b6bff455f54ff475181ff2b9cb2ff3dabb2ff1c7963ff796a3affb72b47ffb42958ff38527dff235d79ff553642ff4e3b42ff1da9a1ff1ca691ff3a7a5aff2da4d7ff2391c1ff377d9dff399da2ff3090b5ffd82c76ff953a7aff1788a3ff18bed0ffa1ad62ffc09045ff620c3cff346776ff278697ff0a8480ff2791c0ff317385ff436682ff2fa4caff4790a3ff6a3d77ff608583ff955943ffb65458ff106559ff2cbfd1ff50737dff9e4b39ff63603cff6f9e68ff207f9fff3190a5ff3e879bff2c6a84ff43889cff49b8aaff5e8983ff065d71ff0d7286ff49abdfff125b85ffb26b2effcc7e40ff692014ff743419ffe87a58ffb33b70ff2d89b8ff2987b8ffa4ab71ff2684a8ff2a82b1ff0b4f40ff0f5746ff0c4b3fff2a749dff7d3537ff6e1346ff443554ff99471dff74434dff235565ff18a897ff2a8d81ff1a8e7cff279086ff447477ff951c55ff886876ff84486dff5684bdff34748fff542950ff1ca6b6ff5a4c81ff564d7fff766f73ff677475ff1cb09bff598398ff4293a7ff338c93ff239eb1ff8e4a58ff2694c8ff828f7eff56754cffafb573ff8aad6bff673a3bff731934ff751c4cff80756eff85a387ff396182ff286074ff9a2329ff369bc4ff46b0d8ff5c855cffb79a40ff75a482ff3e8b9bff316a87ff7f9290ff824d1cff504c56ff93292dffa55f36ffb4973fff2a88b7ff378cb2ff1e7494ff237b84ff1f7665ff96625cff517b75ff459386ff377c69ff0f7c7fffae3b4cffb3924eff35a1b1ff2f6778ff3dadc8ff4793a9ff9a623cff196654ff108d82ff3b927bff348574ff2f676fff196d92ff2f9f95ff2190a6ff535787ff722453ff3d8b9dff2a94aaff1b9db5ff3a5775ff3c476aff2898cbff2896c9ff52677bff6a5d66ff1f7cabff2c6a7aff35575dff156a58ff4b443cff264345ff1c6a54ff974c24ff436772ff217368ff107f7cff731f4dff39727cff67756fff367f83ff65835fff918c59ff2b9799ff2d9b8effad6626ff4a707dff27749eff764414ff7f4223ff1c8682ff447780ff565a5cff4e6464ff346a6dff1f5572ff388690ff23776bff2d3958ff255870ff275462ff438794ff249a9fff27a6a7ff166a73ff4f5945ff575f63ff88495dff5e2b3aff8f835affa56931ff4c5d5fff46384dff5c8d60ff37755eff499599ff718b8aff3e7682ff5987afff29afa1ffa84e72ff2a98ccff558889ff537f88ffa72537ff595f83ff1c827fff267ba9ff614f78ff3f6e8aff27b9deff8f2028ff615959ff516471ffa02329ff3c575bff63725fffe8a947ff498f8bff329a96ff2b7f7cff4e718aff577c83ffb66e2bff227c9fff227ba0ff3b7174ff336864ff37494cff761a20ff476871ff1c6c73ff955834ff815e26ff6c1b37ff741d21ff4f1434ff3c4268ff22617fff4a4b50ff5c514fff446873ff1e5b81ff365164ff665778ff68514cff2b897eff2a3752ff186486ff285361ff515764ff624837ff562036ffb7734dff80773fff3c8268ff3288b4ff869c75ff77665dff137a74ff63826fff656079ff148392ff948347ff36676cff714a41ff318c96ff539ebcffa25b37ff75375aff288d93ff3096c7ff2f83a3ff3e848bff816a4cff577778ff297b9aff635277ff556982ff4c625bff1f74a1ff8e2153ff546f60ff3f7c72ff1f7f93ff237ca1ff206b97ff236c7fff1c6e8cff2676a0ff526564ff775246ff514b62ff236467ff685138ff475048ff6a6043ff681b2fff6c1a40ff27597fff3f445aff2c5059ff36506aff5f543bff6c2e2fff474163ff205c81ff27576aff1a5a7fff6f3339ff194e43ff475762ff20668aff3a485cff2c616fff1a5c55ff5b3b47ff693640ff967649ff3a755dff3a404fffa1883cff874c3bff50b0c3ff855c6aff873632ff1b7b95ff27607dff3e7d7eff394a62ff6c684aff416a57ff9c7a30ff464a54ff2d7eaaff237d9dff287683ff786c52ff836948ff556361ff167b8dff207b70ff35627fff537360ff2174a1ff902455ff5b6f72ff5c5639ff506e57ff6e3a37ff2d7aa5ff49737fff2f768aff246d99ff5d3553ff5a6245ff206994ff316264ff502e25ff494546ff655145ff56624dff316886ff3b5876ff6a223eff3d445eff475f45ff7a672fff57435eff454263ff4b596eff89907dff6e4147ff2c3c48ff6b2a2eff4b2f39ff22678eff5f533aff2c616fff1b6966ff5c3b47ff584541ff602240ff1b7276ff384b51ff577f57ff972453ff29799fff4f6e73ff681b38ff187d90ff454c54ff76454eff495259ff706c4fff2b6f6fff9f8638ff40546cff2e80abff258a8fff566981ff777152ff697968ff9a6838ff178091ff20738bff396880ff4b6660ff19838cff82562bff5d7072ff493936ff893d2eff544b64ff246c98ff6c765cff356579ff256d9aff31546cff43725fff7d724eff60473fff43402fff22595aff4a5150ff405b59ff4f6d81ff2a6684ff724723ff345472ff47583cff7b6730ff674e63ff4b4d66ff604239ff75642dff451b34ff2c3c49ff6d1f36ff5b2d50ff5e694dff764925ff4a3b54ff196964ff5b3c49ff7a2747ff583e60ff2a7382ff33595dff5e7451ff9d7e3fff2979a0ff317f75ff5a183cff666084ffa93251ff9b2357ff65536fff9f4179ff7b4b86ff877c48ff424e5fff2f7faaff699068ff6b475fff63608cff5f8468ff637061ff168092ff20738bff595877ff4f6666ff157e7bff885424ff5d7073ff652f37ff7a252cff2d6886ff2b7095ffa08636ff53716aff5d6776ff65546fff40665cff8c7148ff723220ff4e4f31ff205d5bff3f4652ff2a5568ff427489ff276187ff5d5232ff484656ff48583cff495939ff644b60ff48504fff6a4d34ff703057ff1e6172ff755650ff901b4eff921c50ff635058ff754338ff473a54ff484e6fff276387ff7e254aff4d466aff2e7786ff33595dffa44f63ffc5545dff81558fff8d5577ff555787ff197d7fff26485bff942352ff753f58ff586b8bff2aa2d6ff3f7c6bff444750ff317b9aff508975ff4b4353ff615d80ff5c7067ff257c8cff158092ff207692ff386c84ff4f6467ff157e7bff516758ff5c7073ff7c263aff76252aff2c6886ff356f89ffc1a241ffcead40ff925c44ff64506dff286877ff364b56ff5e3a3bff365650ff18615aff374f54ff2a5668ff554e57ff286186ff73572eff496066ff205464ff2b4c57ff4a3e62ff48504fff6b4d34ff2b5f7dff1e6272ff60533cffa85076ff9c235aff606e50ff744e30ff49454cff474d64ff37728aff702545ff68363eff2c7786ff575162ff675c5aff678170ff487a80ff2c7b8cff226e94ff1b7e7fff257987ff942452ff902740ff5a4f58ff6f8378ff57705eff4d5258ff446b7bff5b5e5aff66484fff8a3962ff6e5751ff228294ff288892ff1d7e93ff287387ff5a6c69ff357d6eff516657ff854144ff77273fff575165ff3d5c78ff385662ffb08b4bff528e73ff5d785aff4e4450ff276a81ff426558ff4a4157ff4d7283ff1c677fff1e697dff306477ff465a5cff5e4b56ff645b46ff495e63ff215563ff354053ff276183ff3a5460ff683d30ff305e78ff4a5857ff74572bff275f5dff363e5bff70785cff765829ff4b4f45ff464e5aff336875ff58253dff5d4643ff277a86ff4d5061ff67474fff4c787aff587f7aff2b7a93ff277f96ff447267ff1b7b87ff723c65ff902740ff892a42ff9c602cff464d57ff525559ff575558ff82473bff5d6f72ff942c58ff85513bff466681ff297981ff57876bff2f6e7fff5d756fff577a5fff157688ff514f70ff76293fff564f62ff4f4c63ff464343ff474a64ff2f7085ff417064ff4e444fff277188ff2d5f5dff494057ff4d7283ff266f9aff245d6dff426a6eff475662ff685848ff515a50ff545d5cff235564ff344154ff30697aff305a68ff3e4461ff2d6180ff604950ff74572aff275b54ff383e5cff54525dff75582aff4d5045ff484c58ff4e7371ff4c2639ff5e4645ff5a4045ff663e5bff765b4cff4b777bff805131ff407d7fff575469ff90582aff337989ff48648aff268795ff62577aff9c5f2cff5b6345ff55535dff683e47ff813b45ff5e7975ff9f8840ff8d573fff6c5a5aff2d7e8cff2c82a5ff2f687cff4a6e72ff618365ff1a788bff3a6475ff623c48ff435e7bff624b5fff4f443fff4c4d5eff597c5dff277475ff505065ff525870ff256869ff3a5659ff586369ff246f9aff215d6dff4a6a63ff37627aff586c52ff4d5c4dff633a35ff275f73ff344054ff336b7bff5f313aff4f283cff395c72ff5b3d47ff43544cff215048ff5a2030ff3b5e71ff76592bff495253ff3f525aff5b2e3eff6c5050ff5c494aff555151ff822a4dff916e39ff356e86ff906f3fff557a66ff804057ff7c6d4dff5d2440ff357d96ff2f8699ff714062ff726c48ff487983ff3a7d93ff84453dff803153ff657763ff848b53ff745c4eff8e5749ff278886ff337595ff426768ff3c5b77ff726c4aff20737dff4e6267ff237174ff497687ff337781ff742b2eff277073ff587d5bff297576ff59517bff7d5d48ff24707aff266769ff787452ff246e9bff644534ff484759ff4f4553ff4c515dff4d594cff653c36ff2d6777ff493a4aff3f7282ff6c3d42ff522d40ff415b74ff464750ff55445bff356561ff5f2935ff2a6985ff624f3eff694341ff336a6fff4a4855ff506375ff59414dff466356ff467073ff567979ff316e92ff734343ff658067ff3c7e80ff378598ff515366ff407d88ff567e88ff474a51ff455557ff60586eff635e6dff6f8688ff855e6cff76664eff698e68ff77604aff8e5949ff6e4754ff4c7578ff546455ff326278ff8a5431ff246459ff4f3f50ff576246ff517367ff3d8181ff804534ff467294ff5e5b7bff44608aff6e4b6dff68523fff53655bff406f6aff867744ff3a5a74ff39465fff4a4658ff5f2833ff3e4462ff445e66ff564449ff386a7aff634b52ff665c5dff724a4eff503e46ff3f6b8cff4d4d55ff315c69ff426c68ff5e3f4dff38667aff575b5cff723c39ff466c6dff585967ff5a6679ff685046ff406859ff3d6d70ff437183ff585d7aff4c7c9fff73785aff575b66ff607995ff4a7e8dff577487ff4b7d89ff477d88ff626c7aff965658ff955c44ff6c6d6cff784557ff526b7fff66776fff976247ff644161ff705c65ff7c766bff3c625eff5a7f69ff738571ff3c7584ff615260ff616c53ff6a7f6eff438287ff725543ff675f65ff5f5f74ff34768eff874e52ff454a54ff735157ff66786fff737556ff2f6a8aff3f435eff817d7dff6d5849ff434762ff465958ff545464ff7a7385ff5b4252ff62474cff5a596aff716561ff467289ff49676cff5c6b69ff50615eff56788cff3a5f6cff516971ff6e5656ff606b70ff5f6e68ff6c6a7cff63746fff4f776bff487682ff6b8278ff54697eff69818fff7e6d65ff738b77ff78616dff656874ff747b77ff616466ff8e8b8aff6b6d79ff876968ff8d776fff5b6271ff668b91ff51899dff5c798dff9b6951ff685c6cff727765ff746b6dff64829bff625862ff486e87ff795f5dff646764ff626f5dff626a86ff638899ff567273ff537274ff5d6d7eff4c809fff864454ff42676bff7c7181ff4c686fff5d6464ff436584ff4a6581ff736e7fff64666fff836b65ff494f67ff615c5cff486a7dff5c4f5bff5e7c8eff628497ff72766eff7a6b6fff6f696aff62796fff697d7aff54707dff7b7f8aff807677ff63757eff7e706bff707b7cff71616eff8e9d9bff798084ff859492ff68858fff68778aff90656cff8d908bff6a8c85ff7a9391ff658394ff637d8cff837b7affa3827eff896f78ff798179ff807676ff828086ff919b9aff8ea3a2ffcfb5b9ff577988ffb3817aff6d8d9cff726576ff9f8092ff716f7fff597f8eff8d8c72ff886b68ff6b6b70ff667991ff926c6cff578582ff577a83ff717183ff607170ff717276ff6d625dff857e71ff59727cff778198ff637689ff776d67ff6d5762ff827a80ff887d72ff6a5a62ff5c747fff6b7e78ffb6b5bbffcfc7c6ffb6c2cbffece7e9ffbebcbdffc6c8c1ffc4cfd3ffb8b9b7ffb6c1c6ffbcc7ceffefe3e3ffc1caceffbeb9b5fffffffdffccbdbeffe4d9daffc2c5c3ffc3d5d2ffe2d4c9ffc3c8c0ffd6c3b8ffccdbddffe4dfdfffd5ded9ffd7c4beffbfc3c6ffb3cfcbffcbc1b8ffcdb8b5ffcbc1c1ffc3c8b6ffdacbc7ffeae0dffffefffdffd8e3eaffe2ecf2ffccc9ceffd5daddffdfebeeffd2c9c0ffe1e3e6ffbec8c8ffdbc9c5ffccbcbcffc5c8ccffb9c4c5ffdbe6e9fffefefcffd8dedbffc3bcb6ffe8e1e3ffbeb4b4ffbab8bbffb4c1c0ffe0d5d6ffd9dedcffb7bac2fffffefdffc4b7b9ffd6dee3ffebeaeaffbdb7b8ffe4e3dbffd5dde3fffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000739372ff89ad8cff90b38fff89a57eff83966dff8e9f7cff96ab8aff90aa8bff6f9c95ff599292ff7dc5e2ff84d1f6ff78accbff6f657fff882550ffa02b5fffae3366ff9c325fffa3425affac4659ff9c4252ffa03f5dffa53864ffaf5577ffd9a87bffb4864fffb79d55ffbfaf63ffa39f5dffaba461ff59764dff597c62ff6f96a9ff74d1e9ff4db6c8ff4f8da3ff319aa9ff576c8cff854b7dff708787ff5d938fff3fa2b6ff2e9999ff508792ff9c545dffa4344eff842550ff952c5eff963261ff6a475dff976e49ffbd9260ffbc8c5cffb47938ff9b8788ff6687a3ff6b9eb5ff953251ff847182ff749e8bff8bb8acff459cadff3087a7ff6e687eff70acb4ff82b0acff8b7169ff4394b2ff4a7a81ff5697b4ff7f7e98ff428fa5ff834974ff833866ff389ca9ff578078ffd47e2fff942824ffa03032ffd83e6effbe4d5cff8f6e7fff945c3eff786464ff8e6650ffbe9f62ff43839cff3092b2ff4a7e97ff457072ff4e939eff6a8885ffb0898fffb09eaeff83bfccff7aa8bbff634957ff3b838fff93675aff80526fff6e3b4dff99703cff33707aff3c7c8eff8c395dff636856ff8b4b49ff923942ff894939ff796d7cffba2e5eff4471a5ff5a5678ff58737bff428ea3ff5d9d87ffb48f3cff799c72ff3ca0c8ff806c89ff9da474ff68ab96ff7eb38fff87a0a6ff5a7e8bff7d3943ff697b97ff2e6372ff6a7a74ff487d86ff2590a1ff4d6c52ff934370ff2a7690ff4d5058ff18928bff3d827eff4c7e8eff7d5f7cffa82762ff357f90ffa59042ff3a5d7cff38979cff468790ff6f8c86ff3e7ca9ff747a6cff8e6247ff80a07dff8a6640ff4c787dff507880ff6d8770ff5ca493ff248c97ff42a0cbff94734eff635c46ff9c797dff2a84adff438780ff466b70ff256c5cff585767ff665e66ff5e676aff467c78ff1b8374ff36867aff595672ff4a7e99ff53456eff37849fff486c87ff398091ff4584a0ff378095ff45677dff4e6c57ff5e835dff6d4141ff496067ff5a6574ff575d63ff5c9695ff5a9470ff6a816fff536d72ff5b5845ff74564fff587b71ff3f5d68ff2c5c6dff3a556bff3e7e7fff1f6a7cff47585bff673740ff9a7545ff406772ff638164ff4c8781ff43778eff667971ff487d8aff7b676cff44697bff3978a2ff49858fff5c5a64ff6a5064ff42676dff847261ff2e8485ff397491ff457175ff357186ff4c5356ff514d4bff585d4cff702b32ff4a334bff30506aff664b3dff3d4d6dff4d606bff47393cff34546cff3c575cff3a4e52ff6d4442ff315c5cff855d48ff537c8fff485263ff475b67ff575c55ff69764bff386785ff31798cff766f55ff46716dff2b6d7eff36737bff725658ff5f4e3dff445a76ff467077ff35587cff4e6b61ff48453dff46504dff45646bff504956ff3f5354ff63564aff574a48ff52434aff673247ff6b4051ff5f4041ff385568ff673356ff2f6770ff986554ff5a6886ff4b5371ff7f2f55ff744f72ff5a7983ff39637cff5b6863ff5f6c76ff2c7b84ff346b86ff327170ff646658ff742731ff2e6b8affa09148ff6e5965ff4a625cff554436ff2b5456ff3a5b6bff475a5bff3e5457ff344a63ff554b44ff305d6fff68564eff685158ff5f4e3aff3d5d6fff633140ff3d6473ff606664ff3d7b86ff297783ff515471ff803146ff6a6756ff4e5960ff675755ff844351ff2e7a8aff327981ff507569ff4f5a64ff663c51ff425060ff5e7469ff4e5c57ff2f676fff4b596dff216780ff3f5f68ff5e564dff385961ff325567ff473d4fff485062ff3f5544ff484356ff60543bff4c4f58ff5c4146ff653e4fff616b61ff696d55ff78564dff435f7aff4a6982ff6c694eff5e545dff70575cff897147ff536d6dff337187ff566d65ff306c79ff44606fff554c53ff486d62ff3e6272ff456366ff4c645fff335f75ff455662ff4f5c51ff474e55ff54545eff603c45ff445669ff3f5c63ff474d60ff644a44ff465d66ff5a5660ff426964ff486d81ff656d68ff4a7584ff4c7080ff4b707aff675b65ff746b69ff715d64ff77715aff744f58ff566c65ff626e60ff435a63ff5c6f5bff5c675fff5a6279ff5b5b75ff5c5451ff67745cff38536eff655054ff425060ff575d6aff5d5461ff676e73ff5d6b73ff5d706bff57717fff686a6eff6b706fff73777cff658080ff637983ff80787aff73827eff687882ff857a7aff7d7174ff7a7377ff75949aff878487ff7e7879ff7a7484ff5d6d7dff7c6f66ff656f78ff687a7eff5e727eff686976ff6c6e6eff5e6f79ff596b7dff716974ff6f6468ff5b6e73ffe0dedeffe8e9ebffe0e0deffdee1e1ffdce1e3ffebeaeaffeeedebffebe5e4ffe0e6e3ffe8e6e0ffe8e7e3ffedeeecffe5e1dfffdfe3dfffe5dddcffe6e4ddfff9f7f5ffeef3f5ffe7e8e9ffebeceaffe7eaeaffe9e0deffdfe2e2fff5f8f7ffe6e6e2ffe9e4e4ffdbddddffedecebffededeeffe6e4e5ffe9e7e7ffedefeefffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077a9a4ff6da69dff668e87ff868986ff59989aff5fadc0ff89667dff902857ff923760ffa86256ffab6150ff956681ffa37f74ff9b9671ff87a585ff547874ff648a91ff786f78ff696e6fff4b7e91ff7d4863ff6a686aff9a5741ff9d4368ff7f6073ff6a7a73ff9e8b58ff4b88a7ff648f84ff6f9b95ff8d7782ff6491a3ff478089ff37746fff5e5b73ff427171ff36827eff71567aff597577ff3c788cff4c8592ff51727aff767158ff5e6865ff5b7c7aff519182ff617573ff726960ff43545fff435a64ff355b67ff694f46ff56685eff4a7380ff536b6dff576b6dff4a7984ff4d626cff5b6868ff426872ff3d6a7bff4c544fff544f4dff424757ff504d4eff544953ff644749ff4f455bff586566ff426b7fff70405fff52676dff695b5fff307685ff4d6965ff52475aff6e6e5bff46595bff315d6aff465758ff4b4856ff42555cff544b4dff525059ff545f65ff636963ff486a7dff69605eff786558ff54666cff4a6868ff54605fff4e6270ff54635cff455566ff4b555cffa3a2a7ff9ea6a7ffa1a9aeffadaeaeffa4b1b1ffb1b3b1ffacadaeffb0a9a8ffb8c0c2ffb2b0b3ffaaa9aaffa8b0b3ffa5a9aeffa4a9abffa7a9b0ffa8aaabfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000709192ff688083ff677d89ff934a5fff885c67ff8a7673ff848f7fff728987ff41686eff4f5d64ff516c75ff4f7077ff4c747fff5c6a65ff4d7271ff5a5d5dff4c4c54ff564952ff54666bff5c5c69ff59666aff4f5e61ff556260ff415761ffcfd1d2ffd3d5d5ffd4d8d7ffd6d5d4ffdadbdbffd4d5d5ffd1d4d4ffd3d4d5ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a7579ff666875ff6e6c6fff677975ff918e93ff969b9fff959d9eff8e989aff0000000000000000000000000000000030373b7f3539397f494a4c7f484d4e7f3d41437f
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Mono.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Mono.asset.meta
new file mode 100755
index 0000000..40ba94f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Mono.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c9340fc8d5cba57498f7960bc0f094ab
+timeCreated: 1592334546
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Stereo.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Stereo.asset
new file mode 100755
index 0000000..af8ae9f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Stereo.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Local-MP4-Cones-360Stereo
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/Cones-360Stereo-2K30-H264.mp4
+ _hints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 1
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: f5d576fffcd87bfffed87dfffdd97afffdd77afffcd778fffbd774fffad576fffad575fff9d474fff8d373fffad575fff8d170fff8d171fff5d16efff5d16efff5d16efff6cf6dfff5ce68fff6cf69fff2cc67fff2cc61fff2cd61fff0ca60fff0ca60fff1cb61fff2c860fff1c75dffeec85dffefc95dffedc75affefc658ffefc659ffefc65cffedc758ffedc75bffebc65dff70632dff25607aff21637fff20637eff1e6280ff1e6382ff1d6280ff1f6383ff1d6280ff1c617fff185c7bff22607eff215f7aff30637dff3c6d83ff91305dff8e1e51ff9b2958ff9d2c59ff982e5aff9c2f5cff9e2e5eff9f305cff9c2f5eff9c305dff9d305dff9e315dff9e315fff9f335eff9f335effa0345fffa13562ffa13562ffa13663ffa23864ffa13965ffa23c66ffa23c66ffa23c66ffa43f68ffa64069ffa54268ffa64369ffa9436bffa8456affa7486dffa74a6fffa84b70ffa84d6dffa94d6effab4e6fffab4b70ff983962ff86204bff86204dffe9d3dcfffefffdff716431ff746430ff74652dff77672dff7b662bff79652cff7c672eff7d692fff7d692eff7d6c2eff7e6d2fff7f6e2eff7f6e30ff7f6e31ff807030ff807030ff806f33ff827034ff837231ff837432ff837432ff847533ff867735ff897835ff8c7530ff9d863effaa9349ffad9749ffb79e4cffc0a758ffd0b564ffe3c36fffeacb74fff7d67fff126473ff116271ff106271ff106072ff12606eff12606dff195c62ff255c53ff345d4eff60775bff7d8865ff8d9263ff959057ff9e9357ffa19153ff9e904dff9f924dff9e8c4affa99152ffab9455ff86865cff6d7b58ff4a6353ff335d63ff235f75ff1a617dff1b5f81ff175f83ff195f83ff1a5f81ff175e7eff195c7fff1a5d80ff39a2d4ff79d0ffff78cfffff78cefeff78cefeff76cdfaff74ccfaff70cafaff71c9fcff6dc9fdff68c8fcff66c8fbff63c7fcff61c4f9ff60c3f8ff5cc0f7ff5bc0f6ff59bff5ff57bff6ff53bef6ff52bef4ff611e24ff621c20fffefffcff5f1640ffa32a5fffd53a77ffda3a7affdb3978ffdf397effe03b7dffdf3b7dffdd3c7bffde3e7dffdf407effdd437dffde447effe04681ffe14782ffe34a85ffe44d84ffe34e86ffe45288ffe7558bffea5a8fffe95c8fffe86190ffe66698ffd95f8cffc54e79ffb5446fffa94069ffad436dffa8466bffa14168ff7f1e46ff821e4aff851f4dff87204fff871e4fff871e50ff7d2347ffeec75affedc75cffedc75bffecc95afff0cc5efff1cb62fff2cc64fff5ce6afff6cf6dfff7d26ffff8d372fffbd577fffbd678fffbd77afffcd77afffbd87dfffdd97efffdd97efffdd87bfffcd77afffbd578fff9d274fff8d373fff5d16cfff5d06bff626b3eff144e43ff134f43ff165146ff175348ff1a574dff195c4ffffdffffff0f6775ff0e6371ff0a6b78ff5ec8d8ff5acddbff5bccdbff56cbd9ff55c8d7ff52c8d6ff4cc6d4ff4ac5d4ff4ac5d4ff47c2d1ff39afc1ff045e73ff135c72ff115e73ff0f6271ff0f6271ff0e6170ff2a759cff4b90bcff498fbaff478eb9ff4995c1ff71cdffff6acafeff62c6faff5ac1f4ff54bff4ff4fbcf3ff4ebbf2ff47b8f0ff43b6eeff40b6ebff165c4cff155748ff14544bff085657ff3594b3ff46b4deff3fb1ebff3bb3ebff3bb3ebff38b3ecff35b0e7ff39b4e8ff47b1e5ff5794bfff462a3eff651720ff6b161bff70171eff701920ff781a1eff711c20ff4a1532ff5c163fff60163fff601640ff601640ff641540ff651440ff64133fff64133fff661440ff67153fff63143dff60153cff5f163cff4e1534ff166457ff6c5327ff8c5520ff8f561fff8f5519ff90561eff975921ff975a20ff985d1fff975d21ff92561eff8a511cff864f1cff8b7632ffbf366fffda387bffdb3d7cffde427fffe14682ffe14c85ffe35585ffe85f8fffec6a95fff277a1fff784a8fffd94b5ffff9ebeffffa9c6ffffadcbff692d4aff6e1c43ff741c43ff731d3cff762036ff355639ff657851ff76885eff788b61ff607a53ff395e3cff21543aff1d5948ff175e50ff297163ff387b66ff3c7b68ff3f7b6bff437d6bff437c6aff437c6aff3c7b68ff387968ff357765ff317463ff5ea993ff55a599ff165a7fff93e7f6ff91e8f6ff90e7f5ff8ce3f1ff88e0eeff80dcebff76d8e9ff6fd4e6ff66d1e1ff5fcdddff58cadbff51c8d8ff4ac5d6ff44c4d4ff3ec1d3ff3ac1d2ff36bfd1ff0e6170ff0e6170ff0e6170ff0d6071ff0d5e6eff363e64ff5ebef3ff4dc0f5ff4dbaf0ff47baefff42b8eeff43b7edff42b5ebff3ab4efff3cb4ecff49afd6ffa4924aff9d893cff2d7361ff2b745fff51a48dff51a78eff4ea78cff49a287ff44a187ff3da085ff379f83ff126265ff901e25ffd15357ffcf5659ffd25a5dffd1585bffd1585bffd2575affd15357ffcf5357ffce5054ffc84c50ff4a1330ff8d2c5dff9a3664ff9a3865ff9a3b68ff9a3e6aff9c4069ff9e426bff9c446aff9f476effa14a70ffa24d73ffa35075ff91486bff5a1a3bff146353ff735325ffb76e29ffe68c41ffea9147ffed934fffed9857fff19e63fff8a46dfffdae7affffb685ffffbc8effa16020ffeccb67fff1cb60fff3ce65fffec98bffd83c75ffdd417effdf4682ffe04e84ffe5558bffea5f8fffee6d99fff479a1fffb8eb0ffd39fb9ff187a8eff127b8fff6a1d3dff6d1a41ff731a43ff771a46ff7d1b48ff4ba48dff49a289ff53a88fff5caa93ff66b098ff6cb39cff6fb49eff6ab19bff67b199ff5caa96ff0e5e70ff0c5d6fff0a5d71ff0e6074ff0f6376ff0e687cff117184ff185f85ff63b0dfff67c5f6ff67c3f5ff61c0f6ff5abef4ff4084aeff3c2c40ffa0eefcff9aebfaff8fe7f5ff83dfefff7bdcecff6fd6e5ff66d1e1ff5ecddfff51cbdaff4bc7d8ff44c4d4ff40c3d5ff39c1d1ff64d4e4ff80dbecff66d2e5ff56cbdbff45c5d5ff3abfd1ff30bed0ff5c274eff721842ff721740ff6d1540ff6d173fff6b183fff6a1b3bff9e924dffb69637ffebc95affeec453ffe5c55dff2b6d8dff207aa2ff1e759eff1d7396ff166c8eff176787ff135d7bff127d8dff108999ff55cdddff57cfdfff57cedeff99515bffc13439ffc13139ffc3343affc23336ffc23336ffc23135ffc33137ffc13138ff5e0f38ff471031ff4f1032ff93265aff92285eff93295fff922b60ff932c61ff942d61ff942d61ff943060ff953063ff973365ff973464ff822c57ff3a6061ff267060ff28725fffe28633ffe28836ffe48a38ffe48a3affec8d43ffea8f48ffec934cffef9654fff3995bfff59d5ffff29f66ffefc757ffefc75cfff0ca5ffff4ce65fff5d16bfff9d471fffed97afffddb88ff1f74a4ff3ec1d1ff47c4d5ff54c9d9ff63d0e2ff76d8e9ff75c9d9ff4c96a8ff6e1c3fffb63a6effe04c84ffe55989ffe86895fff0739dffef7c99ff7ba199ff70b8a2ff81c3b0ff93cdb7ff99d5bfffa7c9b3fff0a673ff0e6170ff0d5e70ff4bb9c9ff51c3d2ff4bc3d1ff4cc0d0ff056c7fff0e7183ff1a6490ff197187ff5b93bbff73b4d6ff4b90bcff3f8ab3ff60141aff403045ff165b80ff145d81ff3f8ebaff6dc0f1ff57b0dfff10608cff14597fff185a86ff104c43fff686abffed6997ffe55388ffdf437effdb397aff0e6561ff076364ff08646bff166182ff165e80ff981f54fffb8bb0fff2739cffe95d90ffe35084ffe14482ffde3d7dff6c1540ff265966ff255865ff255865ff215663ff265463ff53bff5ff4ebff3ff4dbdf4ff49bbf2ff46baf1ff43b8f1ff3db5ecff086a78ff32c0d1ff30c0d4ff30c0d4ff2fbfd2ff2cc0d2ff2abfd1ff2abfd1ff74491cff982a60ff972b5fff942b5eff952c5fff962d60ff962d5eff962e60ff962d5fff8b2053ff941f55ff951d55ff921d54ff8c1850ff85184eff8c2155ff8d1f54ff921f57ff961d57ff981d57ff921d51ff4b847cff339d7cff339e7fff3a6559ff731b23ff73171aff23bcceff30bdcfff3bbed1ff3ec4d7ff49c8d9ff57ccdfff74a293ff8b5319ff8d551bff90581cff975a1dff9c5e1eff1b6e97ff44b8edff2e83b0ff3486b5ff448bb8ff4d90baff389db9ff49c9daff53cbdeff61cfe5ff607f8cff882124ff862f38ffd64b7fffa03562ffa33d67ffaa4e72ffb0637cffbe7089ffb47287ff0c7187ff187487ffe6ad81fffeba89ffffc399ffc9d8bdff7edde6ff72d7e8ff89e4f2ff9eeffcffa0eefbff8ce4f4ff71d7e5ff5acddeff17638fff136e7aff601518ff5f1216ff5f1013ff601216ffd15c5fff5f5f78ffa9ebfeffa4e6feff91dbffff7dd1feff6cc7f8ff5dc1f5ff51bcf1ff49b8eeff6cb69eff55a98eff4a9f89ff195975fff5ffffffb0fcf5ff6edcd0ff4dcdc0ff43c6bcff176081ff15678dff225879ffe34982ffe14180ffdf3d7effdd397affdc347affdb3178ff7f4772ff2e6d7cff2b6676ff295e6dff225768ff245565ff721540ff445882ff3bb4eeff36b4ecff36b1eaff2eaad3ff41bfd4ff39c4d4ff39c4d6ff36c3d5ff31c1d5ff32c0d3ff9c5d23ff9f5e20ff9e5d1dff9a591bff97591aff90531dff832e39ff8f2055ff8d1f54ff871a42ff81181cff641318ff8a1e54ff971d58ffd2417dffde5188ffc23970ff981c51ff881f50ffdc397cffe03e80ffe14180ffe44582ffe74b88ffb22861ffab3543ffc2343affc43b3fffc44245ffac393cff86332aff2e94cbff2782afff2b84b2ff3287b3ff3888b9ff854f1eff885218ff8e551aff93581bff9a5a1bff9e5f1dff1b6f9cff18729fff1f78aaff1e709fff0e697dff0d748aff19608cff176c9aff1d72a0ff1b74a3ff207e9bffc94d51ffd35a5fffdb6e70ffe18180ff671318ff0c5b6dff0a5f72ff0b647aff0a6a7fff0c7185ff0c7689ff107c8eff806d2bffb3f9f0fff0fffffffffffdfffffffdfffffffcfffffefdff82d2ffff9ce3ffffa1e7ffff8dd9ffff70c8fbff0f7074ffed9597fff7a7a9ffee989cffdc7979ff79bbceff67b3c4ff085d74ff79d2feff71cdfdff66c6f9ff59c1f4ff50bdf2ff48b9f3ff5cb29aff52aa8fff45a386ff3a9e83ff155b80ff135b7eff125c7cff1c867eff04514aff0e4e44ff5cc4f9ff55c0f5ff4bbaf1ff42b7f0ff3bb5eeffd18b51ffec964dffed9046ffe38a39ff4b96a9ff6bb7c7ff64b2c5ff5dadbfff57aabeff54a8b9ff72153fff74153fff801746ff761743ff6d173fff265969ff28bfd3ff25bfd0ff24becfff21bdceff23bdceff31afc1ffb66d28ffe78b36ffe78b38ffe78b38ffe78b38ffe78b35ffe68a35ff861b21ff851a1eff84191dff83171bff651112ffd53077ffdb3077ffdc3178ffdd357affdf377bffe0387cffda3b7bffdb2f76ffdb3079ffdd327bffdd3279ffdf377dffdb3a81ff0b8597ff0f8494ff8d541dff96581bff9d5c1bff844d19ff68181eff76161dff7b1922ff811720ff72161bffe58837ffe58b40ffe88f49ffeb9655fff39d62fff6a36aff4eb7efff2e88b7ff3889b4ff3b8ab7ff0c687cff0a7587ff46b7efff57c0f5ff71cafeff8fdaffff3a93a0ff6fcdc7ffbdfff9ff85b7b4ff601313ffcc6667ff0c5d6fff5bc6d8ff6ccfe1ff7cd9eaff88e0f2ff117786ff157c90ff816e2eff917b30ff5a153eff6a173bff6a143bff69133cff741541ff0e6461ff0d6261ff086060ff086066ff096667ff0e7070ff27678cffb1e2f2ffa7dceaff8ecad8ff046072ff22778bffa2eefbff8ce2f0ff5fcddfff42c1d6fff4a367ffee9a5bffeb9650ffeb9048ff781b46ff6c143fff1a698dff135c80ff125a7cff165680ff367966ff3a8972ff3c9f86ff319b7eff0a706bff026968ff0d6163ff3395c2ff49bcf4ff48baf0ff43b8f1ff3fb9f1ff3db7edff51a9bbff50a7baff4fa6b9ff4ea5b8ff5f3a61ff961951ff9e1d56ff96174dff791545ff6c1640ff265968ff245867ff235e6cff485845ff327384ff2f707eff2c6a78ff275f6dffd98434ffe1852fffe38630ffe28630ffe18530ff811c22ff831a20ff851a1eff83171bff83171bff7d171cffe38931ffe78b35ffed6a61ffce3461ffd62d74ffb02261ff981c53ff925522ff995c1dff9c5e1cffa05b1aff23bbcfff28bfd1ff33c1d3ff36c5d4ff8c541cff97591aff9e5d1dff9e5d1cff6b1921ffc33a3effc94449ffce5054ffd45d61ff476149ffe38939ffe98b40ffeb914bffed914cffaa7f32ff927c31ff18638eff186a97ff19709eff2ea0b5ff52c6d9ff7ad9ebff108494ff96476eff70334eff5d173eff0b6667ff0b7372ff0c7e7cff9b515bffce575aff4dc6d7ff60cbdcff74d6e7ff8be2f2ff9ceafbff9feefdff86e0e4ffffe79bffae974bff56143dffffa8c6ffffd3e7ffffeffcffffe6f8fff5fdfffffdfffdfffdfffdfffefffdffdffffcffa2f5edff1a6896ff0e6172ff0a5f6eff0a5c6bff6cd2e2ff5bcadbffb39b54ff93b592ffcadea7fff6d26ffff2cc65ff7b4a17ff6e4112ff6d3f11ff7c1845ff861b46ff76ccfeff5ec2f5ff4ab9efff3db2ebff450b2eff430a2bff501130ff70143eff3dccbfff2fc7b7ff23c3b6ff0e4d40ff40b8f3ff3db7efff3ab6eeff38b5ecff35b4ebff24596aff5caec0ff58adc0ff56abbeffdf397fffdf387cffdd357cffde337affdc3178ffde2f78ff38798aff347b8cff50a9bdff4a5e3eff327487ff307083ff2d6c79ff245e6effd28132ffe78b35ffe78b35ffe78b35ffe68a34ff801b20ff841a20ff8f1820ff911920ff8b1920ff7d161bff76181cffd8753fffe47e41ffda3279ffdd3078ffdd3077ffe0337bffd68a42ffe58832ffe68937ffe98c3affc02b31ff891f22ff8b2123ff9d292eff8d521bff945a1bffa15e1fffa15e1fff57a8b9ffc13138ffc5343cffc63d41ffc8464aff8d521cff33c7baff44d0c2ff58d6cbff867c42ff9b8335ff8f7a2eff16628cff186a97ff19709fff3cbcd7ff3ec4d5ff43c5d7ff195a70ff893b66ff953b69ff2d6f80ff0a6667ff0a7372ff0d7d7cff215c6bff296579ff2f6c80ff58aaa5ff50cbddff5acee1ff63cfe1ff8e634cfff8d675fffddc7fffdfb37fff5b143efff384a9fffe9ab8ffffaac5ffffa4bffffd8eaeffbafff8ffbffefaffb3fef6ff95eee3ff76d7e8ff57b1e5ff99eaf7ff92e7f4ff7edce9ff3f6d85ff430a2bff460c2eff888e5bffac913fffefce66ff215265ff7a4a17ff73400dff704113ffea5e94ffe65288ffe14683ffe23a7effdb3778ff914168ff983964ff912b60ff8f2055ffd33c77ffd93476ff754918ff0f5c4aff0d4e41ff114b45ff235865ff225565ff337481ff5cacbfff59aabfff51a9bbff50a7bcff4fa8bcffbc3c7effdc2e76ffdc2d75ffd82c76ffd92c76ff878db3ff4ea5baff4ca5bcffbbc07effecc54eff51a8bdff52a8bdff50a7bcff4fa8bcffdf8b35ffe6872fffe6872fffe6872fffe6872fff931d1fffc42f34ffc42f34ffc42f34ffc53035ffc53035ffb73137ff961b52ff911b4fff1d7ba9ff4b73a8ff48719eff18648bff23c5b7ff26c8b9ff2bc9bcff31cac0ff276b8cff1a77a4ff1b7ba9ff1f7dacffe2852fffe38933ffe78c3cffec9142ff50a8bbff53a9beff54abc0ff57aec3ff927f35ffe4893cffea8f44ffef9350ffe9c557ffeec85afff5cf63ffcbad57ff17608bff166b99ff54bdf2ff5ebef2ff1f7dacff1e7daaff5eacc1ff69b2c6ff76bbcdff88c6d8ff54ccc3ff8be7dffffbfeffff1d5b6aff2a6579ff306d81ff746126ff7f6b2aff887531ff967d37ff47092cffb67a93ffc58ca1ff5c1d3dff5a113dfff6fffcfffcfffcff6ea8a1ff5c1014ff611116ff6b151bff175c81ff9adef7ffa5e4ffff81c8f2ff1a6997ff11567dff5cb6d2ff59ccdbff430a2bff42092aff450b2dff085d6eff7bc3d4ff74bbcdff6cb4c8ffc69b73ffea9148ffe38a3affee9552fff1776bffdc3876ffbb3774ff4d0b31ff45092eff45092eff440d2eff746625ff736125ff8b531cff7e4a14ff4da88eff3ba185ff134a43ff225767ff215464ff52aabcff50a9bdff4fa6bbff4fa6bdff64123eff942c61ff95275fff8a2459ff55aabdff4fa6bdff4ea5bcff4da5bbff27896dff0c624dff48261aff961b50ff841a4cff5e9caaff64899dff7c151aff741418ff611518ff75261bff58a4c8ff327489ff1e7eaeffc22931ffc42a30ffc42b30ffc3292fffc3292fff9c1c4bff981a52ff901a4eff1c7ba7ff1d7dacff1d7ea7ff1c779fff5a103cff2ebdb9ff2fbbb4ff491132ff286d90ff1a76a6ff1d7aa9ff1f7dacff1d7dabff396678ff82a6acff46bbf2ff1b717cff54a9bcff5cb0c3ffecc54ffff0c856fff5cb5cffc08f45ff31bed2ff38c3d4ff46c6d7ff1990a0ff156a88ff43b6efff48baefff4cbdf3ff52bef3ff55c0f7ff5bc3f8ff68aabeff5fafc5ff60b2c5ff6ab5c0ff024e43ff3ecdbeff4fcdc3ff68b1c6ff77bcceff81c2d5fff6ce68fffed77affffe18dffffe394ffa45476ffac6581ffb3718cffb77790ffb16e85ffad7652ff165680ff5e1316ff590e11ff601015ff691419ff86d6ffff85d8ffff82d2fdff76cbfeff3586b1ff12587eff145b84ff470b2dffab6683ffa65578ff9b436aff4dc7d9ff3bbfd1ff1a6c7dff36798cff474d5aff973137ffca4b4fffea8e47ffe48c3aff65a1a9ff6e849fff9a3a67ff973162ff942a5eff92265efff4cb5fffecc552ff915519ff7e4b12ff476b46ff389376ff256a7eff37778bff51a8bdff4b9eb2ff337182ff2e7080ff2a6879ff95215bff93205cff93205cff921d5aff8e6435ff8b772cff756529ff2c9e82ff299c7fff269b7eff74151dff961b50ff8a184cff87191eff83171bff7c151aff741418ff621418ff7a151aff6f1518ff51aabfff1b83b2ff38b8f1ff37b8f1ff3bb8f0ff285f6dffcf2e73ffdf307affde3178ffc82c6fff1c7ba7ff1d7dacff1c7da6ff1c779fff5e0f3eff691042ff690e40ff59113aff256b8fff33b5ebff36b7eeff3ab7f1ff3bb8f0ff1a6f96ff0f8591ff0b8989ff0d8b84ff89732dff927e32ff9d8737ff927b2dff866b2dff907b30ff2bbfd1ff32c1d3ff3bc4d6ff0b6d82ff136785ff166c9cff45baf1ff47bbf2ff47bbf2ff49bcf4ffcb4c52ffcd5658fff1cb60fff2cc63fff5ce67ffd8cf80ff3aa285ff43a48fff0b7271ff0f7d7dff0e6064ff096667ff0e716aff0e7c7bff0d6162ff1c726eff934368ff9a456aff427182ff0d7286ff15587eff14577eff621116fff1a0a0fff4a3a3ff6c1517ff6b133eff791645ff0f4e44ff0c4b41ff0c4b3fff458ebbff62c3f0ffb36f8bff6b2045ff731f47ff893651ff6e4014ff07616fff085e6fff085b6cff186777ff9a262bffc73840ff085c6eff377e90ff5bacbeff55aabeff803d6eff91255eff8f225bff6a123dff175e7fff155d83ffe99243ffe98c3affe68a36ffe48835ff53a8bcff50a7bcff4fa6bbff50a7bcff51aabfff4ea8bcff4da6bbff4da6baffe03279ffdd2e76ffdc2d77ffa38633ff8b772cff736426ff6e133fff633944ff83161dff7a1520ff951a4fff8a184cffc62d32ffc62d32ffc52c31ffc32c31ff63141aff7c151aff6d1517ff4ca5baff31b4edff30b4ecff31b4ecff32b5edffab3541ffdb2b76ffdb2b76ffdc2c77ffdc2d77ff1981afff3dbaeeff4bbff3ff1e79a2ff911c59ff921d5aff941f5aff8a2453ff90602aff32b4eaff33b5edff35b6efff36b5efff1a6d95ff0c7e7cff0b8882ff0d8b85ff8b752dffe8c35dfff0ca5bff9e8535ff866a30ff907b30ff927e30ff9d8733ffa28b2fff3bc0d1ff2787a4ff2b8cbdff58bdf3ff1d82b2ff751316ff8a171aff921f2bff560e3aff5c113dffeccb5fffae9341ff987e35ff927e32ff54cec2ff6ed8ceff8ae7dbff0a6364ff7bded5ffadf8f0ffaaf4f0ff5bd4c5ff74ddd1ff89e7dcff98f0e3ff5bbfbcff0d7286ff13597fff12587effd0605effd66b69ffd66a6affd26366ffa44e71ff7a1546ff0e4d41ff0c4b41ff0d4c42ff125349ff096763ff06605fff076060ff0b696aff6f3f11ff6d3f11ff096272ff055f6fff095d6eff1c6774ff076370ff08606eff095c6dff186270ff155559ff145e5fff0e4d41ff7c1641ff6f123fff6a113eff135f80ff125c80ff9e7853ffe58931ffe38630ffe3862eff104b40ff5f1115ff2c6b7aff265d6cff205564ff178880ff0d7b74ff096b67ff156060ffad4757ff576494ffa18432ff8f772cff756328ff751440ff5f424bff83171eff7a151eff961b52ff8c184cffc12830ffc1282effc1282effc0272dffb3262dff92171dff6c141aff4fa6bbff7e926bffa68b32ffa18431ffc2272fffc12830ffd92c76ffdb2b78ffda2a77ff7382b7ff2fb3ebff30b4ecff33b6efff33b6efffc42b2fffbd2d43ff8f5822ffad5f17ffe68934ffeb9344ff9a5c1aff1a71a1ff1c79a8ff217eabff22c4b7ff2dc9bcff3dcdc2ffbfc66effedc651ffefc755ffac9144ff876b32ff907b30ff968136ff9c8934ffa48a33ff31c2d2ff39c0d6ff41b7eeff45baf3ff45baf3ffc84147ffc84147ff5b0b28ff530d39ff590f3bff215168ff766226ff83712cff927e32ff75602cff5e7144ff887329ff6a9466ff4bcfc3ff57d2c6ff60d6c8ff73c9fcff026567ff30a59bff09606dff0a6175ff0b7283ff13587eff15587fff125c84ff1a6896ff823733ffa1355cffe9638fffe6578aff0d4e41ff0c4b41ff0c4b41ff125349ff096562ff086161ff6ad8cdff21948effed9656ffe8914dff45c8daff3fc4d7ff36c0d3ff379399ff076370ff075e6fff095c6dff156372ff0e4d41ff38a285ff339f81ffe1347bffde3178ffda2d77ff3eb7f0ff3ab7efff37b5ecff40aee0ff105e49ff0b4e40ff104b42ff5e1014ff2d6c7bff2d6778ff215464ff148980ff0b7a73ff096b67ff0d6360ff786a24ff1d779fffefc64dffeec44efff3bc62ffdc2c77ff694348ff901b1fffbb3b44ffde2f7bffdd2d7affd92d75ff901a4eff87184affc1282effc2292fffc1282effc2282eff0b7c8bffa28738ffa48a35ff9e8534ff8e7828ff630f3dff0f8297ff0c849cff30b3ecff34acdfffc4bc69ffcac57aff2b6e86ff347487ff486e7eff315748ffad772affe4862cffe6872dffe7892effae5d1aff1c72a2ff1c7eaeff1f81afff1b75a1ff26b3bcff16729eff884f17ff93571cff8b5019ff73151bff896a28ffecc656ffefc959fff1cc5efff7cc65ff7a4816ff875119ff8e551bff8e551bff0c7070ff0c7e7cff0d8582ff4d0c34ff6e1e49ff5a103aff215168ffeac85bffefc95cfff4ce64ff735f27ff9b7f31fff0d074ff968034ff55a894ff48b9f3ff4bbdf5ff52bdf1ff096464ff0f6f70ff45c2d0ff54cadaff57caddff61c3f6ff68c6f7ff6cc7f9ff66c6f9ff713e11ff774417ff83582aff97eee5ff458c78ff70b7a2ff64b199ff56a68eff0f756eff8be7ddff3bccbfff51c2a8ffe98e43ffe78c3fff755b51ff3da488ff39a084ff369d80ff0c7381ff43c1cfff2491a6ff146272ff1e6f5cff0f4b40ff745327ff6c4313ff8d234dff731441ff37b5e9ff33b6ecff32b4eaff3bb6ecff2d9e7fff289c7fff24997cffc42d34ff4ea9bdff4ea8bcff4ca6baff13887fff0b8078ff05716bff0d6260ff7a6924ff1a769dff186b90ff135b7fff165f83ff145d81ff69635effc32930ffc1282effd72b77ffdd2b77ffa21d58ff92194eff851749ff5f1a3fffaf2a34ff894f62ff0e8391ff0b7c8bffa28737ffa48a34ff9d8433ff8f792bff620e3cff1dbdcbff19becfff1abfd0ff26adc2ff2287b5ff1d7ca6ff4ea5baff4da7bbff4da8bcff318179ffe9c44ffff2c352ffda8837ffac946bff258bbdff33b2ebff32b3ecff34b6efff157dacff34a0d3ff1f84b5ffd08035ffe68a36ffe78c3effc33039ffc63c3effecc54ffff0c856ffefca57ff108699ffb97131ffe78e45ffe88f46ffe68f4dff07716dff59d1caff16958dff952f5fff953160ff671f46ff215166ff275e73ff9d9e63ff405751ffe0c96cffefc959fff1cc5efff5cf61ff41a28bff41a489ff47a78cff53cec2ff5cd4c8ff67d8cbff6ddacfff62c2f3ff69c6f9ff6dc9fbff4dbceeff4bbcf2ff5b4c3aff6d400fff774417ff85572aff2a9289ff289088ff44a489ff3ea587ff708f8cff8693a7ff42cec3ff983162ff165a7bff8a242aff8a242cffb2363eff145a7fff12587bffe13c7fff2ec3d3ff2cc1d3ff27bfceff31aeadff2d9d81ff2c9c7effc06e29ffe48a34ff972259ffdd327cffdd2f79ffbb2d6cff34b7f0ff2181adff2080acff1c606bff861d1eff851b1fff601014ff1dc0d1ff1cbed0ff1dc7bbff1dc7b9ff1bc6b8ff21c3b2ffaa8d34ff1a76a0ff196f97ff125b7fff186d97ff135e81ff13a399ff1bc7b9ff42827cff33afe4ff33b6edffd52d75ffde2c77ffda2d77ff681648ff18688cff0d8796ff33c7dbff1caec1ffa38735ffe4bf52ffedc554ff937829ff620e3cff36163aff14bccdff18bdcfff2b6978ff32b4ecff33b4ecff0e7f78ff45a6c1ff41abcdff317285ff327487ff52627bff954993ff30b4ecff33b6efff337487ff299b7fff3f3951ff32b3ecff33b5edff36b7f0ff785d30ffeb8243ffd9416aff971a50ff136253ff106770ff0d768eff14889cff0a8599ffe28a40ffe68b39ffe68b3bffa3662fff33c9bbff35cbbdff32ccbdff1975a8ff0e687dff0f758aff205268ff296075ff2e6a7eff20546eff23586cff2a6275ff2e687dff0c6d6eff0b7b76ff49acdfff58bef3ff0c5d6fff1d8f8eff3ab5aeff197a8fff3faaddff49baf5ff4dbbf3ff18628cff805020ff6d3f11ff704213ff754618ff8c5427ff5e1218ff6b151bff734413ffe0417effe14081ffe13c7dffde3a7bff20678dff145a7eff14577eff185a85ff746527ff135c80ff14577cff1d608aff38517aff2a6376ff4d93a4ff235266ff175e50ff0d4e3fff104b42ff4d4d31ff6a1114ffdb2e78ffdc2e78ff63173dff4b0c31ff450b2dff44112fff128798ff118697ff621214ff641116ff3a1e27ff21bbc5ff289a82ff186853ff105d49ff0e4d43ffecc54bff32b5efff30b4ecff2fb3ebff32b5edff30b4ecff1dc7b9ff1ac6b8ff1ac5b7ff34b4efff32b5eeffdd2b76ffdb2b76ffdb2b76ff4d6797ff17678bff1dbdcdff18bdcdff19becfff7dba8bffebc44dffedc34dffefc553ff620e3cff5d0e3bff463645ff327487ff2e6c7aff108c86ff0f8981ff0b8077ff1f7fabff206480ff317285ff327487ff306f7eff107e90ff0f8596ff4da6bdff4da6bdff4fa7bfff8f1f5dff95225eff864f1dff975a1dff7f6230ffdc3379ffdd3279ff93653dff146254ff158180ff28bed2ff2bc0d2ff2ec1d3ff4a0d33ff550d39ff5c103dff265853ff7f6a2aff927b34ff9c8634ff1f7dacff2ebed1ff30c0d3ff20536bff58abbfff59abbfff1d536dff4b8ba2ff60acc1ff367a90ff39ccc1ff1a908aff7a6828ff89742eff095c70ff0c5e72ff0d6c84ff177b91ff48baefff4cbaefff12587cff17608bff8f511effeb944fffea9350ffe9924cffe68f60ff5e1218ff6c161cffeb9047ffea8f45ffeb8d44ffe38d43ff460a2fff20688eff13597dff14577eff185a85ff746527ff40b9f0ff3cb7efff4aade5ff13597dff195780ff418b9dff115c58ff175e50ff0d4e3fff0e4d41ff114b3eff8b1f25ffc52e38ffc22d32ff601940ff480a2eff450b2dff45112fff911f5bff921d5aff7f161cff9d222bff5e1419ff269b7eff269b7eff289c7fff249b7eff239a7dff0f4d41ff238a71ff299d80ff0f5444ff259c7cff269b7effde2c77ffdc2d77ffdc2d77ff327386ff2c6a7cff673e64ff79245eff32b5edff32b5edff38b6edff1a836bffe2852fff59504eff0e8597ff0f7f8fff79144aff911a5aff911a5aff911a59ff60454cff367c8eff2c6c7dff2ab5acff16a399ff0e7f75ff33b6efff266f90ff327386ff327487ff2f707eff107e90ff0e8695ff0d828dff5b0e3dff630f3dff1c739eff1e79a8ff85501fff9f5f1bff76612bff727844ff9a8335ffa28a38ff176157ff166c5aff2b6490ff2cc7b7ff7b1f25ff4b0c31ff550d39ff5b103cff265a52ffebc654ffeec85afff0c957ff1d7aacff5a123bff295c70ff2c697eff638999ff54384dff155880ff55aac0ff55aabeff58adc0ff0f7877ff735f26ff7b6828ff88732dff2ea3bbff3cc3d4ff47c4d7ff1b8da4ff4eb9f1ff44ace1ff12587cff16618cffe38e45ff44baf1ff4db7eeff5f0f14ff5b0f13ff5d1115ff6b151bff736125ff716026ff836d2fff963064ff932c5fff206890ff156388ff196b99ff175c85ff826d29ff9e8137ff184839ff135b7cff135780ff15587fff105343ff0d4c40ff185e50ff0d4e3fff0d4e41ff124c41ff145c80ff15587fff9b4943ff77204dff661042ff661240ff511637ff225360ff8e5419ffc52a30ffc3292eff8a3846ff275566ff1d5964ff0b7a73ff249d7fff259b7eff269b80ff229682ff259b7eff0f676bff4ba8bdff4ba7bbff135347ff5f103bff500d35ff4fa6bbff4da6bbff61546effda2d77ff6b8abfff38b1e3ff289a7fff466f6dff5d0f3cff414860ff19becfff19becfff4590b1ff901a59ff911a5aff921a5affc1282fff50a4b8ff1ec4b9ff17c6b7ff17c6b7ff20c8b9ff288e7aff764755ff4da7bbff4ea8bcff53a6b9ff1bbdcdff1cbed0ff25b7caff921d5aff931e5bff1f719eff2283b2ff1b82afffd98839ff116351ff627a3effeac551ffe9c961ff299c80ff2e9d82ff825434ff78171dff811b20ff4d0c33ff691a45ff721f4bff479288ff30a082ff17608fff1d729eff1d7aaaff952a60ff285c70ff2b697bffc3383fffc73c40ff185781ff43b7ecff46b7edff227babff0e7775ff736024ff7b682cff88732aff947f38ff39bbd7ff39bfe1ff13567fff1b628dff53605aff40baefff40baf3ff704213ff7e4b1bff0b6260ff601113ff5f0f13ff651519ff6a151dffeecb6affefcb60ff846b23ff155c81ff115d89ff2c82a6ff3fb7f2ff3eb6f1ff3eb6eeff21535dffc1b463ff0d4c43ff3cb8f0ff3bb5eeff3bb5eeff0e5443ff0d4c40ff15624eff3a9e87ff339981ff144b43ff36b5efff35b4edff894436ffe68738ff9c3045ff88274eff56aabcff2d687dffe48934ffe6862cff296777ff255a6cff275465ff245a68ff1ac6baff1ac5b9ff1e6d59ff105f50ff168981ff0d7b71ff0e6762ff1d6b5aff187157ff0f5647ff901c58ff8f1c58ff814456ff91404cff1a6e5dff136754ff135b4cff207ba8ff1a719aff661440ff5e0f3cff4c4b69ff347487ff306c7aff257eaeff349dcfff2186b7ff126260ff107885ff854430ffb0303fff9a414eff2380afff217da2ff2075a4ff277da7ff5a6b8fff6f6342ff9f5e20ff366d80ff1680a9ff207ea8ffe58530ffe4862eff33b3eeff32b3ecff34b6efff34b6efff146353ff166c5aff233046ff22604cffedc654ff9e904dff8c5122ff78171dff811b20ff417b74ff922b60ff932c5fff157f78ff0c7b7cff3ab7edff3cb7efff40b7f0ff349d84ff275c6fff2b677cff327384ff096869ff0d7a88ff39b8efff39b8efff157d96ff0d7776ffeec753fff0c856fff0c856fff2c85bff7d4a1cff4d544bff15587fff1b628dff2a759effa66224ff8c4f18ffe98e43ffe98e42ff0b6260ffc83e44ffc83f40ffc63d41ffc63a3fffc8c584fff4c754ff3a5660ff3eb9f4ff3bb8f4ff39666dff16587dff18597fff1a628cff49b4ebff0f5544ff0e5444ff114e42ff704424ff5e1014ff35a083ff329d82ff309d83ff349f87ff2c9c80ff2ba5a5ff27bdccff0d6462ff711b43ffe4883effde8a37ff33b5ecff3faedaff1c7398ff165b80ff226c7bff4fa9bdff4da7bbff4fa8bcff4ea6bbff26595fff9b7e36ff246e5bff155f4eff23aea3ff1ec7b9ff1da99fff279e82ff289c7fff269c7fff10827bff0c716aff1d779fff19688cff299b7dff2b9d82ff299b81ff3ab2e6ff2c9fd1ff6d1746ff6e1144ff4c4c6aff3b7e92ff307384ff32b4eaff32b3ecff10788fff0c6f7cff0f7783ff631341ff62103fff297b9bff2380afff1e7ca8ff2176a5ff2684b4ff207eaaffe4852bffe6872fff3b6d89ff227eaaff207ea9ff1cbed1ff27acc0ff31b4edff176153ff196858ff176d5aff299b81ff2a9e83ff3a283aff166353ff1b6a5aff276a4eff8b5221ffc33538ffc7373bff326b72ff3a9984ff35a085ff167d76ff0e7e7fff551238ff5b133aff31677bff446367ff54a8baff53a9beff30768cff0b6668ff137a79ff774419ff874f1dff2ac8baff2ecabbff3ec6bcff2ecabbff1d9088ff6e4014ff7e4a1cff4d544bff165982ff1d668eff2875a1ff704014ff7e4a19ff826f2dff60151bff0a6360ff0b6162ff38798aff58abbdff58abc1ff9d612dff9b5d29ff325a69ff208f84fff0c856ff3eb6eeff3db8f0ff3db8f0ff0f6461ff126262ff3d9f87ff389f83ff39a086ffec8c40ffcb5346ff65725dff4b9ba4ff348eb2ff828c61ff826823ff145b81ff0f716bff0e6261ff9e235cffdc307bffeec54dffebc454ff4d8769ff1b7399ff135c81ff30a9b7ff1cbfcfff30a3dbff39b2e9ff8c5b2aff7e4d19ffecc851ff226f5dff145f4eff104d40ff32bae3ff35b6e9ff9c8940ff426143ff50a9bdff13938bff0d7973ff1e759eff1b678cff35959dff51a9c0ff26bfd0ff23bed2ff22aab8ff475a59ff97255bff901a50ff4da7bbff4ca5beff2f6485ff8c5422ff198898ff20bbceff28bbc6ff631341ff62103fff1b8698ff33b4efff32b3eeff2fb4edff2fb4eeff33b6ecff5c1340ff63143fff226f97ff2380adff1f7da7ff1c889dff791a20ff861c22ff146053ff196858ff156e5aff77191fff822024ff422c40ff166353ff1b6a5aff27694dff8b531dff975d21ff0e7889ff227d91ff2e6a7eff157774ff167f7cff128988ff942d60ff942d60ff31687bff575971ff834e1dff7e3c28ffc23842ff27516fff22a4aeffdc8b34ffe88b36ff1b807aff53a9baff0b6063ff177271ff1c8081ffe28a3fffe88b37ff2c4e5aff2681aeff2784b1ff8a272eff764315ff844818ff816e2eff7f3725ff39c8baff1d8e88ff36c9bcffc14346ffb54046ff511a18ff682d26ff195c81ff195a80ff2c6992ff255166ff1d587cff235463ff1e938bff35c9bcff1e554aff20667fff338ebaff1c5c88ff32acbcff3db7c7ff1b6d6fff57acbeff55aac0ff197b76ff09676bff2ac5b6ff21c7b6ff2b5a72ff0f766eff0f6561ffaf9234ffd1af57ff3db5eaff31b6ebff60161cff5c181dff1d4d48ff3ab4e8ff965920ff7f4d1bff694b2eff2a7663ff2f9d81ff0b614bff1f2839ff118078ffa18936ff426548ff14634bff0c7987ff34a5dfff39b8edff3db7efff0e7971ff55b2dfff3eb8f1ff237fb0ff198d89ff15847affdc387affde347bff217eb0ff207ca5ff27688cffe4882fffe6872eff2278a2ff872225ff941c5aff921d58ff198992ff0f818eff1a6b58ff2778a5ff2581aeff278fc1ff718dc8ff86205fff20bdcfff2fb4e7ff209cc2ff7b1f24ff7a1a20ff861c22ff359487ff289c7fff279e7fff78191eff872327ff423851ff2e9c80ff2d9d81ff638656ffe08a3affe48c3aff54a9c1ff55aac0ff5eabc1ff37cabdff37ccbeff34b5b0ff3d2b4bff53a9baff52aabcff866584ff834e1dff8f5621ff34bed0ff35b5e4ff39b6eeff106366ff31c6baff38ada7ff117978ff0c5f61ff1e7678ff198183ff5e1417ff6b181dff438999ff35788bff1e7c7cff2c7caeff5a1c2aff736126ff826f2fff6d4016ff7a2523ff6e1840ff5d1314ff60181dff48102dff45102eff4c1233ff2a84b3ff3081abff255364ff255166ff18597dff467f93ff488292ff195548ff114d3fff3b2740ff501132ff295965ff4b4962ff731c4bff0f6864ff0d6160ff614931ff0d6661ff42ccbeff2897a1ff175c84ff2d5560ff0f766eff0d6460ffbf333fff425158ff621418ffc63036ffc42f37ffa8333dff451431ff8c782cffe98831ffe48734ffb39255ff216958ff20574eff6f4570ff3e968eff28c7b8ffa38835ff416b64ff399a8aff2aa3a3ff9c242aff801920fffab977ff127871ffc43e4bffc43c42ff297eaaff3bcac1ff32ccbdff745156ff841d24ff3eb6efff36b5efff30a3c7ff13808eff2480afff1e79a2ffc12d34ffc02b33ff992055ff4a6a86ff136f6aff1b6c5aff2977a8ff2581aeff1e7a9eff6c606dff1c859aff158393ff25bcc9ff1fbfd0ffb23037ffc02d33ffc42d33ff138193ff85688fff267182ffa73944ffb9323dff107888ff751a20ff744a78ff9c7f37ffebc856ffecc95aff806332ff167e7dff198986ff369f85ff3da18bff62204bff933160ff106578ff1a8298ff366f8cffe58a39ffe58a38ff217d91ff1e638cff2072a2ff1f648fff2876a4ff7f4d20ff91592bff3d778aff5a181bff631a1dff882328ff882327ff7c281bff155f5dff1b7d7cff174c42ff962658ffaa704fff567c74ff714013ff6a1a39ff6e1b43ff6d4855ff7a2e39ff551337ff662145ff672045ff1a5d7eff195a7dff255364ff427a8dff195b7dff5e5a52ff38948eff3f928fff6c8d8bff1b5b81ff215b83ff275765ff494862ff6c1d44ff37768dff768897ff66492dff38a79eff3dcbbaff571234ff4b1132ff21698cff165d82ff2b2136ff146771ff306b79ffc3303aff384a3aff8b3d32ff693141ff461431fff1c551ffecc64fff7c764bff8b762fff2c9b82ff2f9d83ff3082adff1d688dff3b7684ffebca5affa38d42ff552453ff10857bff12736dff2179a0ffa88d3cff2881abff862428ff188699ff187784ff555e46ff998231ff148983ff841e24ff7a181dffa28a37ff1c8898ff12808eff39afe2ff669eceff821c21ffb18448ffc03c72ff6c1c47ff249d7fff299b81ff2a78a8ff2681aeff1f799fff326f7fff29b8c6ff20a2b1ffa05f25ff379bcdff407d8dff2477a5ff2b89bbff48638cff972a5cff157884ff0d8484ff8b2253ff147a8bff781a1eff1e73a1ff2575a3ff862051ff952355ff826532ff157e7bff168985ff35c2d2ff126275ff15798dff195d84ff2174a0ff1d638dff20729fff225a71ff187184ff207e91ff175a83ff2877a4ff206590ff2677a4ff7c4b21ff905a2bff1e7072ff126679ff862039ff2b5c60ff28707aff306073ffa88e3dff316d4eff20715eff246f60ff968138ff6e1d44ff5d181fff6a1940ff6d1c43ff215e84ff19577fff1d6690ff277260ff29715fff185e80ff165a7eff407b8cff611619ff724418ff6f431cff6d1940ff1b5b7fff702442ff195a80ff215b83ff275765ff4b4e6bffcd5489ff1e5a83ff69163dff674829ff174f42ff215047ff146270ff195f70ff2d7398ff1c5b80ff4a1630ff166771ff306b79ff275666ff2f493aff984735ff6a2d40ff461430ff8e214fff731b44ff7c774dff8b762fff766634ff167d75ff369fd1ff42b7e6ff57abc3ffa48b3aff85702bff761c45ff13857dff10726cff2178a2ffa88d3cff74bfd6ff86272cff208aa2ff1a8d9bff5b5b43fff2cb64ff1a8493ff217885ff2c7981ff5d1639ff7f6134ff31b9e1ff3cb5f0ff9f5b2cff975725ffa28a39ff26715dff651e45ff2f7aa6ff227ea7ff32a0d0ff34b5ecff35b6edff35707eff257eacffa0602cff995b24ff9d6023ff815029ff2476a1ff177c8fff256c7eff96476bff167788ff22c6b5ff8e2153ff147a8dff97823cff2073a2ff2575a5ff862151ff942355ff86633cff287cabff915624ff2f4b4cff0e6776ff35c1d4ff1b9bb0ff29799fff1b628bff2074a0ff215870ff238b9aff22899bff175b84ff2777a5ff2b83aaff26859cff8d5124ff965c2dff962b4cff25778fff7f1d4aff146264ff177372ff60181eff6f421cff75502eff6c1940ff78234bff775f30ff6d1a41ff7e242cff6b193eff6d1b42ff24618cff462646ff6b1e44ff471531ff4d1c39ff1a5449ff175b7fff5c161dff19597fff6f4517ff6e411cff6b183eff1a5a7dff70243fff1a5a7eff245c83ff275865ff265873ff185b80ff1e5c85ff69173dff66492bff174f44ff225047ff4093a9ff2a94a6ff307599ff1a5a7eff49152eff146574ff316b79ff255666ff174f46ff154f42ff46566cff691c22ff8f2254ff761a45ff807746ff8b762eff756833ff177e76ff156561ff5a173bff927e33ffa78c3eff86712aff7f1c49ff67d8d7ff70dcdfff2682abffa88d3cff8b7732ff882529ff1f759cff188191ff273d55ff237ea6ff25a1b0ff1a98a7ff147d8bff5b153aff9c5d22ff3f706aff1d6c57ff9b602fff985b26ffa48937ff25725fff661f46ff317ca8ff227ea9ff237aaaff287f90ff1b7c8bff357080ff2680adffdd8534ffbc6b2dff9e6126ff874f1cff2275a0ff167a8fff156e7eff206859ff156e67ff1a798aff8a2754ff227b8fff97823cff2074a2ff2476a3ff882353ff942355ff86633dff2c7eabff905622ff304b4aff1a807dff7d682dff947e37ff571e3fff2e81aeff3184b0ff6f745dff21709aff26899bff238a9dff1b648eff2875a3ff681c3fff8d3056ff326957ff84511fff1a5a82ff1f6d9aff116163ff177474ff60161fff6f421dff794e30ff6e1840ff7f2a54ff756030ff836d33ff275569ff48788dff185980ff23608bff6b3e5aff992d5cff48132fff4f1a39ff17646eff24686aff6c6332ff7b6b37ff754619ff6c421dff6c183dff185b7dff6e2542ff1b5c7fff255d84ff285966ff2a596eff185b80ff1c5b83ff69173bff776144ff174f44ff225047ff5a2525ff60191cff307599ff1a5a7eff763a56ff16737eff326c7aff245565ff176c68ff146762ff42556dff691d22ff2e5042ff73451bff65242fffe2b56bff417655ff15857dff126764ff5b1539ff927e33ffb69b45ff9c8433ff7d1b48ff287197ff4096beff973265ffaf3565ff871c49ff8a272cff1f759cff198293ff263b55ff257da6ff1e6f95ff9b5b1eff157e8dff5b153aff9c5d22ff40726bff1b6b56ff36748aff947d32ffa38836ff267360ff682047ff347fabff227ea9ff227ba9ff2c7e8bff1a7c8aff357082ff772c13ff7d8349ff237faaff945923ff864f1eff2275a0ff167a8fff148594ff2b927bff197c75ff1c798dff187487ff237c8eff6c5530ff2074a2ff2476a3ff852454ff952456ff87643eff2c7eabffa6652dff2f4947ff1a7f7dff94532dff792028ff571d41ff1e638eff2574a2ff6a7561ff21709bff295568ff397287ff1e638eff29779fff581c3eff206a78ff327a72ff845020ff236a93ff2473a2ff2a74a1ff71441cff60171aff184f45ff205f50ff275264ff2e5c73ff716028ff826f31ff2b5468ff4a7b90ff1a5a81ff24638aff166363ff5e181eff622b44ff6a3051ff1c587eff13494dff706229ff7e6b30ff746128ff285464ff69173cff185b7eff6d2743ff4c90b4ff4683a7ffa2bfc3ff9fbfc9ffa1b4c4ff5c1517ff481130ff106563ff60181aff783d41ff592423ff60191cff2b7598ff1b5a7eff77481aff15747eff326b79ff245565ff176c68ff146762ff42556dff681b1fff2e5042ff70461bff6a1f41ff541737ff18746fff156677ff195b49ff5a1538ff907c2fff177e78ff912050ff7b1c46ff3484aaff1d7094ff9f3761ff368784ff631c44ff8a272cff1f759cff18828eff263c55ff257da8ff1e6e90ff9b5b1dff147e8dff7c2523ff9d5c1fff447771ff1b6b56ff327388ff978035ffa38835ff178390ff65224aff3a80a9ff227ea9ff198696ff308f84ff377387ff337080ffbca045ff8b9055ff2580adff945923ff9d5e23ffa06331ff137a8dff158594ff296d8cff167c90ff207a8eff197387ff217c8eff6c552aff1f91aaff1d7f97ff6e5a42ff8c5525ff88643cff2d7eadff721c17ff2f494aff781e21ff9a562eff822226ff683356ff1b628dff2574a2ff677460ff21719cff275668ff3b7388ff1e638eff2777a2ff591c3eff216b78ff207d7bff5e6845ff887339ff547171ff2a74a3ff75441cff61171bff184d43ff205f52ff265264ff305d74ff74602aff827033ff2b5468ff4d7c91ff5b5560ff365d7aff227785ff6c461fff704421ff20658aff1c6188ff164d52ff716129ff7e6b30ff746229ff4d777fff6c163cff185b7eff702543ff6d5140ff45132eff776628ff73602dff67161bff5d1618ff471031ff126463ff60191cff7a3e44ff58201bff1e5e7fff2b7798ff1b5b81ff76471aff724728ff326d7dff255767ff146967ff146762ff47546fff671a1fff325151ff891f4bff671f40ff531739ff16746dff167684ff1b5a4aff3c4b66ff907c2fff1a857cffad285aff9e245aff2e83afff1d6e94ff275e4fff39958fff651d45ff5c122aff17818dff188290ff391830ff8d561fff912154ff96313dff137c8bff7c2622ff9d5c20ff4a7b75ff1b6b56ff347284ff9d8735ffa48a34ff148291ff66234bff3b80a9ff237ca5ff1a8694ff9f1e5bff911b53ff65728dff1c6d5bff227663ff1f8499ffc78c44ff9a8767ffa0622dff147a8dff158692ff2a6e8dff197b90ff21798eff963864ff2e79a5ff6d552dff13807eff147d79ff865224ff8d5525ff89643cff2d7eacff701c17ff2c4a4bff791c24ff9c592eff27719dff2b5d73ff1b628dff2573a0ff877436ff95823aff28556cff3b7386ff1e638fff2575a4ff21628eff216b78ff1e7b7aff5e6a47ff877339ff927352ff6f2024ff72431bff87501fff174e43ff1e5f52ff275364ff316073ff4a2835ff285568ff295568ff4e7d92ff346c81ff246080ff226189ff6a461eff714521ff692146ff156560ff124c4dff706028ff7e6b30ff73612aff54767aff68173cff185b7eff702543ff695141ff461430ff75662aff73602dff451432ff421b38ff481331ff126464ff62191cff642a30ff452228ff1c5e81ff77692bff2b5758ff764719ff724728ff681c40ff2d535fff156b65ff146764ff47546fff6a1a1dff6a223aff881f4bff671e42ff5e4269ff426379ff187583ff1b5a4aff3c4b66ff907c2fff23676fff94663fff957e31ff3183acff1d6e94ff275e50ff35968fff651d46ff521334ff17818fff188290ff3a1931ff905722ff932150ff9a2254ff885385ffef287cfff0297bfff0297bffe12d7eff7f4a7effa68743ffa58a38ff12828fff672147ff3a80adff237da9ffa98f46ffde2d78ffe3317cff641841ff576a80ff1e6993ff1e8293ff9c8538ff257e91ff9d612cff147a8dff158692ff2a6e8dff197b90ff21798eff963864ff2e79a5ff6d552dff13807eff147d79ff865224ff8d5525ff89643cff2d7eacff711c17ff2d4a4cff7a1c22ff7c252bff28709dff2b5d73ff1f638aff2376a3ff877235ff958139ff295669ff3b7386ff1e638fff2575a3ff943f65ff336578ff176675ff5e6a47ff877339ff927352ff702125ff72431bff87501fff174e43ff1e5f52ff275364ff305e73ff4a2835ff285568ff295568ff4f7e93ff346c81ff246080ff226189ff174e41ff6d4824ff692142ff156560ff124c4dff706028ff7f6c31ff73612aff527579ff69183dff175d7fff885251ff605446ff6b411bff786526ff72622fff461533ff3e1c38ff481330ff126463ff782248ff7d1741ff831843ff8e1c4bff796a2cff2b5758ff774719ff73482aff681d41ff2b5361ff146b65ff156863ff46556eff6a1b1dff6b233bff89214dff692043ff1d6183ff1d7e8cff197786ff1c5b4cff3d4c66ff927e31ff22696dff94663fff957e34ff3183abff1e7093ff2c7060ff399690ff581a43ff961b54fff32879ffee2a7bfff12979ff8b497bff922151ff962453ff267ea9ff892227ff831f23ff299acfff056e99ff066b92ff046c94ff1c6c58ff1d6c57ff682248ff3980adff247faaffa78e45ff2d8e83ff246a69ff641841ff5b6a82ff287fa9ff1f8394ff9b8538ff257e91ff9c622cff157b8fff158595ff2a6e8dff197b90ff21798eff943964ff2d79a3ff6e552aff15807eff167e7bff875225ff8c5523ff85653dff2c7eabff731d1aff912551ff781e25ff7b252bff28709eff2c5c73ff356c81ff2873a2ffba9a38ffaa8b2dffa4862cff3e7288ff988142ff943d68ff933e64ff326478ff186273ff5c694aff877339ff927352ff6f2125ff72451cff875221ff1a4e44ff206052ff186468ff32777dff482a3aff295667ff2b5669ff487b8fff306c82ff2a6382ff236089ff75632eff6f4724ff682545ff1b6665ff154d4aff75632aff1a4e46ff76622aff547479ff69183dff1d5980ff71461eff605446ff6b411bff6e1d40ff681f43ff226371ff1e6071ff70461dff457280ff891a4bff891a4bff8c1b4dff901d50ff82643aff2b5758ff796830ff6e2044ff651e44ff285765ff663a5aff216082ff206184ff245a7dff701f42ff8b234dff692144ff24688aff1e7f8cff32707eff1e5c4cff3b4d65ff927e31ff226a6cff966943ff9b8139ffea2b80fff0297bffec2b7bfff62779ff3a6d97ff1e6284ff1b7873ff1c8190ff391c32ff1e717bff932553ff962654ff2982adff872329ff239ddbff26afebff2ca4dfff08729fff1074a3ff1b6e5aff1d6c57ff662045ff2d7ea8ff35798fffa68d43ff2f8d87ff236a68ff651b41ff596a81ff2f7fafff208394ff9c8538ff287d92ff3b7270ff157b8dff178595ff2b718eff197b90ff1f798dff784c72ff2c79a2ff70552eff157f7cff177c79ff137a8dff8d5622ff85653fff2a7eacff731e1bff922650ff781f25ff7b252bff28709eff2c5c73ff346d81ff2674a2ffb89640ffcead42ffcead40ffceac43ffc4a643ff732047ff903b60ff326478ff2a6e7fff1e6768ff2e7970ff491933ff702228ff73451dff885322ff1a4e44ff216054ff176467ff207877ff4e3241ff295666ff2a5569ff49798bff612225ff286183ff25618aff72622dff6d4724ff6d6457ff325b6fff184e46ff1d5b80ff1b4e46ff74632bff52757cff6a193eff1e5980ff71451dff605446ff6e4421ff6c244dff614a6fff1b6571ff1e6073ff72451fffb04071ff981d55ff981f56ff981d55ff971e52ff982550ff295758ff786830ff701f44ff671e44ff285765ff653958ff216081ff247096ff235b7eff712143ff8b244eff692142ff276a8eff1e7f8eff347080ff245c4effee2a7dffec2a7cffef2a7dfff0297dffca7252ff76886cff25759bff28715eff2f948cff237299ff1e6488ff1a7873ff1d8190ff341b38ff20707bff932553ff962755ff982755ff912b32ff2ab2f0ff25afebff27b0ecff7cdbfeff74988bff1f6d5aff1d6c57ff661f45ff2b7ca7ff397788ff3c5c67ff2b908aff256c6aff651b41ff5c6c83ff992957ff228495ff893137ff257d8dff208796ff157a8eff178594ff2677a1ff197b90ff1f798dff377084ff2c78a3ff705630ff177f7dff177d7aff13788cff8d5622ff85653fff2a7eacff6c2122ff792c4fff661f22ff7b252bff27719dff2c5d71ff346e80ff336b80ffb89947ffcead40ffcead40ffcead40ff98813dff742147ff90385fff366479ff326a87ff206567ff217b7bff471931ff6e2324ff2a648dff236b98ff1a4e44ff206054ff186466ff217978ff503242ff285766ff2a5569ff48798aff622426ff296282ff26628bff72622dff704a27ff6f6357ff335c70ff184d43ff205b81ff1e4f45ff216177ff2d5e7eff6a1a3eff1f5980ff71451dff5f5244ff6d4321ff2e5e81ff215e81ff1d6471ff1f6275ff71451fff295d81ffc42b6affb4346affa6225cffa12059ff897835ff285657ff77682fff722145ff692047ff285763ff623756ff226081ff2981a3ff2b6583ff722445ff8b254eff6a2241ff742729ff20808cffee2a7bfff1297aff782a3aff5087a7ff3e7f7dff327ba0ff9c853bff717f60ff27769cff25758aff2d918aff2979a2ff1f648aff207a74ff1d8291ff446981ff23717cff932553ff972755ff972956ff87292dff7b272bff27b6f2ff39bcf8ff56b4d5ffa68a3dff258376ff1e7d75ff6a1c44ff2b80abff3f7d8eff3e575fff298f8aff3f827aff651d42ff5d6e86ff992957ff22889cff8b3136ff267c92ff208796ff187f8cff21929cff2a7ea4ff197e92ff21798eff377083ff2c78a4ff8b6435ff167f7bff157e7aff187a8dff8b5421ff9f6037ff671b40ff622226ff7b2d51ff7e2c31ff2e7498ff28729cff2e5e74ff346c7fff36697dffb99a49ffcead41ffd0ae3fff2a8685ff998140ff2a8684ff672526ff356479ff25608aff216569ff247d7dff945b31ff702226ff29648dff256b98ff5e504fff266b97ff1a6566ff207876ff215b82ff2d5765ff2a5669ff427887ff602528ff4a7065ff70254bff786a3bff6d4e28ff706155ff325c70ff194e44ff205b81ff4a1f39ff216376ff316081ff691b3fff1f597eff72461dff605446ff6d4321ff2f6083ff315b66ff1c6571ff1f6275ff704828ff776a32ff77475cfffea4c2ffd32e74ff72264aff8a7938ff26595bff796a31ff734825ff704826ff2b5864ff62324eff276e69ff325f68ff39707fff742547ff4f2238ff365d66ff772a2bff20808dff286c7aff2e727cff752a41ff75333aff648459ff2e7ba3ff9d8639ff717e5eff27769aff206876ff3984a6ff2979a2ff206487ff1f7874ff1e8392ff238897ff23717cff932653ff972755ff982a58ff882a2dff7c272cff377789ff1e7d8dff9e602aff5e1d3dff248174ff22857cff842227ff7e2428ff27838fff602743ffa0632fff8a5f3bff651e43ff913058ff982a58ff7a7547ff892f34ff277c91ff238897ff3d7a8cff20817fff258584ff187f90ff1d798dff367083ff2977a3ff8b6536ff98833cff1e7288ff1a7a8dff8e5522ff836545ff8a2754ff622427ff7b2f50ff7e2c31ff2e7598ff28729cff74292aff265a50ff4c2238ff5f2645ffd6b84cff22817fff288482ff8d5929ff2a8383ff672627ff346378ff286088ff308488ff2e646eff35655aff722327ff2a648dff256b99ff62514cff286d98ff1b6569ff1e7878ff215b82ff37779aff417a87ff2d7978ff494d48ff446c60ff762548ff33586bff744e30ff6e5e51ff315d70ff1c4e42ff215b80ff481d32ff226175ff336180ff235f81ff205a7fff714821ff6e5246ff6f4422ff316186ff365d69ff1d6471ff1d6171ff6f4627ff776a32ff2e564eff256874ff286285ff4f2238ff8f7939ff425865ff796933ff744a26ff6f4827ff2d5766ff5e2e48ff276e68ff31626dff38707fff76274aff512339ff385e69ff782b2cff2a8793ff256d7aff32747eff76283bff85333cff404d51ff2f7ca5ff7e7f51ff747f5eff27769aff23697aff3883a5ff277ca0ff226c8fff217b74ff2b6b8dff258897ff25717fff972755ff9c2858ff982c57ff87292dff7e292eff75577aff966131ffa1612cff602040ff248174ff268782ff822329ff81272bff27838fff5f2942ffa06330ff8b613fff327da4ff8e2e57ff982b59ff797444ff893034ff517b89ff2991a4ff34697dff208280ff218c88ff8f7839ff1c798bff366f82ff2e7fa9ff986328ff97823bff1e7286ff187a8cff1f768bff1c7b8eff8b2654ff622629ff7d2f52ff7d2c31ff2f759aff27709eff76292cff285b51ff4f2135ff5d2542ff266791ff2a79a4ff268281ff8e582cff2c8484ff66262aff346378ff286188ff2b8383ff306771ff37665bff722327ff29648dff276d9bff63524dff286d98ff2e749eff295950ff2d6893ff376c77ff32777eff2c797cff62414fff756236ff762548ff315668ff744e30ff6c5c4cff305c70ff214f45ff245c81ff4a2035ff226175ff326180ff216081ff225a7fff295769ff4a273dff6f4422ff2e628aff365e6bff786d3bff8d585dff714929ff776a32ff2d554dff2d655fff2a6484ff502339ff917839ff435966ff776c34ff744a26ff6e4827ff2d5766ff5f3049ff266d67ff31626dff3a707eff4e2a3dff5e2842ff376069ff792c2eff2b8794ff256d7bff227681ff702847ff8d2f55ff404d52ff307da4ff496358ff8a7d42ff2c7ca4ff23808bff3883a5ff2b759bff2c9085ff24807bff87613aff278797ff25717fff642643ff317ea3ff992d58ff862a2bff7e2a2fff982d5aff986031ffa1612eff622240ff266756ff2a8793ff812329ff7e292dff3a7b81ff642b45ffa16431ff8c6241ff347ea5ff8e2f55ff972d5aff7a7545ff893035ff704049ff327195ff3f788bff22827eff228d86ff8f8041ff6c7f67ff366f82ff2c81afff747348ff98833cff1f7387ff187a8cff1e7183ff197a8dff8b2654ff622629ff803053ff7c2b30ff31779cff27709dff73292eff295c52ff782b2eff247172ff61304cff2e5869ff397083ff296768ff2b8483ff67282bff356479ff2a6289ff2a8382ff336b74ff38685cff722327ff29638dff276d9bff65534eff286d98ff2e739eff2a5951ff286691ff386d79ff68695dff3e6470ff5f3d4bff766334ff722945ff297271ff775033ff865a39ff325d70ff225049ff255d82ff492136ff226175ff366281ff307070ff325e6aff2c5665ff4d283bff286183ff2d6185ff335e6cff7a6e3eff8a5a5cff714929ff786b35ff2d554cff2d655fff2c6384ff53253bff762b31ff475c69ff776b34ff744a26ff704928ff2c5867ff602d49ff2a6f6cff396973ff3a6f7eff4a2c3bff4e273aff375e6bff7a2f32ff4a8a8fff247481ff277683ff6e2746ff8f2f55ff454e54ff317da3ff486358ff8f7c38ff5f9194ff2a828dff3b82a1ff2e749aff496c53ff8c5a31ff955e30ff268898ff23727fff662945ff3481a9ff2b8895ff288898ff2f82acff9a2c5aff996031ffa1632fff8f592eff266957ff2d8593ff812329ff802b2fff3f7a7cff652c4affa16430ff8d6443ff327ea5ffa59046ff988440ff7c7744ff883135ff75424aff327296ff40798cff21847fff249088ff2c78a3ff336579ff376e82ff376d80ff727148ff99843eff1f7486ff17798bff207083ff1f8998ff8d2753ff732c31ff912b51ff7b2b30ff31769bff822952ff73292dff295d52ff7b2d2eff287273ff63344fff336874ff3d6f7cff286866ff2b8483ff68292dff2c7677ff2b628aff317d9fff336a77ff306960ff71252bff296f73ff276d9aff65534eff2a6d98ff3074a0ff2b5951ff296691ff3a6f7bff616a5cff46636fff396886ff756535ff3a7573ff2a7171ff744b2cff784c2dff4d2f44ff214f48ff265e81ff492136ff226173ff35617dff377272ff335f69ff2c5665ff4e2b3eff2d6285ff2c6288ff396d8eff286081ff73304dff724a2cff786b35ff2e544eff2c6560ff2e6485ff57273eff583945ff426b7bff786b34ff734a2aff734b26ff2e5a68ff5f2c48ff2c6e6aff78673aff3a707eff4a2b38ff50293dff365d6dff793033ff632b2aff4a5e66ff932f54ff712847ff9e3a5dff728065ff337ca4ff496356ff907c3cff772d30ff2b818dff7a764dff78615bff8a2f53ff8f5b32ff956031ff278a99ff26747fff692b49ff3583acff2f8996ff278898ff2c7f8bff9a2f5bff985f30ffa16331ff925c30ff296d5bff318797ff812329ff812d30ff622442ff63314bff993159ff457283ff8d7a3fffa79145ff988340ff9b8f57ff883135ff834d37ff783758ff40798cff288395ff336f99ff3181acff336579ff376e82ff366d80ff62765cff9d883dff1e7387ff197c8eff207083ff238696ff256158ff712e31ff2a7c90ff2d6991ff32779cff80284eff742a32ff2a5c54ff7d2e32ff2a7172ff603851ff2a8381ff8d793eff2b6968ff2d8586ff5b4655ff2b7575ff71354cff825952ff307c8aff2b6a6cff485555ff2d7073ff3d4061ff65564eff2b6e99ff32739dff2c5850ff2c6690ff44717aff2d767eff4a6471ff3c6785ff786636ff3d7873ff2f7472ff734d2fff774d2dff4e3345ff266271ff265f83ff4a2237ff246276ff396581ff377372ff4c2736ff68393dff522c3eff49293dff2f5f81ff3c6e8fff2b5e82ff74314eff724a2cff7e6e3cff2d564cff325850ff316585ff5a2940ff593a46ff426b7bff786b34ff754c2cff724a28ff296184ff602e49ff2d706bff79683fff566475ff502b3cff5b4b5cff375e6eff7c3235ff632b2aff4b5d66ff933155ff722c48ff805534ffa38a45ff337ca4ff496356ff907d3bff7e302dff30838eff78774dff7e625bff8b2f51ff8f5d34ff955f35ff6a2f4aff5c2c41ff3c81aaff3882abff318896ff298798ff2e808cff9c315cff985f30ffa36534ff935d32ff3282adff318898ff7b4551ff9a4a34ff652745ff64324cff98355eff407586ff8f7b40ffa8924aff9b8340ff9a8f53ff5f374aff968347ff873455ff338587ff298496ff347098ff337fabff326779ff3c7386ff366d80ff547586ff9c8548ff1d7587ff248799ff207184ff258899ff915c2fff6a5f5cff2b7e8fff306991ff3178a5ff307d88ff3b6d82ff712d2fff7b3033ff297374ff25716fff29827fff8e7a3fff2d6a6aff2d8583ff347ba5ff843255ff71384eff835a54ff337c8fff2c6c6bff495556ff2c7072ff5c5053ff847761ff2c6e9aff30749fff817140ff4b293cff7d6b39ff2b6d6eff4c6673ff576676ff7e6942ff477a77ff2e6b6dff754d30ff774d2dff513647ff286372ff296778ff4a2438ff236274ff3d6683ff3d7473ff4e2937ff69373fff532f41ff482c3aff4d354eff3a7280ff744e32ff6e4450ff4a636bff375c56ff30574eff345a50ff6a3336ff582c3fff3a5e79ff337287ff7c7038ff754c2cff724c2dff296081ff632e48ff33706bff563041ff5e3046ff502f3fff5c4d5dff3b606dff853f41ff625450ff4b5e66ff933357ff722b49ff815635ffa48d45ff387fa6ff2e6485ff6c324affa88f43ff358490ff78784dff7e635bff8e3255ffa36536ff976139ff6b324cff5b2d42ff3f84abff3e87abff338996ff35929fff548e9bff9d355fff96693fffa16535ff96603aff3583afff377da1ff457c8affa7693cff662947ff65344bff97375dff3f7584ff907c43ffaa934aff338d86ff80774cff603c4fff988648ff883858ff2c8281ff318f8aff773836ff377ba8ff6a5755ff3d7687ff366d7fff5d798eff988448ff27817eff295c52ff237186ff278897ff8c584eff2a695bff2d7d8fff6d7562ff3178a3ff2b827eff3d6d7fff732f31ff7d3134ff2e7173ff287372ff2d8382ff8d7940ff326b6dff308485ff3678a4ff853557ff816353ff8f8158ff317a88ff327283ff4b5858ff2b7070ff707056ff888151ff306d9aff31759fff83713eff4b2a3dff742b4aff2f6d6eff4c6a75ff586877ff522e3fff4d7c7cff316b6eff765032ff7a4b2bff56394cff2b6374ff467683ff492539ff276276ff416883ff437879ff6a3d3eff6d3e3fff583344ff522e3dff533749ff3c7380ff764d32ff683537ff436672ff6f344bff437774ff375b51ff6c3536ff592e41ff2f6082ff2f7388ff82703aff734e2eff744c2eff296184ff366371ff36716cff573143ff385d50ff9c8d54ff5e4e5dff3d616dff783d48ff4f5e54ff4d5850ff963458ff71304bff825936ffa38d45ff3b7fa6ff2e6485ff6d334cffa98f42ff378591ff787a51ff56715aff517ba1ff3d857eff3d84acff6c3650ff5d3045ff4085aaff417867ff388b9aff4887abff64304dffa34d6bff366c5bff32908aff358a82ff3683acff3b7da4ff477c8bffa6683dff65536fff54789fff9a385dff457785ff907c44ffaa934dff338d86ff82784cff5f3b51ff998644ff893959ff8c3b3cff565063ff2b8482ff387ba4ff81472fff317b7bff32729eff443150ff9a854aff7b2d2fff285d56ff307160ff306f61ff68324eff2d6a5cff2d7d8eff707767ff3279a4ff2e837fff3e6e81ff8c5e3dff793b3bff4c7f9cff538ea0ff348987ff807e5aff33717dff36838aff377aa5ff853555ff7c6d46ff978145ff7c6750ff337384ff366a6eff317b7aff727159ff917e44ff456a89ff3275a0ff597f78ff4f2c40ff742f4cff306d6eff6d3336ff5a3647ff573545ff376488ff456c8bff775137ff784d2cff583f4fff2d6371ff477684ff4b273aff276373ff436b87ff4a7d7fff6d4142ff6f4042ff5d3849ff522f3eff543847ff386788ff3a6d7aff69373aff476875ff70374dff497b79ff395d54ff6b3737ff543542ff336383ff397b95ff754f31ff744e30ff744c2eff74364bff396472ff397470ff5a3446ff496b75ff446970ff567088ff336588ff773e47ff505e53ff4c5b54ff4382a6ff386a89ff4c83a7ffa58e4aff3980a7ff2e6485ff6b354eff583449ff3c8894ffa19051ff5b7660ff3e939bff3f8681ff3d85aeff6e3952ff603349ff4688abff457a69ff41929cff4c8aabff633450ff337463ff3b6f5fff714055ff92425aff40715eff8e3c40ff4d8190ff9d7053ff3d889bff3d84abff9a3b5fff6f5050ff8f7d48ffab944fff338d87ff857c4fff614054ff9a8748ff893b59ff8f3f41ff5b5467ff4f7581ff397ca6ff81482fff317c7bff33729dff473352ff9f894cff7e3033ff2a5e58ff307268ff573150ff68334cff2d6a5cff92613aff6c7970ff3d716eff308481ff436f6cff8d5f3cff7a3c3bff4e7e9bff4c7aa0ff8f3c5fff5083a2ff3b77a0ff396990ff49799bff853857ff7e6f4aff968345ff846042ff357485ff376c6fff327c7bff767560ff937f3fff5e434cff3376a1ff3d7c8eff4e2e40ff74314eff306d6fff6e3336ff5b3748ff583745ff376487ff476d8cff785339ff794f32ff5c4554ff2f6574ff477684ff4c2837ff744d51ff447190ff548487ff704549ff72474aff614450ff533241ff4d748fff366587ff3d6e7cff6b3a3cff4c6c79ff6f394eff52817fff3c6056ff6d3a3bff543745ff3e606bff3e7796ff775035ff3e6a8aff754e30ff73374cff3d6474ff407e77ff673d50ff4b6e7bff476b75ff5d7995ff573546ff7b4c41ff5b6d5bff3a6055ff3c716aff867948ff5087aaff3a5e5dff3e81a9ff856280ff6c3851ff5a3647ff3e687cffa88e46ff5a765fff3f777fff558babff4789afff3c8999ff5c797fff4b8aacff4b7d6dff9f6a45ff518db0ff693653ff337463ff3d7261ff74465bff95485eff447565ff8c3e40ff884c4affab704cff518eb6ffb1995aff9a3e5eff755663ff4c7883ffab9353ff368d89ffac9258ff813c3dff9f8354ff8b3d5dff904547ff5d586aff5e8794ff8f6141ff834832ff357d7aff348290ff41837cff9e8b47ff596c7cff366765ff387987ff883b5bff396c62ff3c9189ff93623bff6e7a72ff40726eff348683ff44716eff8f603dff7c3f3dff777e89ff4d7ba1ff923f60ff658091ff3d79a2ff864061ff956b7bff853958ff583b49ff594250ff866246ff367283ff3c678aff958857ff797865ff917e43ff32676aff36769dff3d6685ff503043ff77314fff306e6fff6e3839ff7c6b47ff593846ff3a6588ff486e8dff355b53ff3f606fff604b59ff356776ff527686ff663435ff7b545aff674e5bff7a928aff714b4bff734c4eff654b54ff543343ff547894ff3c6584ff40707bff6b3d3eff3d5d56ff406888ff5b8685ff3c5f56ff703d42ff573a48ff40616eff427998ff775237ff406c8dff765033ff753a51ff346a78ff47807bff68656aff557781ff4b7378ff617b97ff563745ff7c4d43ff5f6f5dff3f6359ff46706bff4c7180ff5789acff3d6060ff40708bff9b4e6bff5c6f8dff497c9bff426879ffa98f47ff7c564eff41777fff5f90b2ff4d83a4ff3f8d99ff5e7d7fff538eb1ff538174ff537670ff5490b2ff4588afff5a7975ff4e95a0ff794c60ff9a4c6aff687981ff904143ff915251ff948e82ff8b494bff635566ff9b3f62ff755a65ff528badffae9655ff6e888fffab9159ff814041ff6b3d52ff9d4e6eff9d4167ff625d6fff648b99ff966646ff7c3739ff367e79ff3a8392ff938149ff9f8a47ff427385ff3b677bff538fabff913c5dff42766aff3c9289ff93623dff737b77ff417570ff388a87ff497570ff8d613fff78484eff8c7974ff803c5aff8d5875ff668897ff40779cff407e90ffa27783ff883d5cff5c3e50ff5c4553ff876346ff8b425cff3e688cff968857ff7b7a69ff937f44ff386872ff38759fff416789ff523344ff865857ff7ca4aaff6f393bff7e6f47ff5a3b49ff406688ff486e8eff355b53ff3d5d6cff675361ff8d687bff5e7b88ff3f5e6eff845c64ff6b5663ff765036ff754f54ff7b5458ff744d51ff405d57ff597b97ff3d6685ff45707cff6e4143ff415f5aff446b89ff668b8bff3e625cff58727eff7e465bff406059ff477f9eff78543aff466e8cff775134ff763e54ff386d7bff99735fff684f5dff5a7b85ff82565bff5984a1ff5d8075ff8a604aff627163ff47665cff47716eff4f7383ff6090b0ff3f6160ff44708cff60687eff578babff4b7e9fff556570ffab914dff755659ff487a81ff6a97b5ff905354ff4e87a2ff638082ff5d91b5ff6f4255ff537872ff5a93b6ff488bb3ff737168ff5696a3ff805569ffae965aff944465ffa67556ffa28857ff418b9bff4c7b8bff65596bff9f8170ff77666cff4d8ab4ff42908aff984365ffac945dff804342ff6e3f53ff567995ff976542ff4f7787ff678f9dff98694eff3c6d63ff3d817cff388394ff948457ffb39e68ff457486ff518296ff3f7165ff8f3e5cff477a71ff3d6f65ff946542ff5e899cffa69358ff3e7a8cff4b7773ff8f6446ff577b7bff877b76ff456561ff5a707aff7691a2ff4a7687ff427f91ff7e4849ff94664aff556a57ff49707dff538576ff89455dff4f82a6ff988755ff496870ff7b8262ff446a89ff3c77a1ff446888ff513645ff907f50ff8db3b9ff617281ff85704fff5a3e4bff4a6582ff7b5742ff435b5aff596f83ff755e6bff977587ff65818fff415f6fff764156ff6a3f44ff784f36ff766573ff683b3cff795257ff82724cff6185a0ff416888ff47727fff46717eff827655ff476e8aff6a9294ff42645dff5f7b84ff4b6b7cff44605aff456b8bff7b573fff4e7694ff845a5eff794258ff447472ffa07d6bff867955ff476e8bff845d5fff6089a6ff65887dff8a6249ff647465ff49695fff4b7470ff4c718bff6b98b3ff446461ff47728fff646c7eff5e90adff5382a3ff5c6973ffa27961ffae9e6bff658c83ff719ebcff925857ff755160ff7d998eff639bbdff724758ff547973ff8594abff81b5b0ff915b58ff5d979fff866273ffad9758ff964961ffae785dff995a70ff5d6884ff4d7d8dff66858eff9c8675ff636e73ff518ab6ff4e8992ff4881a9ffab9560ff844749ff8a4a4dff587b89ff9c6a47ff4d7789ff6f93a1ff9c6d52ff6498bcff43807bff4d7b81ff644652ff4682abff6a3f50ff884649ff4580a6ff92435fff527c6aff438081ff956643ff508aadff744c62ff41798cff687470ff8e6649ff567e79ff575564ff466a65ff61737fff7d9babff4e7787ff4d82a9ff7d4a4bff924d6aff5b6c5aff477281ff6d9da7ff8a4760ff526e7dff60715dff3c5f5cff487481ff4a6c89ff437595ff476b8cff63667aff7f485aff99bdc6ff487f90ff774d4dff5d414eff8e7a5fff496d8bff5e4451ff5b7186ff7c6671ff486270ff6b8794ff426070ff784358ff6d4248ff4d6b84ff688ca8ff587c87ff7f6a65ff597e90ff467372ff5b7c94ff4d7681ff7c5d4aff827858ff4a6f8aff714c4fff4a665dff627880ff577793ff456359ff4a6d89ff59828bff715965ff877a57ff506974ff5e4953ff60849eff867c57ff4b708cff8b6365ff638ba7ff6a808bff667f84ff737b6fff6a8b7fff537d76ff4d728aff91845eff486861ff4a7491ff677175ff6790adff987a68ff5f6c77ffaa816bff657766ff719489ff885e5eff975c60ff785665ff63949bff9ea594ff568884ff618c82ff8e5355ff92c2bcff996364ff767870ff5b90afff558f87ff964b64ff567f95ff86715cff8d4a4aff527e8eff638a9eff4d978fff6ea9a4ff538cb2ff6c9dbbff94bdb2ffac9664ff87494bff8b4d50ff818d9bff9f6c4bff64a29aff537e8fff8f4a65ff6d9dc2ff99576cff6f706bff84484aff4682abff614a5bff89494cff9b8954ff438989ff597e6bff458082ff956646ff608eb3ff765367ff5588afff8aa2b1ff5583aaff5e8482ff55616dff6c525eff62757dff778fa2ff52798bff5384abff844a51ff935269ff626f5eff4b7585ff6d9ba5ff8f4962ff566f80ff5f7674ff8f516cff727662ff4e7293ff5c7890ff517e9fff725052ff7f4b5bff477b8aff4c7f8dff7a5251ff5e444fff8f7b64ff4d6f8eff5f4955ff7a5a45ff4f6963ff4a6474ff57768dff70494bff614a54ff6887a6ff6d8796ff7994acff5b7f8aff7f6f66ff63809aff537374ff5f7d90ff547987ff50708fff827859ff597d7cff72595cff4f6961ff516c67ff5c7c94ff588099ff4d6e8aff677f8cff745f66ff897d59ff5e717bff624e58ff827c70ff887e5cff50728dff645059ff688da9ff688a92ff608991ff598281ff81a4b1ff667e79ff54788dff718894ff7f9a96ff557793ff68767aff6f98b4ffa67183ff7a9b97ff816771ff5b776fff628882ff87b0baff6f5b64ff5d92b7ff63949cff6390adff5e7872ff6e8e82ff6c6274ff6791b2ffa97577ffa57171ff6093b4ff5d928aff984f66ff648a8fff8d735cff924c4dff548090ff668da3ff6d9287ff83b4afffc5a8bfff73a0c1ff905756ff6a8793ff4c8b99ff8b5050ffba9f93ff9c6e4dff5b899dff587a6fff90506aff7aa6c9ffb87b8eff84726dff5984a3ff6796b6ff4e8d89ffb27576ff9e8b5cffcbb8b2ff9d6b52ff8f6b5aff4b7368ff6a93b3ff7b5a6aff6d8fb3ff8a9286ff5786a7ff567c73ff659290ff708e9aff647a8bff848195ff5b736dff55756bff7f5559ff64928fff677466ff756268ff838c8bff936d54ff587180ff667b78ff91546dff7b8077ff62726aff59758eff577fa0ff775458ff815060ff6c5c63ff86a1adff7b5654ffa49595ff89715eff666980ff604e56ff7d5c47ff546d6bff4c686fff4d7191ff4e7381ff624e55ff6a8aa7ff72899bff7d98afff5f838eff7c7872ff68839bff77899eff71778aff68828cffa49387ff758374ff5c817fff59778fff526e66ff6a7e83ff60767fff799fa9ff987582ff8a7463ff85676dff828180ff68717dff66515bff715e64ff7490a7ff7497a1ff835d5eff927382ffbab9b7ff8a8d85ff6d8d8bff938077ff6b807bff82aba4ff768d99ff7a939fff6589a1ff6f7b7fff845e6aff9e796eff84a298ffa16175ff6a9f9aff759ab4ff93bac3ff69897fff6194b7ff6997a2ff6793b1ff7e5a65ff7e998eff736574ff7f6471ffc49d98ff976869ff7f737aff65908bff9c526bff6d8e98ff915f78ffa07655ffaf897aff896f79ff6e847bff93c4c1ffcba3b1fffefefbff935a5aff7b596aff508c9cff8d5658ffd4ae9cff8eb7c2ff5e8db1ff765566ff94546dffb37686ffca949fff93586eff5787acff5d87abff647f7bff7c9587ff6d9794ff765765ffa69e9fff946962ff5988aaff818c84ff537fa4ff975870ff898a7bff5e8e8cff5e8179ff637b73ff5e82a1ff698191ff8b889cff607774ff5b786fff73737dff6c9191ff69796bff8e6061ff8d7f6dff5c7570ff5d7786ff6c7f7dff865a6cff5d87a8ff658cacff5d82a2ff978868ff8f705fff805365ff705f66ff8ea0aeff7c5a5cff7f847fff8b7365ff7a5a5bff7f6060ff7b8f99ff59716eff546d67ff4e7777ff5c7887ff6b5359ff86766cff617472ff7f99b0ff5b717eff6f8c94ff698099ff8497afff6d8396ff82929bff9f9d8aff718780ff628584ffa09885ff728ea2ff6d8598ff75878dff8aaeb8ff7f99aaffa78873ff8c8381ff6c7e85ff627d87ff808d92ff756268ff91707aff7499a2ff936665ff72666bffc0b6b6ffa5808aff967a7fffa6897dff708581fff7fdfaff9a6c6eff7d949cff6d8da6ff997b7dff896673ffa88478ff93ada4ff9aa6abffe9f7f8ff968676ff779189ff8f9a7dff85656cff9b988aff6d96b1ff9e6b6cffcfab9aff68a098ffa36774ffbca7a3ffab8878ff94625fff927579ffae9875ff62887dffa69c7cffaeab94ffb28395fffffffdffaa8085ffb2929bff9fbebefffffffdff6b93b3ff8db1ccffbeb69bffa27785ffd1afa7ffa3cbd7ffe6bcc6ff6193a0ff9388a3ffa6989dffb5957dff858ca8ff5f8278ff6690b1ff6c8580ffc0b491ff9c6675ffa08285ffa89a9bffa1887aff5d89adff858c83ff5880a2ff6187a5ff927477ff65908fff708d8cff677f77fffdfffeff6d797bff8e6365ff937280ff709994ff846a73ff808584ff6d807eff916767ff668786ff6c7f79ff888793ff738083ff65817eff8e818eff6a859eff6a87a1ff897270ff8f7562ff7d7e83ff83676fff8b9eacff7f6060ff707f7eff638283ff648c8aff826666ff79858efffbffffff5c8381ff896b5cfffffffdff887577ff92877ffffffffdffeef4f6fffafdfffffffffdfffefffdff816b6efff2f5f3ffffffffffb7b19dfff9fffffffcffffff988889fffffffdfffffffdfffffffdfffdfffffffffffdfffffffdfffffffdfffefeffffeaf4f9ffc9c8c6ffdbd2cbfffffffdfffffffdffbb9d9bff7a6d6fffbdb3b6ffa3828cff9f7e81ff78a097ff95b3b1fffffffdfffffdf4ffd9c4b6fffffffdff7e978fffb08b78fffefbfbff967a78fffefefdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfff8fefafffefefcffb4a583fffffffdffac8d7dffc198a5ffd5e6e6ffa98a7bfffffef4fffffffcfffffffcfffffffdfffffffdffa98688fffffffdfffffffdfffffffdffbdcfe0ffeaf7fbfffffffdfffffffdfffffffdfffffffdfffffefdfffffffdfff8ffffff999da2ffb69b86fffffffdffa5989dff6b93b3fffffefcfffffffdfffffffdfffffffdfffffffdfffffffeff658caeffa29574ffdfedeeff81a2a9fffcfffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffa5908effc1d4d4ff926b6dfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffa69e8ffffdfffffffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffc3a756ffd0b560ffe2c36cffeccd75fff3d47bfff7d981fff7d97afff9da7afffbd87afffdd678fffcd678fffcd678fffdd678fffcd577fffbd676fffad575fff8d372fff5d36dfff4d26cfff4d26cfff2d169fff2d167fff2d167fff0ce65fff2ce62fff2ce63fff2ce62fff2ce62fff0cc60ffeecb5ffff0cc61ffefc95dffeec85affeec85affeec85affeec85affedc759ffedc759ffedc759ffedc55affebc55cffe4c66aff7e7b45ff3b5e60ff23617eff236184ff206084ff206084ff206084ff216185ff1e5e82ff1e5e7cff245e7aff2b657eff597e95ffbfd3dfff8a2151ff8b2154ff931f54ff97295dff9a2b59ff9c2e59ff9d2f5aff9e305bff9c2e59ff9b305aff9b305aff9c305bff9c305bff9e335eff9e335eff9f3461ffa03560ffa03561ffa13663ff9e3763ffa43a67ffa23b67ffa33c65ffa53d66ffa13d65ffa23f68ffa34167ffa44266ffa24467ffa54569ffa5466affa44768ffa54967ffa84c6affa94d6dffa74d6dffa85070ffa75172ffa2476bff871e4dfff5e6e7ff726233ff736530ff75632cff796530ff796530ff7a662fff7a672bff7c692dff7a682eff7a682dff806c2fff816b2fff806b2eff7f6b2dff806c2eff826e2fff806c2eff826e2eff847032ff857133ff857133ff85702eff897331ff8a7434ff8b7633ff8d7932ff8b7a36ff93843dffae964dffb19a4dffb89c50fffffffeff156572ff12626fff0f616dff0f6271ff0d6172ff11606fff12606eff1a5f68ff265b5bff3c5f4dff687b58ff7e8960ff929261ff969153ff9e9154ff9f9254ff9f9254ff9c8f4affa08f4cffa39250ff87875aff83865eff69785dff3e6157ff305e68ff265e74ff1f5f81ff196084ff196186ff185f85ff195f80ff185e80ff195d80ff185e80ff53b4e2ff77d0ffff7bcfffff79cefeff77cdffff78ceffff74ccffff70cbfdff70cafeff6cc8ffff68c7feff66c6ffff62c3f7ff62c3f6ff60c2f5ff5cc0f5ff59bff5ff56bef4ff56bef6ff53bdf5ff52bdf2ff621b1cfffdfff9ff58193eff5f1640ffb8366dffda3a78ffda3a78ffda397cffda3b7dffdd3a7bffe03d7dffe03d7dffde3f7cffdf407effe14280ffe14582ffe34783ffe54986ffe24b85ffe54e85ffe45086ffe55489ffe7578dffe7598effeb5f91ffe76393ffe56694ffd35b85ffbf4d73ffb14267ffac4166ffac4469ffa94968ff98375dff831f4bff821e4eff831f4fff841f4fff87204fff892050ff88214fffe9c85fffecc95affedca5bfff1c85dfff2c961fff1cb62fff2cc66fff4cd67fff6cf6bfff7d071fff7d271fffcd477fffbd77cfffbd881fffdd981fffed982fffed982fffed982fffbd67cfffbd67afffbd679fff8d473fff8d370fff5d16efff4d16eff7d7b3bff114f45ff145044ff145347ff165549ff165951ff165a7eff106876ff0f6372ff0a6473ff54b4c4ff63ccdaff5accdaff57cbddff54c9dbff50c7d7ff4fc7d7ff4bc5d4ff4ac4d3ff43c3d1ff48becfff02667bff0f5e74ff0f5d70ff116170ff0f6270ff106070ff1b6788ff4c92bbff498fbaff468db8ff3f8cb8ff74ccfeff6ccbfcff61c4f9ff5ec0f4ff54bff4ff4fbef4ff4bbaf0ff48b8eeff44b8edff3eb6edff185962ff155748ff145547ff0a5450ff29829aff45b6e1ff3eb5eaff3ab5eaff3ab5eaff3db4e5ff39b4e7ff35b3e8ff3fafe0ff56a2ccff403a55ff5e1825ff67191dff6b171bff6f191cff761b20ff701b1fff4b1433ff5b163fff5f1640ff621540ff62143fff631540ff641540ff64133fff641440ff651440ff63143eff63153fff60143eff5f163cff4c1534ff156355ff85511dff8c541fff8f551eff90561dff91571eff945920ff955b21ff975d21ff995c22ff93571eff8a5218ff864f1dff8b7630ff791747ffdb387affdb3d7cffdd3f7cffe04682ffe24d86ffe75589ffe95f8fffec6a96fff1769ffff983a7ffff92b4ffff9ebffffea8c6fffcadc7ff6c1c41ff701b43ff731b46ff781c42ff751f39ff325534ff586f45ff748658ff748a5dff6d875dff3f6441ff20543dff1f5843ff175e50ff2a7464ff3b7668ff3d7a6aff407b6bff407c6cff427c6cff407c6cff3f7b6bff367867ff347767ff317565ff59a894ff4c9e94ff53bbecff93e8f7ff94e7f6ff8fe4f0ff8ae2eeff86e0eeff7cdceaff76d7eaff6ed3e3ff65d1e1ff5dcddfff54cadaff4dc8d7ff48c6d6ff43c3d5ff3ec1d3ff38bfd2ff36bfd1ff0a6271ff0d6170ff0e6170ff0f5f6fff0d5e6eff4f2551ff5bbdf2ff4dbdf1ff4cbbf3ff47baf2ff42b8edff3fb7eeff3ab6ecff3bb5ecff39b3e8ff56abc6ffa59041ff7e6a25ff2b7562ff2d7664ff51a98fff4ba78eff4aa78dff47a488ff3ca085ff3ba185ff379f85ff0e6878ffa72d34ffd05357ffd15657ffd25a5affd25a5affcf5959ffcf5656ffce5454ffd05254ffcc4e50ffbd4649ff4a1231ff963667ff983867ff9a3b65ff9a3d66ff9a3d66ff9a4069ff9c446cff9d476dff9f4a6fffa04b70ffa34e73ffa15075ff853b5eff520f31ff166356ff84501cffb56c29ffe68d42ffe99047ffeb944fffef9757fff39d61fffaa670fffeae78ffffb686ffffc095ffa36020ffeec961fff2cb62fff6cf6cffffb589ffdc3e7fffdd427fffe14981ffe34d84ffe6578fffe96391ffec6f99fff581a4fffd91b5ffa994aeff137a8aff117b8dff6c1a41ff711941ff741945ff781b47ff7b1b4aff42a089ff4ea58cff52a88fff5daa92ff69b19aff71b59eff70b59eff6db29bff69af98ff33826cff0c5c71ff0c5d6fff0d5d72ff0e6277ff0f6578ff116b80ff13758cff165e85ff73c4f1ff67c3f5ff66c2f6ff5dbff1ff3b87b2ff4c526eff3c85a0ff9decfaff91e9f3ff8be2eeff81def0ff72d8e7ff69d3e2ff5ecfe0ff57ccdfff4fc8daff49c5d6ff41c3d5ff3bc0d2ff39c0d0ff85e4f5ff75d8e5ff5fd0e1ff50cadbff3ec3d4ff34bfd1ff2cbccdff6f1841ff6f1840ff701840ff6d173fff6d173fff6b183fff51574cffa88e38ffd6b450ffecc654ffebc556ffa8a672ff237ba5ff1c77a0ff1a739aff1a6d96ff166a8aff146384ff155d7cff138394ff158d9cff5ad1e3ff57cee0ff53cbe0ffbe323bffc33039ffc33336ffc53337ffc33238ffc43238ffc53037ffc33038ffb9313cff5e1339ff4a112eff812551ff92265dff93285eff912a5fff912a5fff932c61ff952c5eff942e5fff942f61ff963060ff983160ff953461ff6d2048ff256e60ff257360ff2f7b64ffdf8730ffe28836ffe48a38ffe68b3dffe98e43ffea9144ffed9551fff19754fff29b5afff49e62ffe69b62ffefc659ffefc95bfff1cb64fff5ce67fff7d26ffffdd678fffcdb7cff6c8270ff086f81ff41c2d2ff4ec7d7ff5eccdeff6fd3e3ff81dceeff4596a5ff177d8bff6b193fffd94a81ffe05186ffe45f8dffeb7099fff3799fffdd819fff71b3a0ff77bca5ff8bc8b3ff97d2b9ff9ed0c0ffbbbea0fff0a16cff106070ff055d70ff4ec0d1ff4dc3d3ff4ec3d3ff49b9cbff0d6b7fff13758cff1d6b96ff46869fff7ebee2ff4f92bbff438db5ff601215ff65161cff1a6285ff165b80ff125e88ff5daedcff69c1f0ff489fceff125882ff1a5881ff1e5f86ffca7996fff1749dffe85d90ffe04885ffdc3c7affcd3974ff0e6567ff086366ff0e6482ff136080ff185e81ffe67199fff27fa2ffed6692ffe6558bffe24884ffdf3f7cffd63a7aff375767ff265966ff235865ff225766ff245563ff51bdefff51bff5ff50bdf4ff4abcf2ff46baf0ff43b9f0ff41b7f0ff43b3e9ff32c2d2ff32c0d3ff2fbfd2ff2fbfd2ff2dbed0ff2abdd0ff28bfd1ff28c0d1ff932c5eff962b5fff962c60ff962c60ff962c60ff962d5fff972d5eff962d5eff824a2bff8f1e53ff941e55ff971f56ff901b51ff8b184eff8c1c4fff8f1e55ff901e55ff941e55ff971d57ff971d57ff55354cff2a9c86ff2e9c7cff429d82ff4f2b2dff74191bff68181eff27bdcfff37bdcfff3cbfd1ff45c6d7ff51cbddff5bcedfff88521bff8c541aff8e551bff945a1cff9b5c1eff9f5e22ff47b5ecff2d87b7ff3287b5ff3b89b6ff4a8fb8ff0e658bff49c2dbff4ec9dcff5cd0e3ff68d1e9ff5d161dff9d3a3effbc4264ffa03262ffa23963ffa74769ffae5977ffb86c86ffbf738dff166a80ff0c7387ff938b75fffab383ffffbe94fff1c39effa8f4e6ff65d1e2ff7edcedff96e9f7ffa2f1fcff99ebf9ff81ddecff65cfe0ff196d93ff1d6b97ff405a5bff5f1417ff601114ff600d10ffd36569ffc64e50ffa8ebfcffa6e9feff97dffeff84d5fdff73ccffff63c3f8ff57bdf3ff4ab9f1ff46a9d9ff5dad93ff4ba48bff104d41ff176f75ffd1fffeff86e6deff56d2c6ff3bc8bcff196285ff186b8fff116288ffe74982ffe04680ffe13f7effdc397cffdb367affda3277ffdb2e78ff32707fff2b6979ff27616fff255b67ff225565ff50415fff631a43ff2c99cbff3ab4ebff37b2eaff35b2e8ff209cb3ff3bc5d7ff39c4d6ff37c4d8ff33c1d5ff30c0d3ff185c6affa05e20ff9e5d1effa05b1cff9c5718ff935718ff90453aff8f2054ff901f56ff8e1f50ff831827ff631515ff90561fff921d53ffa7205affe1518dffed6196ffa11d50ff901e51ffd23477ffdf3d7fffe13f80ffe24481ffe54984ffe84e87ff355f7affc13339ffc6393effc83e42ffcc4548ff8c2e31ff3db1e4ff2681aeff2883b0ff3185b2ff3588b2ff80491aff875119ff8d5319ff91561bff945a1cff985c1cff9f5e20ff1c709fff1d76a6ff1c73a1ff0c6478ff0b7084ff175c85ff186691ff1a6e9dff1973a0ff1d7aa9ff9b555cffcc5557ffd7686bffe27d7dffa85356ff0e5e70ff0a5d71ff096276ff0a687bff0b6d82ff0f7388ff10798cff7e6a2aff58a39dffdffffffffffffdfffffffdfffffffdfffffffdff78ccfdff93deffffa3e8ffff9adefeff7aceffff5dc1f3ff1f7879fff5a3a4fff5a3a3ffe38687ff7ec0d2ff6eb6c7ff0a616dff7dd1fcff75cefcff67c9fdff5cc3f7ff53bef1ff4bb9eeff4fb3c9ff56aa91ff49a48aff3b9f84ff115f81ff135b7fff115978ff248681ff157065ff0c4e41ff5ec3f7ff56c0f5ff4dbcf3ff44b9f0ff3eb6edff3193beffef964fffe98f47ffe78c3dffe38836ff6bb8cbff66b4c7ff61b0c4ff59acc1ff54a9bcff4b4460ff721540ff831847ff7b1745ff6e153eff2a5a6aff28bac7ff26bfd0ff26bfd0ff24becfff22bdceff24bccbff27606cffe68a34ffe78b38ffe78b38ffe78b38ffe78b38ffe68a36ff861b21ff851920ff851a1eff84191dff79161aff90561fffda2f76ffdc3178ffdd3279ffde347bffdf377bffe0387effd82d71ffda2f74ffdc3276ffdd3377ffe1357affe4377cff0b8596ff0b8596ff8b5218ff90561dff9b5b1aff9f5d1bff68502fff76161eff731721ff7f181eff801a1fffdd893affe48a3cffe78e45ffea934cfff1995bfff3a167fff7a86eff4fbef3ff3787b4ff3c8ab6ff0d6277ff0a7085ff43b4edff51bcf1ff68c6f9ff83d7ffff94e1fdff3a9892ffa8f8f1ffeafeffff5d1515ffc85c5eff0c5e73ff036377ff67ceddff79d6e5ff86dceaff77d3e1ff0b798eff7e6a2aff8b7630ff56133dff67173eff67113aff6b133cff721541ff116661ff0a6060ff086265ff056163ff0b6467ff0c6b6eff17797bffaee1efffacdfecff98cfe0ff0a5f72ff096073ffa0eefeff97e8f5ff6ad3e4ff48c4d6ff43b0c1fff09b5effeb9451ffe8914affaf5542ff6f153eff267296ff135d83ff135b7fff12587cff317765ff2f7b65ff44a389ff349d80ff096f69ff076c6eff0a6367ff1e6584ff4dbdf4ff49bbf2ff45b8f1ff43b8efff3eb6edff50abc4ff51a8bbff4fa6baff4da4b7ff4ca1b4ff921c50ff991851ff991b51ff831646ff6e1540ff2a5a6bff235866ff265968ff225663ff337686ff30717fff2d6c7bff296371ff915214ffe28630ffe38630ffe2852fffe2852fff8d4c13ff851920ff87191eff86181dff83171bff7e171dffde873bffe78937fff0854cffd63d5cffd93e63ffc43474ff9e1d56ff731944ff945a1cff9d5c1effa15c1cff2cbdcaff26bdcfff31c1d5ff35c5d6ff87511bff90561bff9a5b1cff9e5d1cff655033ffc13a40ffc94146ffcb4e51ffd35a5dff691c0fffca9350ffe68b3dffe78f43ffec914dffe1954dff967f35ff175f8aff166893ff1a6e9dff066379ff49c4d9ff70d2e3ff6fd3e0ff963f68ff6e2f4fff7a415eff0d6265ff0b6f6fff0b7b7aff19837effcd5154ff48c6d8ff59cadaff6fd4e4ff84deecff9be9f7ffa1eefcff9de9f7fffee69bfffde298ff56133dffea90b1ffffc8dfffffebfbffffecfcff56a09cfffdfffdfffffffdfffffffdfff4fffdffb4fbf4ff1a7c7bff0e616eff075e6aff0a5f70ff6fd5e4ff5cccddff896c35ff989f65ffa8d5b3fffbd576fff4cd66ff5f4d32ff6e4213ff6b4013ff821a49ff781640ff66aed9ff67c8feff4fbcf3ff3fb6efff4a0c30ff45092bff470c2eff6c143dff3fcdc2ff32c9bfff26c5b7ff0c4f41ff3fb8f4ff3cb7efff3cb7efff38b5ecff38b5ecff255b68ff60acc1ff58adc0ff55acbfffe2387dffe1367bffdd347bffdd3279ffde317affdd2f79ff41788cff35788dff51a8bdff50a7bbff337488ff2e7182ff2f6d7eff2a6472ff90551bffe78b35ffe68a34ffe68a34ffe68a34ffc3762fff851920ff8c1920ff941a1fff941a1fff841419ff79171dffaa422fffe18237ffd34055ffda2f76ffdb3077ffde337aff9c205affe38630ffe58933ffe78b39ffec8c3eff8a2021ff8a1e22ff902327ff88521aff92571eff9d5c1bff9e5d1cff7c643cffc12e34ffc4333bffc83b40ffc94449ff885117ff4eb196ff3dcec1ff53d4cbff6ccaaeff947d32ff9f893aff165f8cff186795ff186f9dff12749fff3dc4d9ff41c6d5ff52c5d3ff77436aff983766ff4f617bff0a6264ff0a6f6dff0b7b7aff0f8681ff296277ff2c6a7eff5d5e31ff49cadaff59cedfff60d1e0ff547791fff9d471ffffdb81ffffd97fff55113cff39535cffff97bafffbaac5ffffa8c5fffd95b9ffb7fef8ffc7fffdffb9fffbffa0f2e6ff7ee1dbff61c3f7ff9cebf8ff97e8faff82deedff3b90a1ff440a2bff450b2dff574439ffab913ffff2ce61ff275256ff6a5032ff75420cff734112ffe75e8cffe6558bffe44984ffdf3e7fffde3a7aff460a2fff993c66ff942d60ff91245affa3235bffdf357affcd336eff105f4bff0e4f41ff104b40ff235865ff225564ff317283ff5dadbeff59abbfff51a9bbff50a9bcff4ea8baff56a4b9ffda2d77ffda2d77ffd92c76ffd92c76ffdc2c77ff4da5b7ff4ca5bcff6fa497ffeec651ff53a9bfff51a8bdff4fa8bcff4ea8bcffa46115ffe6872fffe6872fffe6872fffe6872fffe68732ffc42f34ffc42e32ffc42f34ffc53035ffc53035ffc53035ff961c53ff911b4fff51305fff3378a5ff5e6ca0ff2379a3ff24c7b6ff25c8b9ff2ec7b6ff2fc8bcff8f531fff1a75a0ff1d7aa9ff1d7dacffe48334ffe78833ffe78c3affea8f40ff8a8868ff53a8bbff55aabeff5aacc0ff7e855dffe48a37ffe88d42ffee934fffac8935ffefc659fff3ce62fff7d16bff165d8aff196a96ff54b5e9ff5fc1f4ff2482b2ff1c7cadff5da8bdff68b1c5ff75baccff85c2d6ff066866ff72dbd0ffe7fffeff19877eff296174ff2c6b7fff716026ff7b6829ff85722fff937e34ff440a2bffad6c8affc4899effb27791ff57113cfff2fefefffcfeffff6eaca7ff5c1016ff601017ff691218ff175c80ff448caeffa4e7ffff91dbfeff186593ff12587cff1e7294ff61d0daff45092eff44082cff460c2eff25304aff115f72ff78bdcfff6bb5c8ff65afc4ffea924affe68c3effee9752fff38d5effdb3a76ffce3973ff4d0934ff480931ff44092eff450b2dff756727ff746226ff7d4716ff824c16ff54ab90ff3ea387ff156956ff235865ff215663ff56a9beff50a9bbff4da7b9ff4ba7b9ff641540ff912b60ff952660ff93265fff4c738cff4ea7b9ff4da7b9ff4ca5b8ff35967dff126c55ff1b4c32ff931e4eff8a1a4dff668894ff5b9cabff7d161bff741418ff671418ff7b170eff64a2baff2e768cff1e7bacffc0292effc12a2fffc3292fffc3292fffc3292fffbf2931ff991b53ff901950ff50315fff1e7eadff1d7da9ff1d79a2ff5e0f3cff34aaaaff21c2b8ff4c1235ff8b541dff1974a1ff1d7ba7ff1f7dacff1f7fabff2a617fff85a0a2ff44bbf0ff218ab9ff52aabcff5cb0c3ffe0bf5affefc757fff3cb5cffbd9042ff36bccbff39c2d5ff42c6d7ff4cc9d8ff0a7588ff43b6efff48baefff4cbbf2ff51bef5ff56c0f7ff5cc1f8ff573844ff5caec2ff61b1c5ff66b3caff1a4831ff3ecbbcff42d2c0ff65b0c4ff76bbcdff84c2d3fff3cc67fffcd678ffffdd87fffee38fffa04f72ffa96182ffb3708cffb47790ffb27289ffb27853ff11587eff591417ff5b0f13ff5f1115ff691216ff487fa5ff8ad8ffff81d3fdff76cdfdff3587b4ff12597dff145780ff491031ffad6883ffa55a79ff9d476dff2f455eff3bc2d4ff0c6071ff357b8fff216d7eff903137ffca5052ffef8c4cffe38d3dff8fa092ff59a5b6ff9a3b66ff983464ff942c5fff92255bfff2cd63ffefc553ff955620ff7f4c13ff60461fff309878ff435049ff36798cff53a9beff52a8bdff367286ff2f7184ff2f7084ff862559ff91205cff911f5bff911d5aff8f1c56ff917a2dff746527ff27987eff289c7fff279c7fff44917dff961b52ff8c1a4dff861b21ff83171cff7f151bff761318ff671318ff7d161bff711518ff4294a6ff217cadff34b6edff35b7f0ff36b8edff1d729bffa31a5affdd2f79ffde317affdc357bff503160ff1e7eadff1c7da6ff1d79a2ff5e0f3cff640f40ff660f40ff600e3cff8b541bff36b5ecff36b7f0ff3ab7efff3ab9f2ff2378a4ff0b7d87ff128ea2ff0b8c85ff367056ff927e32ff998535ff977c2dff782a15ff8d7930ff39b7baff31c2d3ff38c4d6ff107084ff0b7689ff1b6997ff47baf1ff47bbf2ff47bbf2ff49bcf4ffa95766ffce5557ffeecb5ffff2cc63fff5cf65fff7ce68ff3ba283ff43a78aff0c7072ff0e7d7cff51704cff096264ff0c6e6cff117979ff0e6266ff08605eff944c66ff9d456eff705a74ff0b6e83ff155a81ff14577eff5c1516ffe19094fff3a3a3ffa44c4dff70133eff751546ff0e4f47ff0c4b3fff0c4b41ff468dbaff4da1d1ff7c3254ff6a1f45ff6c1a41ff91325fff6d4010ff0b6673ff075e6cff085b6cff0f6376ff8c232bffc5393dff235563ff3a7d90ff5badbeff57aabbff838bafff93285bff91205aff6b113fff15607fff145d81ffae641fffe98c3cffe68a36ffe58835ff59736cff51a8bfff4da8bcff4ea6bbff4795a7ff50a9bcff4ea8bdff4ca5bcffd73077ffdf307affdd2e78ffa18a37ff907a2eff766528ff6c143fff5f1a3eff82191fff7c161bff971c53ff8d194dffbf2d32ffc52d32ffc52c31ffc52c31ff80181bff7b151aff6f1418ff50a7bcff3aaed9ff2fb3ebff30b4ecff31b5edff38b2e6ffd82b75ffdb2b76ffdc2c77ffdc2d77ff32759fff3fb6efff3fbaf0ff1f82afff8f1c5aff901d5aff93205cff93205cff995c1bff32b3ecff32b4eaff35b6edff36b6f0ff167aabff0a7b7aff0e8582ff0b8b85ff386d55ffbaa03effefc95affbe9d3cff74181aff8d7930ff927e2fff9c8634ffa58b36ff16889dff3ec4d7ff176e9fff55bdf1ff1c80b1ff751415ff851417ffa2292eff530d39ff580f39ffe6cb68ffa99140ffa58b3fff917c31ff50cfc3ff64d6cbff83e5dbff4b7150ff76dcd2ffa5f6edffd4fffeff4fbcbbff71dbceff88e7daff9aeee3ff91eee5ff0a6f83ff155a81ff12587eff755769ffd66a6cffd76d6effd26464ffa65078ff791445ff104f42ff0c4a42ff0c4b41ff0e5146ff0b6966ff096262ff076060ff096766ff6d3f11ff6d3f13ff076674ff085f70ff0b5c6dff0c6378ff096572ff08606eff095c6dff0e5e70ff11504bff236e6dff0d4f41ff811847ff6e1341ff6b1340ff155f80ff146085ff1c5a7cffe58933ffe4882fffe3872eff124a3fff5f1114ff2b6374ff27616fff235464ff0b686eff0a7d77ff086d66ff0c6462ff9f4c49ff73598affa78934ff947e2dff766628ff731642ff581c40ff82191eff7b1519ff961b52ff8b184cffc0292cffc1282effc1282effc1282effc2272dff9b2026ff73141bff50a7beff5ba4a9ffa48c36ffa48533ffc12832ffc1282effdd2b76ffda2a75ffdb2b76ffdc2b77ff2fb3edff30b4ecff32b5edff33b6efffc12b30ffc02b39ff75201cff9a5c1bffe68a33ffe68a3bffaa5f1dff19709dff1a78a7ff1d7dacff21c5b8ff2dc9bcff3bcdc2ff3dcbc3ffecc551ffefc753ffae9044ff711817ff8f7a31ff937f31ff9b8735ffa48a37ff35bfd5ff39c3d2ff42b8f3ff43bbf3ff46bcf2ffc74046ffc84147ffc8424aff530e39ff590f3bff216679ff746029ff846f2bff907b30ff947c3aff606f42ff847230ff8f7b31ff46cec2ff55d1c4ff5ed6caff71c8fbff086069ff289f9bff137578ff085f72ff0b6e85ff155a81ff12587eff135c84ff196491ff604523ffa23360ffe76492ffe45a89ff0f4d42ff0a4b3fff094a40ff0e5146ff096a66ff06625fff70d9cfff58cec4ffed9755ffe8924bff47c6d7ff3ec4d5ff37c2d4ff2bbeceff0a6572ff075e6fff095c6dff0e5e70ff0e4d41ff39a084ff329f81ffe2367bffdd3178ffdb2e78ff3eb8eeff37b6efff38b7eeff38b6edff11604cff0d5141ff0c4b3fff5e1016ff326f7eff2d6977ff225766ff0c7374ff0a7d75ff086d66ff0c6462ff7b6a25ff1c78a1fff1c652ffefc54fffecc24dffdb2d77ff973c6aff891a1fffbe3d3effdb2e7affdd2e7affdc2d76ff911b4dff8b1947ffc2282effc1282effc1282effc1282eff0e7e8dff42715bffa58b36ffa18633ff927b30ff630f3dff0e8195ff0d8698ff2eb3e8ff32b2e6ff94a075ffe3c666ff276d85ff337489ff407182ff265867ff9e8735ffe4862cffe4862cffe6872dffe2882fff1a71a0ff1d7bacff2181b2ff1c7ca6ff21abb8ff1a80a7ff865018ff8f551aff8a5216ff74151bff6f1714ffedc654fff1c95bfff2cc5cfff5cd60ff794717ff875119ff8c541aff8d551bff0a6c6aff0a7c7bff0d8280ff4e0c34ff762550ff62113cff216679ffe4c262ffefc95dfff1cd65ffb49a4dff806523ffefd16eff9e8432ff7b8f56ff4bbae9ff4abcf0ff52bcf0ff096264ff0d6d6eff077c82ff53cad9ff57cbdcff62c1f1ff68c6f7ff69c8fdff67c6fbff65431dff764314ff87501fff97eee4ff0e5649ff71b7a2ff67b09aff56a890ff0c726dff8ee7dbff3bccbfff33c9bbffe98e41ffe78c3fffc95d3cff3da389ff39a086ff339f81ff0b6d7bff40c1d2ff35afc2ff0f5f71ff257363ff0d4c40ff6f5125ff704316ff763d21ff751441ff49aee6ff33b6f1ff32b3ecff34b4edff2a9e81ff289c7fff259a7dffc32e32ff4ea9beff4da7bbff4ca5baff0a7476ff0a827bff097671ff0b6363ff7b6a27ff1c78a1ff196c92ff145c80ff186083ff146183ff117c74ffc1282effc1282effd92b73ffda2a78ffc7276eff93194fff88184aff761440ffab313aff953c49ff108492ff0a7d8aff417158ffa58b36ffa18633ff927b2eff630f3dff17a2b8ff19bed0ff1abfd1ff1dbbcbff2384b7ff1f7faaff4fa6bdff4da7bbff4da8bcff54a6bbffebc44dfff1c550ffda862effc88b4cff268fc1ff33b2e7ff32b3ecff36b7f0ff3bb6eeff349ed1ff2487b8ff8e4b0dffe68a34ffea8d3fffc13137ffc73a3fffefc650ffeec753fff1c756ff4e8f73ff7e4912ffe88d43ffe98e45ffe68d46ff086d6aff5ad2cbff37afa9ff963161ff952f61ff74204aff1a6678ff265e71ff9d9c67ff5d7164ff2c535fffefc95bfff1ca5ffff4ce61ff59a077ff43a389ff45a68bff4ccac0ff5cd5c7ff68d8cbff6cd8cbff66c2f4ff68c5f9ff6bc8fcff4dbcebff4abef3ff486768ff6d3f11ff734414ff86511dff2a928cff269287ff43a588ff3da387ff3f9f88ffe05487ff46cebfff963260ff414b73ff8b2428ff8c2226ffa92e2fff145c80ff14577effe1387eff2ec2d2ff2ec1d5ff2abfd1ff27bdccff309e80ff2e9c7eff9f591affe88934ffe18647ffdf3279ffdd3079ffda2e78ff38b5efff2181afff2080aeff0d6472ff851b1fff861b21ff601015ff1fbfd3ff1dbed0ff1bbfc5ff1dc7b9ff1cc6b8ff19c5b7ffa88d38ff1c78a3ff17719aff145c80ff156388ff146083ff199993ff1dc6b8ff539996ff1f84b4ff33b5edffbe276affde2c77ffdd2c77ff7b1546ff1a6b8eff118695ff1eafbfff2dbecfff40735effdeb94fffecc657ff9c8333ff620e3cff5e0d39ff18bbcaff19bbccff247283ff2fb3e9ff30b4eeff0f827cff48a8c3ff44abc8ff307084ff327586ff316f7fffd82c78ff30b4ecff32b5edff2b7787ff259a7cff457f79ff31b4eaff33b5edff36b7f0ff995c26ffee8149ffdc5156ffa01e55ff146151ff15695bff0b768bff0e849aff0e8799ffc26c1fffe68b3bffe78c3cffa3642dff36c7bcff34cabcff32cbbdff37698bff0c6779ff0e7286ff1a6679ff275d73ff2d687dff22607dff225569ff285f74ff2c6678ff1b6f78ff0c7a74ff185f82ff59c0f3ff0c5d6fff1d898aff2ba49eff13788dff1b6d9eff48bcf2ff4fbbf1ff175f8aff804e1fff704213ff6d3f11ff734517ff864f1dff5f1115ff6b151bff704316ffdd4478ffe0417fffdd3e7dffdd3a7cff186186ff155a7fff14577eff165981ff726626ff125c80ff14577dff1a5b83ff2b537cff255c79ff5296a9ff205368ff216558ff104e40ff0f4c40ff414e2fff681317ffdd2e75ffdd2e77ff892248ff4e0b31ff450b2dff46102eff128897ff128695ff631317ff661217ff50121cff21b8c5ff229c8cff1d6c58ff0f5c4aff0f4e43ffedc44eff34b6efff30b4ecff2fb3ebff32b5edff30b4ecff1bc7bbff1ac6b9ff19c5b8ff3bb4e9ff2fb3edffdb2b76ffda2c76ffd92c76ffce2e7aff176b8eff19becdff18bdcdff18bdcdff1bbdc7ffedc34bffedc34bffedc34bff620e3eff5f0d39ff6a1425ff327487ff2d6d7cff108c86ff0e8984ff0f8079ff207eabff176183ff317185ff327486ff316f7eff0d7b8fff108598ff4ca7b9ff4da7b9ff51a9bbff8e1e5aff95225eff546660ff965a1effa05d1cffdd2e7affdc3178ff8c3240ff156051ff136a57ff26bdcfff2cc0d2ff2ec2d8ff701d39ff550d39ff5c103cff3f1535ff7d672aff907b32ff9b8334ff3a6c8fff2fbfd4ff2ec2d5ff338ea5ff57aabeff58abbfff23637fff226073ff5facc1ff63a7bcff2a9a9bff1e9691ff79652aff88722fff105d69ff085f72ff096b7dff137a8cff48baefff4abbefff145780ff18608bffb77039ffeb914bffeb934effeb914cffeb9049ff5f1117ff6a141affe49251ffe79044ffe98e43ffe78c3fff450b2dff196086ff155a7fff14577eff165981ff726627ff42b8f1ff3eb6efff3cb4e8ff14597dff165680ff387a89ff3d8c92ff206457ff104e40ff0e4d41ff114b40ff8a2126ffc22e34ffc12d32ff6d2e3bff460a2dff450b2dff450e2dff931e5dff921d5aff701417ff9e242cff611117ff24987eff259b7eff279b7eff239a7dff239a7dff0d4e3dff1f8067ff289c7dff0f5748ff259d7fff259b80ffe02c74ffdc2d77ffdc2d77ff327386ff2d6c7bff275664ff9b1c53ff33b4efff32b5edff33b3eaff2c947affe1872fff954e31ff108598ff0a818fff6a1545ff911a5aff911a5aff921a5aff7f1d2fff367a8dff30717fff2dada7ff12a799ff0c827cff32b5edff2880aaff317185ff347487ff316f7eff0d7b8fff0e8695ff0b8292ff5c113bff671040ff1c709fff1c77a6ff566660ffa05e1fff9e5d1cff269379ff978235ffa48c34ff155d4fff146d56ff396791ff2dc8beff5e3038ff6c1a34ff550d39ff5a103cff3e1436ffedc65effeec85afff2c956ff277ba8ff59133cff29596eff2c677cff596470ff665e6aff3d3d56ff53aabcff55aabdff58adc0ff0f7577ff745e23ff7a672bff88722eff066675ff3fc2d6ff45c6d8ff4abfd4ff4bb7edff4eb8edff125780ff18628cffe5914dff45baf1ff48b9efff5c1212ff5b0f13ff5f1117ff691218ff746127ff735f26ff7f6c2cff9b3166ff972c60ff176185ff125d82ff20729fff195a84ff7d6a25ffad9146ff657653ff125c80ff125a7dff155882ff115344ff0d4c40ff216558ff0d4f42ff0d4c40ff114b40ff135a81ff17587fff8a2652ff722f3bff71154aff651343ff5e143cff225264ff91551affc32b30ffc3292fffb42d36ff265364ff245766ff0c7a73ff249d7fff259b7eff269b80ff198373ff259b7eff096c60ff4da8baff4da8bbff125546ff62113aff530e32ff4da7b9ff4da7bbff3f8e8fffdc2d77ff8b60a6ff43aee5ff299b83ff448f84ff5e0f3aff54173dff19becfff19becfff20bcd1ff911a5aff901b57ff931a58ffc4272fff51a5bbff3cb8b7ff17c6b7ff17c6b7ff1ac7b5ff2b9982ffba2a34ff4da7bbff4da8bcff51aabcff1abfd0ff1cbed0ff1fbfcfff921d5aff911e5dff1d6f9dff2280b0ff1e84b6ffde8a3cff176253ff1b6954ffedc651fff1c958ff2c997fff2e9f81ff6c6252ff76181dff821c21ff39283bff651640ff7e2756ff471638ff30a082ff165f8dff1b6f9cff1f7aa8ff94295fff275b70ff2d677dffc33739ffc73b40ff443c56ff45b7ebff46b7ecff247cacff0e7577ff745e23ff7b6729ff87712fff937f36ff4684a9ff37bfdfff2c78acff1b628dff2c7194ff46b7eaff3fb9f2ff6e3f16ff7b4919ff0a6361ff5d1116ff5f1114ff661519ff69141affe7c669ffefcb5effa88936ff125b7eff145f88ff53b1d4ff3db8f0ff3db8f0ff3cb7efff1e5674ffcfbc69ff0e4d41ff3db8f0ff3cb7efff3bb5eeff115546ff0d4c40ff216658ff43a58bff349b80ff164e41ff37b6f2ff35b4eaff6c1e41ffe38c3cffb1424fff8f234cff56a8bbff41859cffe28833ffe8872dff2d6977ff235a6bff265465ff275a69ff18c7baff19c5b9ff226a55ff12604fff198b85ff0b7b76ff0b6862ff15614fff17705cff0d5747ff912057ff921e5aff714b63ff9c3b49ff1f6e5dff146855ff125d4cff1f7da7ff1d7298ff661440ff5f0d39ff611b41ff367587ff306e7dff217faeff2d9cd0ff208cbbff0b5f4eff117b89ff834b2fffa23540ffa23846ff207eabff1e7ea0ff2275a0ff257eacff6d6589ff71684affa05e1dff785e3cff1480a8ff207eaaffdc8936ffe3872eff3bafdfff31b4eeff31b7efff36b6e9ff136252ff186b5aff411f3dff176555ffefc753ffa29346ff895122ff78171dff801b20ff369983ff922b5eff952c5fff147068ff0d7d7aff3ab4ecff3cb7efff3db8f0ff389f85ff255a6cff2d6779ff327284ff0e6566ff0f7a7cff39b6ecff37b8f0ff3dabd1ff0d7672fff4c657fff1c756fff0c855fff1c958ff7b491bff855a30ff16577cff1b638bff2572a0ffa36128ff7c4b18ffe89046ffe98e43ff0a6362ffb24348ffc73e44ffc63d41ffc73c40ffa4be9cfff1ca56ff715f3dff42b8f3ff3fb9f4ff847b4cff15587dff165a7fff156579ff48b5ecff0f5343ff0d5240ff124d42ff495340ff611214ff35a083ff309e80ff2e9c7eff34a087ff2d9d81ff2f9a88ff28bcd2ff0c6560ff6d294dffda8242ffdd8b3cff36b4ecff3cb4e1ff1e7599ff165d81ff3f4663ff4da8bcff4da7bbff4da6bbff4da6bcff2b5768ffa27f39ff256f5aff155f4eff25a498ff1dc7b9ff1ebeb1ff269b7cff289c7fff2a9b7fff10847cff0d736cff1d7199ff1a6b8fff1c8772ff299d80ff259d7dff3fafe6ff3eaee5ff6a1a4aff6f1346ff5a1a3eff3c8096ff337789ff35b4edff32b3ecff107e96ff0e6e7eff107a86ff62123eff62113cff2e4963ff217faeff1d7ca8ff2474a2ff2683b1ff2181adffe48732ffe6882bff9f825aff217cabff1f7da9ff20bdd0ff23b8cbff33b3eaff186051ff176858ff196d5aff269b80ff2d9d81ff5c1b21ff166353ff1b6a5aff1b6c58ff875221ffc3353affc5383dff157a88ff399480ff35a085ff147365ff118984ff541137ff59123bff434f6cff316e72ff53a9bfff52aabeff3a899dff106566ff107b77ff714115ff854e1aff2cc7baff2dc9bbff36c9bcff2dc9b9ff1c8e88ff6d4116ff7b491bff855a30ff1c5882ff206594ff2572a3ff704014ff7e4a1bff806d2bff62141bff0a6461ff0c6162ff3b798bff57abbfff57abbfff965d26ff9d622dff705f4fff1e8f89fff2ca5dff41b7f3ff3db8f2ff3db8f2ff0d6360ff0c6163ff469385ff37a285ff39a084ffe98c3effd25842ffce8f5fff4f9eafff1c5570ff57b2ceff8c7328ff125c80ff11716bff0b645fff7f3b71ffdf3177ffebc650ffedc451ff4f7c57ff1d749aff155d81ff334a58ff20bdd1ff218bbbff35b4eeff8b5d32ff804b1bffeec857ff246e56ff13604eff104e40ff31b8e3ff34b5e8ff958a4bff696837ff52a9bdff19938cff0e7d75ff20779fff1a6a90ff23848cff51aabeff25bdd0ff23bed4ff2abbd1ff36615cff98245cff931c54ff4ea8bdff4ca5bdff246a90ff8f5723ff188798ff27b9caff1ebeccff62123eff62113cff2b4b65ff2fb4ecff32b5edff30b4ecff32b3ecff32b5edff5e1742ff671241ff85a08aff217fafff207eaeff1a899dff7a1b21ff871e23ff166051ff166855ff186f5bff761b20ff832027ff6f1e29ff166353ff1d6a5aff186c57ff87521eff965c25ff127787ff1a8499ff316a7eff127573ff14807eff108b88ff962d60ff962d60ff445773ff39687eff824d1dff92532affbf363dff4d3146ff27a7b3ffd28d49ffe78b39ff297e77ff51a8bdff186c73ff166f6fff1c8281ffe18c3cffe68a36ff5e6159ff2581afff2483b0ff812732ff734115ff864a19ff816d2bff793c1bff37c9bcff1b9089ff33c8b9ffc24349ffbf4047ff47111cff6f3129ff175b7dff175b81ff25668fff255165ff255c7aff245566ff20948dff35cbbcff343740ff155964ff328cbeff1d5b89ff2ea6b6ff3ab8c7ff1b6874ff57aac0ff57aabeff25837eff0b6564ff2fcbbeff26c7b9ff235884ff117870ff0f6561ffb09237ffd9ba5cff49b1dfff34b6efff65161cff60171aff1b5046ff39b4ebff955a23ff7f4d1aff70451eff297363ff35a087ff196c57ff3e132fff12817affa78a38ff676937ff176451ff157f8cff2396c8ff3bb7efff3ab7eeff137a72ff56a4c6ff3bb7efff2673a2ff188d84ff14867cffda3878ffdd3379ff237cacff1e7ca6ff1b6c90ffe58732ffe78730ff1e7ba3ff862126ff911e5bff911d58ff3a6981ff0c7f8fff1a6b56ff2275a4ff267fadff2289b9ff60a4e0ff862060ff25bcceff2eb5e7ff2faad5ff7c2125ff791b21ff841d20ff237d71ff289c7fff289d81ff761b1fff8b262bff711e2eff2c9d83ff2e9d83ff409c7affe08738ffe28c3aff52aabcff54abbeff61adc1ff37cabdff37cabdff31cabbff3e264aff59a9baff54a9bcff699cb3ff824d1eff8d5721ff3bb1c2ff34b6e1ff37b7edff27849eff37c5beff41b9b4ff117978ff0e625fff2b7b7dff228381ff5f1417ff6a1a1eff428ca1ff38788cff187776ff2c7dabff68183aff745f26ff7f6e2fff6b4217ff873a31ff6e1840ff5f1417ff651a1dff4c142fff45102eff4a1236ff2a84b4ff2f83aeff235464ff255165ff235c7eff448193ff45808fff1e5d55ff0f4d3eff435363ff4e1233ff2d5664ff305262ff6e1a44ff0f6b63ff126362ff6e4626ff116762ff40cabfff35a7b2ff175b7eff23587fff117972ff0f6562ffba373dff40323cff641517ffc42e39ffc32e34ffb63236ff47142dff8f7b32ffe98630ffe48630ffd9883fff226c5aff25574cff71446eff53918eff2dcdbdffa88a39ff676944ff3c9a8cff20999cff952326ff841c20fff7a975ff137a77ffc43e44ffc63b43ff3d6b97ff40c9c4ff32cabcff70968fff811f26ff46b3e8ff35b5efff39b0deff12818eff2681aeff1e7aa2ffc32c32ffc12b35ff982257ff4d6787ff0d6e6aff1a6b56ff2575a3ff2781acff227aa3ff686372ff1b8595ff168292ff31bbc9ff20bdd0ffa12b35ffc12e37ffc52c33ff148193ff7c6a95ff306c83ffa23b4affb9323dff1a798eff791d1fff734d7dff716f4dffedc756fff0cb58ff9a5f29ff177e7bff198984ff34a085ff37a084ff3f2446ff933362ff166073ff148499ff367090ffe48a38ffe38b38ff1e7d93ff1c628cff2072a1ff1e628dff2576a3ff7f4b1eff925829ff3c788aff511a21ff651a1fff8a2328ff882328ff8a2327ff256153ff157775ff174c42ff942858ffa56746ff637f6dff704117ff7d373eff6d1a41ff6e5361ff792f36ff4f1335ff651f46ff642046ff1f5c7cff195a80ff255364ff437d8dff1f5e7fff42697fff379490ff3e9391ff6e8789ff1b5b80ff205a81ff285966ff305163ff6d1d44ff2a6c80ff74949fff724220ff3aa9a0ff3cccbdff531338ff461235ff296686ff195f7cff2b2438ff166674ff346d79ffc53037ff2f5150ff84452cff784044ff481331ffeac551ffefc753ff7c5943ff8c7630ff34987fff2e9d7fff307ea5ff1e678dff3b7785ffeac85cffe6ca73ff4e2e5dff14857cff12746dff2079a0ffa78b3dff2881abff86272eff20859aff127986ff3c5e62ff9c8232ff168982ff831e24ff7a1a1effa48b3dff1d8699ff12808eff3aaee4ff61a4d0ff831c21ffb08542ffbc3c73ff6c1843ff269a7dff299d82ff2677a3ff2781acff227aa3ff337180ff28b8c8ff1fa7b6ff9c5f25ff40b0dfff3c7d90ff2876a3ff2085b5ff2f7da3ff98295eff1c7286ff0e8888ff862050ff16798bff7a1d1fff2173a1ff2575a3ff872251ff932557ff96602aff177e7bff1b8a85ff34c2d5ff156774ff14788cff185f81ff1e75a0ff1d628cff2174a0ff225973ff1b7085ff1e7e93ff175b83ff2575a5ff20628bff2576a3ff7d4a21ff905928ff1a6c70ff19717aff842134ff31575bff227177ff2b6071ffa88e3eff306d52ff207160ff266f60ff977c3aff6a1b41ff5d191dff6d1b39ff6e1a42ff235f84ff19577dff1d668eff2a7263ff287360ff205e7dff195a80ff407b8dff631618ff77472aff6e411bff6e1841ff1b5b81ff6b1e44ff195a80ff225c83ff285966ff2e5064ffd5578cff1e5a83ff6b173fff704420ff164e41ff225048ff156373ff135f70ff427a9bff185d80ff491430ff166674ff346d79ff255664ff2d5050ffaa5e3aff823f48ff481134ff90214fff751c45ff7c5d47ff8a762fff75642eff157f76ff329cc2ff3fb5e7ff59a7b6ffa88d3fff87742fff751943ff14857dff12746cff2178a2ffa78b3eff76b3c4ff8c292cff208ca2ff1c8d9eff455e60ffebca61ff1e8896ff207987ff2f7782ff5e163eff836236ff36b8e5ff3ab6eeffa45d37ff995425ffa48a37ff23725fff631c46ff306f98ff247facff197bacff34b3ecff30b4edff337281ff257eaeff9f5f2bff9c5c21ff9f6126ff825227ff2376a3ff177c8fff1e6f82ff92476aff197283ff21c6b9ff7e184aff15798dff95823aff2074a2ff2677a4ff882452ff93285aff956028ff2d7caaff8f5722ff463a44ff106b76ff3dc3d3ff199ca9ff2c7ba0ff1b5f88ff20729fff29576fff248c9aff238a9cff175b7eff2677a2ff2a81a6ff2685a3ff885226ff965b29ff972c4eff1e748eff7c204cff126161ff1a7272ff60181dff70421cff784c28ff6b193eff79244cff7b5937ff6c1a3fff82262bff6e1b39ff6c1941ff256083ff383450ff651d44ff471532ff4a1c36ff185147ff185b80ff50202fff18597fff6e481fff6c4217ff6d1740ff1b5b81ff6b1d44ff195a80ff215b83ff275766ff235464ff165c7eff215d87ff68173eff704520ff144f41ff235148ff4192a6ff2e91a0ff447c9dff1b5a7eff4a1430ff156877ff356d79ff255664ff1d5250ff185042ff2e5d7aff6c1c1eff8c2150ff761a45ff7d5e40ff8a7830ff73652cff167e76ff136762ff5b1639ff947e31ffa98e40ff89742eff7f1b46ff65d6d2ff70dfe2ff2680acffa78c3bff8a7735ff8c2d30ff22759cff188392ff325977ff257da7ff2da3b6ff2296a6ff14808cff5d153bff9c5d23ff456560ff1d6c59ff8f633eff965c20ffa48a37ff247160ff621b43ff316f97ff237fabff207ba8ff23879eff12808aff337281ff277eaeffda863effbc6f27ffa16024ff85511fff2376a3ff167c8fff0e727fff1c6957ff186c65ff197486ff801c51ff257e91ff958339ff2173a2ff2778a5ff892754ff96295bff956028ff2d7eaaff905723ff473b48ff187f7cff7c662dff937e3aff591f40ff2d82afff3185b4ff7f723fff206f9dff278896ff258a9aff1d628cff2776a3ff5c223eff973062ff2b6252ff875021ff195a82ff206c99ff126161ff1a7573ff60181dff70421cff784d2bff6b1941ff7b2952ff7b5835ff7e6d30ff275568ff487688ff19587bff22608aff4d4d5fff9b2d58ff461431ff4f1c3aff196374ff1d6364ff72622bff796935ff6c4b1aff6b4117ff6c173fff1b5b81ff6b1d44ff195a80ff225c85ff285767ff235464ff165b80ff205c88ff68173eff997459ff144f41ff235148ff602626ff62191cff457d9eff1b5a7dff733752ff147380ff356d79ff255664ff1f686aff166865ff2c5e7aff6b1b1dff1d4d43ff73451aff6b1e35ffe3b46dff557f57ff148278ff116965ff5b153bff947e31ffb79a4affa18638ff7e1c47ff2b7097ff3f93c1ff8d3a6cffb03c6aff881b4bff8d2d30ff22759cff188392ff325976ff257da6ff227196ff9c5c1fff14808cff5c143bff9c5d23ff456661ff1b6b58ff387489ff93803cffa48a37ff257261ff631c43ff327099ff237fabff1e7ba7ff427d79ff15808cff337180ff7e2718ff93853dff277facff91591fff85511fff2376a3ff167c8fff158595ff2e937bff1d7c74ff187486ff1d7082ff247f93ff7a562cff2173a2ff2776a4ff8a2957ff992c5eff956028ff2f7eaeffa6652aff433b46ff187f7cff9a5a2bff772124ff5a1e3eff1d618eff2275a4ff7d713eff20709dff275569ff397184ff1d618cff2677a4ff542241ff327994ff267a76ff845022ff1f6890ff2a79a8ff24709dff74431cff611619ff174e40ff1b5e51ff295365ff316176ff716028ff7e6d2fff275568ff4a788bff1a5a80ff23618bff166262ff60181bff5f2842ff6d3150ff1b5880ff2b6470ff72622aff7c6a2fff716026ff245563ff6c1640ff195c81ff691b42ff4f90b5ff4881aaff9ab9b7ff9bbfccffa5bac9ff5c1618ff471230ff106563ff5f1a1cff6c353bff612829ff631a1dff467ea0ff195b7eff754a21ff147480ff336d79ff245764ff1e6669ff146865ff2a5d7bff6b1b1dff1d4d43ff71461aff681d40ff581738ff17776eff116571ff1a5c4bff5b153bff947f30ff157f77ff921f51ff7d1c47ff3580abff1e6f93ffa63966ff3d7879ff552f52ff8e2e33ff1e759dff198292ff335976ff247da7ff1e6f93ff9d5d20ff127e8bff763132ff9e5d20ff4c6e68ff1b6b58ff367286ff97823affa4893aff17828dff621b44ff377098ff237faaff1d8496ff4a8b6bff377489ff317283ffbda247ff9f9347ff2680abff91591fffa05f22ffa06530ff167a8fff158595ff276076ff177c8fff1a7587ff187082ff267f92ff7f5425ff1b8fa4ff1e8195ff6f563cff8c5827ff95602bff3080afff751d1dff463a4aff732125ff9d5f27ff80252eff6a3354ff1a618cff2275a2ff7b723eff216f9fff285568ff3a7286ff1d628dff2a78a3ff5e1c42ff337894ff1b7b7aff506e5aff867238ff77825aff24729eff71441aff5e1719ff184d42ff1c5e53ff295365ff326174ff716029ff7d6d2fff295568ff4d7b8eff5c5562ff3f5d73ff277887ff5b4924ff6f431dff24698cff1b6289ff225661ff746229ff7b692eff746229ff547a81ff6c1640ff195c81ff651c43ff67482fff44122dff77662bff73612bff65171bff5f1518ff471230ff0f6563ff64181cff6a363dff602826ff1c607fff3d85a9ff1a5d82ff784821ff714424ff36707cff265969ff1e696bff146963ff2a5d7bff6d1a1fff1e4e45ff8c204cff6a1c40ff571637ff17776fff187683ff185d4bff442e3aff947f32ff19887fffae275bffa2275cff3583afff1e6f93ff2d6455ff2a8d85ff593055ff5d112bff16808eff198192ff431631ff8f5620ff942252ff94313dff137f8dff7e3133ff9c5e1fff4f7169ff1b6b58ff367286ff9e893bffa48a35ff138390ff611a43ff367199ff237facff198996ff5f7b71ff9d1d5aff6a364aff1d6f5eff227866ff198295ffc98b3aff9e8865ffa16631ff167a8fff168594ff266379ff177c8fff1a7587ff953c68ff307ca8ff7f5428ff14807eff167e79ff824e1bff8d5728ff955f2aff3080afff741c1bff463a4cff7a2123ff9d5d28ff27709aff2b5c6eff1a618cff2275a2ff857135ff978239ff275569ff3a7286ff1d628dff2676a4ff20638cff337a95ff1a7a79ff506f5aff87733aff997e47ff71242aff72441aff8a5120ff174d43ff1c5e53ff295564ff335f72ff424d64ff295566ff295568ff4f7c8fff326a7dff236486ff23608bff5b4923ff71421dff6e1d43ff176361ff154c47ff746229ff7b692eff736128ff768372ff6c1640ff195c81ff651c43ff6a482dff44122aff776628ff73612bff46142fff481c34ff451232ff0f6563ff60191cff652d31ff4d2537ff1e5f82ff756b36ff265350ff774820ff714424ff6d1841ff265765ff176b65ff146963ff2a5d7bff6a1c1eff6d3348ff8c204cff681c3fff5c4269ff485871ff187683ff1a5c4bff43303bff947f32ff206675ff612a1eff957e31ff3384adff1f6f93ff2e6454ff2a8d84ff593055ff541338ff17818fff198192ff431631ff90561eff962153ff952455ff1c7e92ffc22d65fff02a7effef2a7bffed297affd82f80ffc07057ffa8893dff168491ff631941ff33709dff247faaffa48c3aff9a5d70ffe23e81ffce326cff377989ff1f6c99ff1b8293ff96843aff277e90ffa16631ff167a8fff168594ff266379ff177c8fff1a7587ff953c68ff307ca8ff7f5428ff14807eff167e79ff824e1bff8d5728ff955f2aff3080afff741c1bff463a4cff741e25ff7a2329ff27709aff2b5c6eff1e608bff2375a0ff837135ff978239ff275569ff3a7286ff1d628dff2676a4ff923963ff356678ff166774ff506f5aff87733aff997e47ff71242aff72441aff8a5120ff174d43ff1c5e53ff295564ff335f72ff424d64ff295566ff295568ff4f7c8fff326a7dff236486ff23608bff184f43ff70502dff6e1d42ff176361ff154c47ff746229ff7c6a2fff746227ff758170ff6a163dff1a5d82ff744549ff6b462bff70441cff7a6729ff746229ff491631ff461c33ff481332ff156564ff843b58ff7d1741ff811945ff8a1c4cff746c34ff275551ff774921ff6e4421ff6f1b44ff285864ff176a67ff156964ff295f7aff6b1d1fff6d3348ff8a224dff6d1d42ff206282ff1e7f8dff157785ff1d5d4dff43303bff947f32ff216776ff622c1fff978136ff3485adff1f7194ff2c6e5cff2b8c84ff583055ff511636ff745b78fff2297bffed2a7dffed2a79ffbf266aff952552ff297ea9ff813034ff802024ff28a0d6ff06719cff066b91ff066b91ff296954ff1d6c59ff631941ff3977a4ff237facffa78c3dff4a8a6fff206c66ff652046ff3b7a8bff2b80acff1b8395ff96843aff267d91ffa16631ff177a8fff168595ff266379ff187c91ff1a7486ff943c67ff2e7aa6ff7e5427ff13807dff177e7bff874f21ff8d5627ff94602cff307eaeff741f20ff922353ff752026ff7a2329ff27709bff295c6eff346d82ff2574a2ffb3953bffae8f31ffa5862fff436f7dff958341ff933865ff903961ff346479ff166173ff51705bff87733aff987e46ff73252bff72441aff885120ff194e46ff1e5f54ff1a6366ff2d767dff414d64ff275664ff285467ff4f798fff326880ff286483ff236087ff74622bff735029ff6d2042ff1c6a6aff154d45ff73632eff1b4e42ff746228ff74816fff6a1940ff1e577fff77461dff6b462bff70441cff6e1d40ff6c1f41ff1d626dff225d70ff71471cff287587ff881b4bff8a1a4bff8c1b4cff911d50ff8b2d47ff26544dff756932ff721f41ff6f1c44ff295866ff652e4fff216081ff1f6181ff245c81ff772146ff8a224eff6b203fff20668aff20808eff296978ff1d5d4dff44303aff947f32ff216773ff612c1fff967e36ff2f84a6ffd1327effee2a7bfff0297bfff5287bff415c86ff1c7c74ff1e8392ff431933ff1e7280ff932555ff952552ff2c83adff823237ff1f9dd6ff27afebff2ea6dfff0a749fff0973a0ff246a5aff1d6c57ff641a42ff337da5ff33788effaa8d3dff488b70ff236f69ff682047ff407a8cff2a7fb2ff1c8295ff96823aff257c91ff3a706fff177b8eff188696ff276a81ff187b90ff1a7589ff744a6fff2e7aa6ff7d5426ff14807cff177f7cff16798cff8d5627ff94612cff307eaeff762021ff952354ff762026ff792228ff2a729dff2a5f70ff356c82ff2674a4ffb69741ffcead40ffcead40ffcead40ffc5a543ff722246ff8f355cff33657bff296a7cff256c74ff2e7871ff481934ff71252bff72431cff865120ff1b4e44ff1e5f54ff196465ff1e7775ff424c64ff275664ff295568ff49798bff61272aff325f79ff236286ff75632dff734f2bff765740ff2d5a6bff194e46ff1e5b7fff1c4d45ff746229ff728475ff6b1940ff1f5980ff74461cff6c472dff6f431bff6f264eff613b64ff186470ff1e5e6dff71471cff605f89ff991d54ff9a1e54ff971e55ff971e55ff9b285aff25544dff776834ff721f40ff6c1d44ff295866ff652e4eff216081ff267296ff225c84ff772245ff8b234fff6d1f40ff266b90ff207e8dff296979ff1e5d4dff473137ffdd2e6cfff2297bffee2a7bffef2a7cffd63669ff23769dff2e7160ff288b83ff1e678dff1e6589ff1c7c73ff1f8494ff431939ff1e7280ff932555ff962654ff972855ff98353bff28b6eeff25afebff28b0ecff55c5f8ff58b4c9ff266b52ff1f6d5bff661b42ff327ba6ff397789ff312e3eff2e908cff28726dff682047ff407a8cff982856ff1e8396ff863338ff277b91ff218897ff177c8fff198696ff2576a1ff187b90ff1b7589ff366d81ff2c78a4ff7d5425ff15807cff167f7cff15798cff8d5627ff95602cff2e7eaeff722127ff902655ff692325ff7b242aff2a729dff2a5f70ff346c81ff336a7dffb69947ffcead40ffcead40ffcead40ff99833fff722145ff92345fff366379ff2f6787ff24686bff1f7a79ff491b35ff712529ff28648dff256b96ff1b4e46ff1f5f54ff1a6365ff207978ff444f65ff2a5667ff295568ff477689ff61282bff335f79ff246188ff75632dff734f2bff775740ff2d5a6bff1b4e44ff1f5c80ff1f4e48ff216677ff3e5f7cff6b1b3eff1d5980ff75471dff6b482eff70441eff285d82ff235c83ff1d6471ff1c606eff71481fff265e87ffc52c6dffb7346bffaa255fffa22059ff9c6c51ff25544cff786935ff721f42ff6c1d41ff2a5665ff632d4bff216082ff2d7ba4ff276283ff742346ff8a2350ff6c2143ff752729ff23808aff296a7affed2b7affed2b79ffa45f8dff448686ff347da3ff9a8135ff857e46ff25769cff297385ff288c8dff267aa2ff20668aff207c74ff1f8493ff49506cff1f737fff922555ff972755ff992a58ff87272cff7b252aff29b7f2ff31b7f3ff37c2f2ffa68a44ff186659ff22847bff671c42ff337ca8ff3c7a8cff333141ff31918bff378676ff661f46ff437a8dff972a57ff1f8999ff843034ff257c8eff1e8796ff178092ff1f919dff247ca5ff177d91ff1b7589ff346e81ff2977a3ff986128ff14807cff187d7bff18798bff8a5524ffa25f2aff651b43ff70222aff8f2655ff832e33ff2b749fff26719eff2a5c6eff356c7fff366a7effb89a4effcdad40ffd0ac40ff24837eff98833fff2c8784ff672327ff366479ff225d86ff26686bff217a7aff905b30ff6f2528ff29658dff236b96ff543639ff266a97ff1a6365ff1f7879ff215b82ff2a5869ff2a5667ff427282ff622a2eff45695fff702749ff786e3cff6c502dff77563dff2f5a6eff1c4e45ff205d81ff471d34ff236375ff3e5f7bff711f44ff1d5980ff75471dff6b492eff70441eff295e83ff345f67ff1d6471ff215e70ff704826ff776934ff375050ffffbfd8ffd63177ffbd376eff947c3eff21524aff786934ff724a26ff734924ff2b5766ff652b48ff246d69ff37656eff3c727fff772447ff502238ff2a6072ff76282aff20808aff23687aff217681ff6a2333ff7c3c4bff869361ff337ea3ff9a8135ff867e45ff28769dff22677aff357891ff277aa2ff22678aff237e76ff208695ff238695ff20737fff942755ff962956ff972a58ff85272dff7b272aff397789ff1d7f8bff9f622cff611e3fff16685bff21877eff802d30ff812529ff267d89ff5f2342ffa16431ff975f32ff661f46ff91325eff992b59ff83713bff883135ff257c8eff218897ff3d7a8cff20817fff248c89ff197e92ff197687ff356e81ff2b79a4ff985e26ff99843dff1a7083ff18798bff895424ff95632eff8d2453ff6f2225ff912755ff822d33ff2c759fff26719eff71282bff2d574dff4d2138ff602645ffd1af46ff1e7f7dff24817eff8c5828ff2d8583ff662227ff366378ff256088ff2b8482ff377183ff34685bff6f2427ff28638cff256c96ff57373cff266a95ff1c6466ff207675ff215b82ff3a7ca4ff407a86ff297475ff53433fff3c685dff762649ff315568ff695137ff76563bff305c6eff1e4e46ff215b80ff461f36ff246276ff43617cff205f80ff1f597eff764a20ff704b32ff704521ff265d80ff345e64ff1e6673ff205f72ff704826ff776a36ff2e5551ff256876ff286383ff4e2338ff937b3cff3d3239ff776a34ff724a26ff734925ff2a5866ff662a48ff236c66ff36656eff3e7382ff782548ff53253bff325f73ff762a2bff2e8794ff22707dff227880ff6e2434ff893443ff493b45ff2e7da1ff66745dff867e46ff28779eff22677bff33778fff2b7ba6ff216b8cff257d77ff276d90ff248694ff22747eff972a55ff9a2b5bff982c57ff86282cff7e272aff795071ff8f643effa1612cff642044ff19685cff1f8880ff792a2dff81262aff267d8aff602445ffa16432ff956032ff2e7ea4ff903058ff992d5aff84723fff863033ff5e6874ff2b91a5ff316a7dff20817fff218d86ff927b40ff20747fff366d80ff3080acffa0602bff98833cff1f7184ff197a8cff1d7588ff268496ff8b2454ff6f2426ff8f2853ff822c32ff2c759cff266f9cff72282bff2e584eff502237ff5f2645ff25648fff2979a4ff21817fff8a582dff2d8483ff662528ff34627aff266188ff2a8181ff387285ff33685cff702427ff29638dff256c96ff56373aff266b96ff2d729eff2d5950ff29668fff496d6bff377c84ff267475ff673742ff776434ff742749ff335868ff764e2eff73553bff325b70ff235247ff255d82ff482037ff246276ff41607bff235f81ff205a7fff2c5666ff47253cff704521ff265c84ff345e6cff776f42ff90695dff704828ff786b37ff2d5452ff336965ff2b6384ff502339ff967c3dff3d3239ff786b35ff724a27ff734925ff295866ff652947ff246d68ff36656eff3e7381ff4b2840ff5f2a45ff336072ff782c2eff2d8794ff24707cff247782ff672745ff8e2d53ff483944ff2e7ea1ff356270ff8d7d3aff2e7aa4ff297f8cff33778fff2b7598ff3c8d7cff268079ff846240ff248694ff22747eff652745ff347ca2ff992d58ff89272eff812a2fff9b2c58ff966238ffa1612dff642143ff226350ff298693ff782a2dff80292cff304d59ff622643ffa16432ff956133ff317fa5ff8f3058ff992d5aff857340ff882f33ff793e43ff30739aff40798cff218280ff228d86ff7c7a47ff939569ff376e82ff2c81adff616a4fff98833cff1f7184ff1b798cff206e80ff197b8dff8b2455ff722529ff902954ff802b31ff2c749cff27709dff73282bff2e584eff7c2b2eff276f6eff594b60ff305968ff386e82ff31696bff2c8583ff672629ff36637aff266188ff298180ff387285ff33685cff702427ff2a638dff256c96ff57383cff266b96ff2d729dff2c584eff28648bff496e6bff567471ff486370ff65343fff7a6536ff702848ff25706eff774f2fff805433ff315a70ff205147ff245c81ff462034ff256375ff45617bff357073ff375c68ff2c5665ff48263dff2b6389ff2e6087ff335e6dff777043ff8e6a5fff71492aff786b37ff2d544eff306561ff2c6487ff52243aff762c30ff3d3440ff7a6c36ff734b2bff744a28ff2b5866ff662947ff266e69ff37676fff3c717eff492b3fff4e273dff326174ff792d31ff507a81ff287684ff277884ff692848ff903055ff493a45ff317ea1ff356270ff917b39ff5b8793ff28828dff35758dff2c769aff656f54ff915c30ff975e2fff278793ff257682ff662847ff3881a8ff2e8895ff278898ff3083aeff992d58ff976237ffa26231ff91592eff246552ff2b8694ff79292eff80292dff364c57ff632745ffa36531ff956239ff337ea7ffa69047ff97833fff87733aff863033ff7a4045ff30749aff40798cff22827eff278f88ff2c78a4ff336479ff376e82ff376c7fff5e6a52ff9a863dff1f7183ff1b7a8dff206f83ff238799ff8b2553ff7d292eff982954ff812b2fff30759dff7f2850ff73292bff30584fff7f2c2cff28706dff5b4b5fff336e77ff396f7dff306a6bff2c8583ff662a2aff2e7577ff286187ff357e9eff3a7389ff2e6b63ff712529ff296e70ff286c98ff59383aff286d98ff2e719cff2b584eff28648bff4c6e6cff567272ff4c6371ff3d6b8bff796437ff387171ff297170ff734b2aff764c2eff46364cff23534bff265e83ff452135ff206373ff485e79ff387376ff3a5d68ff2d5766ff492940ff326286ff2b6086ff386a8dff266080ff773352ff724a2cff766b39ff2d554cff2d625dff2e6485ff57293fff5a4854ff395463ff786c38ff744b2bff744a28ff305a67ff682a47ff2a6e6bff7a693aff3d727fff472b3fff4e293dff346174ff7b3235ff622b2cff41626bff932f56ff702945ff9d3a5aff88866fff337fa7ff37626fff927d3bff772e31ff2e828fff606e4eff716a57ff8f2f55ff915c31ff965f35ff298798ff297686ff692b49ff3683aeff308a98ff268699ff2c7f8cff9a305aff926237ffa36332ff935c2fff2f715dff2e8694ff7b282eff802c30ff602744ff662c47ff9b335aff497088ff8f7b40ffa68f48ff998440ffa68b47ff853034ff884537ff843456ff40798cff288395ff436585ff3180abff35667cff387083ff386d80ff58776dff9e883dff1e7288ff1f7b8fff206f83ff238697ff245e53ff7d2b2dff297d90ff2e688fff31769eff7a284eff772a30ff345951ff802f34ff27706fff5e4e61ff298381ff8d783bff346c6bff2b8681ff5d4c61ff2b7673ff743a50ff7f4145ff317c92ff2a6b6cff524244ff2a6e6fff41506cff59383bff276c96ff2f719dff2b5850ff2a668fff537267ff347b88ff516675ff3d6c8bff7a6739ff3e7474ff2d6f6eff754c30ff764c2eff4b394fff296272ff265e83ff472337ff256375ff4a5f7aff387376ff4d263aff6a3e48ff502b37ff443149ff306082ff366a8cff2b5f80ff773551ff744b2bff7d713dff2e5651ff325951ff2e6586ff582a41ff5b4955ff3b5564ff7a6d39ff744e2cff744b29ff286182ff692b48ff2c6f6cff7a673cff4f5367ff4e2a3dff583d4aff366275ff7d3437ff632c2dff40626dff953158ff712a46ff805837ffa48a45ff337fa7ff37626fff927d3bff7e312bff308390ff606e4eff786b50ff8e3054ff8f5e34ff976036ff692f4cff5a2c42ff3781a8ff3683aaff328998ff2a879aff2d808dff9b315bff926337ffa36332ff965c32ff3384acff2f8894ff775e6bff923f31ff632845ff682f49ff99365dff407487ff917e42ffa79146ff9a813bffa58c4cff683249ff937f48ff8b3657ff328588ff288394ff486583ff337fabff37667dff3b7285ff386d80ff49758aff957d50ff207386ff268598ff226e83ff268798ff925c30ff7a5456ff297d90ff2e6792ff3077a4ff318187ff3a6c81ff6f2c2dff7c3038ff27706fff297071ff2b8280ff8d783bff346c6bff2e8581ff357aa7ff813153ff783f53ff7d4145ff337b92ff296b6bff534445ff2b6f6fff615f60ff6b5242ff286d96ff2f719bff83703dff49293cff7c6939ff2d6d6eff536776ff516b7eff836b4bff427578ff306b6bff754f33ff764c2eff4c3b50ff2a6473ff256778ff482438ff256274ff4c607aff3d7677ff512637ff663840ff512e3aff443347ff453d57ff36697eff744e30ff6e4652ff4a6369ff325c54ff2e564bff355b54ff6d3235ff5b2c42ff3a5f7cff306c84ff7e723cff744e2cff754c2cff2a6382ff672b4bff30706cff543041ff5e3045ff4f2c3aff594047ff3a6277ff823d42ff5d3f3dff3e646eff943357ff712c45ff805838ffa38c46ff337fa7ff306586ff6a314bffa88f43ff328592ff606e4eff796b51ff8d3354ffa36535ff976237ff6b324aff5b2f44ff3d83a8ff3e87aeff348a99ff318f9bff488e99ff9b325bff7f6942ffa36533ff956037ff3484acff357ca2ff467c8cffa46738ff652846ff66324cff9a375eff427284ff907c45ffaa934aff318a85ff89784aff69354cff978147ff8c3559ff2d8480ff318f89ff843736ff367ca7ff60413eff3c7386ff366d7eff4f7a8aff977c4dff288381ff2a5c59ff226f7fff278897ff9e6b5aff2a695bff2c7c90ff677e75ff3077a4ff2a8180ff3d6d82ff703030ff7d3236ff2c7270ff29706fff2c8281ff8c783fff3a6e6eff2e8583ff347aa5ff833356ff836855ff997c51ff337b92ff327083ff554246ff2f7070ff646858ff8c7e49ff2b6d97ff2f729bff84723eff4e2b3eff732d4bff306e6fff576b74ff566d7bff522e41ff45797fff326b6cff775035ff774d2fff4f4055ff2c6373ff427785ff4a2539ff286076ff4e657fff457b7bff6d3b3fff6c3a3cff50313dff4e2f3eff4c3d50ff376b7fff754f35ff68353aff436672ff6e354dff477977ff375c53ff6f3439ff5b2c42ff346281ff2b7088ff83713cff754f30ff764d2eff2f6384ff356574ff31716dff553142ff375d53ff8d8859ff594048ff3b6479ff743946ff4d4643ff445b52ff94365cff722e4aff86593dffa48d4aff357fa8ff306486ff6f334cffab8e43ff398893ff656e4fff617050ff557ca3ff3a887fff3e85aeff6b354dff5d3147ff4085acff407665ff368b99ff4386acff61334fffa44765ff366e5dff2e9087ff368a83ff3583acff387fa2ff487d8dffa3673aff635d76ff5b708fff98385eff467382ff917f47ffa7924dff338b87ff897a4aff6a374eff9a8448ff8a3959ff8f3f42ff5a4158ff2f8583ff387ba4ff743625ff337977ff31719bff4e5172ff997e50ff7b2e33ff2c5e5aff307161ff2d6e5fff6a304bff2a695bff307e92ff657c78ff31769fff2a8380ff3e6e83ff8e5e3bff78393cff5587a1ff5190a7ff358887ff818165ff3c7d85ff338283ff387ba5ff823655ff81714eff958046ff7d654eff357183ff376a6cff337a7aff686a5cff917d41ff456889ff33739dff5b7a70ff4d2f3fff742e4bff306e6fff6c3335ff593445ff533543ff396486ff406b8bff79523aff794e30ff514559ff2f6473ff457886ff4d273aff286275ff536882ff4c7f80ff6f4043ff6e3e41ff563540ff502f40ff504054ff3a6985ff3d6e79ff69373bff456875ff6f384fff507d7bff385e54ff6e363aff533744ff326383ff397896ff785234ff765032ff774e31ff75354eff366675ff387574ff583243ff4a6c76ff426d73ff4e6d89ff346689ff773a47ff4e4844ff415e55ff4181a5ff376a8cff4881a4ffa48d4bff3a80a9ff326488ff6d3650ff573546ff3e8a95ff8d8c5aff647152ff3f949aff3d877fff4186adff6f3851ff613449ff4485abff447868ff3e8f9eff4a89aeff5f3650ff327362ff3a7061ff744157ff964662ff3b7061ff90393cff4f8191ff9b7151ff3e8997ff3c83aaff9a3a61ff764f56ff8f7e48ffaa934eff368b88ff92804bff68394fff9c8549ff8c3b5cff914244ff5d435aff4c7080ff3b7ba8ff743729ff347978ff317394ff515273ff9e8454ff7b3033ff305f5dff317263ff52314eff6c324dff2e6a5cff93613aff617d83ff547a70ff318582ff3f6f69ff8c5f3fff783b3eff5688a2ff3e7ba1ff8f3d5bff4b7fa2ff3978a2ff346990ff4a79a0ff853857ff837251ff958047ff8d5e3cff357183ff396b6eff337c7aff676c5eff917d41ff683f45ff32729dff387b8fff4f3142ff74304dff306e6fff6f3536ff5b3749ff583745ff396486ff416b8bff75533eff774e32ff544a5eff2e6574ff457886ff4f293aff70444aff477494ff598a8cff704447ff714246ff5d424eff533243ff4c7290ff396889ff3f707bff6b3b3fff4a6d79ff73374eff588482ff395f56ff6d393cff543847ff3f6071ff3c7799ff795437ff3b6b88ff765033ff763850ff386773ff42807eff6a3c4fff4e6f7aff476e73ff587898ff573644ff754045ff656b56ff3c6156ff3c6a64ff88784bff4d86a6ff3b5e58ff3d80aaff7d6280ff6d384dff5a374aff386c87ffa78f47ff657254ff3c7479ff538cadff468ab3ff398c98ff587e87ff4989afff4b7d6aff966048ff4e89adff5e3853ff337461ff3d7162ff75465bff984a65ff417260ff8e3c3fff8a4a4cffa8734aff4e8fb3ffb09858ff9c3d64ff7b5565ff4c788cffab944eff378b87ffa7915bff7d403fff9a7956ff8d3d5dff954648ff61465eff55808dff926140ff773931ff387c7cff408a97ff348580ff9d8a45ff566c7bff416e71ff377872ff8a3d5fff3a6b5fff3b8f88ff93613aff637f86ff5c7d74ff348885ff3f6f69ff8d6040ff793e40ff818181ff417ea3ff923f5eff698898ff3c78a3ff8e3e5dff956574ff853a56ff583b48ff613e51ff8e5f3eff367385ff3c678bff858767ff6a6e62ff917d42ff366a6cff33759dff3f6789ff503444ff75314cff326d6fff6b3839ff7d6d47ff573a46ff396587ff416b8bff355a52ff3e5d6cff5a5164ff386a78ff547285ff683334ff754c52ff66464eff708c82ff71484cff70474aff654855ff553543ff527894ff3c6486ff41727cff6f4043ff3f5d54ff416987ff618b8aff3b6057ff703d40ff583b4aff42606eff407a9aff795538ff3e6c89ff785134ff743c52ff326975ff498282ff626267ff597a85ff4f7578ff5c7f9dff573846ff754245ff666d5bff406359ff3e6a64ff4e7281ff5188a8ff3c5f59ff437391ff9e526dff5e5f78ff497e9cff3e6985ffa79047ff866854ff40767cff5c8eb3ff4c85a8ff3e8a98ff5a8089ff4f8aafff4f7f6eff4b7b74ff528db1ff4388b2ff557c85ff4a909cff794d5fffa1526cff677b81ff8f3f41ff8f4f53ff958c7dff904d4aff6d6e80ff9b3f62ff7e5a6cff508cacffae9453ff657f85ffa99259ff814140ff6b3d51ffa25071ff9b4163ff614b61ff588391ff9f6f4eff7b3937ff3a7b7aff438c9aff948348ff9e8943ff427385ff3d677aff4d859fff903a5dff427668ff3e918bff95613fff647f87ff648074ff3b8b89ff42726dff8d6241ff85575cff8b6f61ff7c3f59ff864c67ff6e8b9aff3e789eff407d8eff9b6f7eff873c58ff5c3f4aff614554ff8f5e42ff8a435eff3d688cff87896aff686e65ff8f7d43ff3a6c6fff38759fff406687ff4f3947ff895752ff6a949fff6c393dff7e6f49ff5a3b47ff3d6586ff436b8eff355a52ff3f5e6eff60576aff7d5d70ff5d7885ff3f5e6bff775257ff684c56ff754e37ff744c53ff724d4fff7e545bff435e5bff577d9bff3f6584ff477581ff6c4347ff415f59ff436c87ff6a9392ff40625bff52707aff804e64ff3f6056ff497fa1ff7c553eff436f8cff795335ff764056ff376a7aff97735cff684d5dff5e7d88ff875a5eff5a85a2ff5c7f75ff876249ff6d6f5cff43645aff406b65ff4e7486ff598cabff3d625cff487491ff546e82ff5b8ca9ff4b7e9eff4c697bffae924cff79615bff43777cff6698b8ff904f50ff4d87a6ff5f848eff578cb4ff704354ff4e7e77ff538fb3ff478ab4ff6e797dff4e929eff82546affac9656ff924464ffad795affa3815dff408d9aff537b8aff717387ff9d7b66ff795e6dff4e8ab2ff3d8f8aff96415effa9945fff804243ff703e55ff60768aff966641ff537687ff5b8692ffa27353ff3c6d5fff417e7dff358294ff95834affad9d5bff427385ff548ca3ff3e7062ff8f3d5eff497a6eff3d726bff956443ff537e9affa48f57ff3a7789ff45736eff8c6344ff81a29dff917165ff47665fff6c767eff7692a1ff4b7586ff428092ff824649ff966744ff717a64ff45707eff52827aff8a4460ff4d80a5ff9b8954ff476970ff7e825dff517293ff38749eff446a8aff533e4dff8e7d49ff6e96a0ff647181ff826f48ff5a3e4bff496782ff7c5643ff475e5dff4f6e89ff705c68ff84657bff627c8aff405f6dff704056ff6d3e43ff77523aff716974ff673a3bff825d60ff80734bff5d839bff416886ff4c7682ff47747eff817452ff496d89ff769c9dff44645eff577781ff476779ff43625bff456b89ff7d5841ff507792ff8a716eff774358ff457673ffa47f70ff857957ff48708dff896063ff6089a6ff68897fff88634aff727461ff46675dff426c65ff4c718bff6393adff42645cff4a7693ff577281ff6091aeff5281a1ff526d7dffa87f65ffac9b66ff588378ff6c9bbbff945455ff77525eff739c96ff5b92b8ff714959ff547f7aff878ca5ff75ada7ff996564ff52949aff885971ffad9756ff934764ffb17e61ff995069ff6d7f9bff507d8eff6b8a96ff9f806dff716670ff4f88b4ff548796ff4a81a8ffac9662ff824848ff87494bff647e83ff996845ff4a7888ff638896ffa37959ff6096beff43807fff518489ff684955ff4582a9ff664050ff854245ff447fa9ff92405fff537e70ff477e7dff956544ff4c85acff72495dff3f798cff59716bff8e664aff779797ff5b5263ff4b6760ff707b81ff728f9fff507888ff4e82abff844749ff964e69ff767f69ff477281ff5d8e96ff8b465dff526d79ff767b70ff386260ff56808dff587a97ff467695ff4a6b8cff68677fff7e465dff749ba6ff497d8eff754d4dff5e414eff8b785bff486d91ff604550ff536e8aff76606eff466271ff6a8391ff44616fff784559ff714145ff4b697dff6d8ba4ff608591ff766b65ff63859bff467374ff5a788dff4f7886ff7c5c4aff837855ff4d6f8cff744d4fff4a665eff5e787eff587a94ff47635cff4b6d8aff598591ff6f5864ff887c56ff4f6977ff5e4953ff6286a0ff877c57ff4a7390ff8b6567ff658ca8ff66818cff698388ff7c7866ff628379ff456c66ff50748dff968761ff47665dff507995ff5c7779ff6d94b3ff8e7c6dff4f6d81ffab8367ff667965ff6a8e80ff8a5e5eff94585bff795763ff629299ffa4a38eff4d7471ff5e9084ff8f5355ff81b2aeffa56e70ff7b8279ff5b8db0ff608885ff944d64ff618796ff7d6a65ff8f4b4dff517c8eff698ca1ff4c968eff7cb5acff568cb5ff6999bbffa6cecaffae9a65ff854a4aff894d50ff9d9699ff9c6b49ff6da9a5ff537c8bff8d4c63ff689abfff97566eff7d6d60ff874749ff4981abff5b4758ff894549ff9b8957ff438987ff578374ff438083ff966547ff548ab1ff754d60ff5185adff768fa7ff5283a8ff7a9f9eff606e76ff705662ff727e84ff778ea0ff547989ff5284afff864c50ff9a506bff78806bff4a7483ff608e96ff8b4a61ff556e7bff6d8382ff934f68ff6b7767ff5c7d9aff5c7993ff517c9dff735153ff7a4b5bff477888ff4b7e8eff785253ff5d454fff8e7b60ff4a6e8dff614954ff7c5946ff536b67ff496371ff537389ff70494dff654b59ff7190a9ff627d8cff7a95acff628894ff766e69ff6689a3ff537476ff607d8eff557d88ff4f6f8aff847958ff577e7cff735a5cff4d6961ff556d69ff5c7c97ff557b94ff50708bff708796ff715e61ff8c805cff626f7cff624d58ff747365ff8a7d5cff537794ff645258ff6a8fabff6b8c93ff648d96ff5c8583ff85aab5ff6b807dff567a93ff728f97ff819d94ff567c99ff607b7bff769dbdffa67687ff6b8c8aff826773ff5d7973ff678a85ff8eb8c3ff705e66ff5b90b3ff64939bff5c8ca9ff5d6b68ff749388ff776270ff6491adffb28282ffab7d7cff5e8fadff628a85ff955062ff6d8f98ff7e6051ff8e4d4eff558091ff6f8fa4ff6a9083ff98c8c2ffc8a5b7ff709cbfff8c5757ff6b8a96ff4e8a9aff895054ffc0a08cff9c6c46ff5887a0ff587b71ff8f4f65ff709fc5ffb47489ff887060ff5685a5ff6794b5ff4f8b86ffa96b6cff9b8b5affccb9b0ffa66c5bff96766aff507367ff558cb1ff785366ff6687a4ff889393ff5a87a6ff547c73ff5f9090ff6d8e9bff698498ff778293ff5a736dff57746dff855051ff60928dff7b836fff7b5e66ff847f77ff926c56ff59717eff738886ff94526aff77837eff5a7366ff597792ff547ea2ff785456ff7e5161ff7b6971ff7a919fff7b5554ffac9ea4ff8b6f5dff6c6b7dff63505bff7b5d48ff576e6aff4e6773ff507191ff507381ff644e5aff7591adff698190ff7d98afff668c97ff727774ff6c8ba2ff6d8397ff6d778cff69818cff928679ff7a877aff5b817fff5c7793ff556e68ff6e7f84ff60767fff7399a0ff9e7a89ff8b7461ff837073ff6b7677ff656871ff67525bff716063ff7390a8ff7399a2ff805b5bff997a88ff7e7a7dff8f928bff6b8b8cff88807eff71837cff87aaa9ff77919bff7d979eff6788a2ff637d7eff8a606fff957969ff78948bff9c6675ff679e96ff779db5ff9dc3caff68867dff6094b6ff64969cff678fa7ff7e5a67ff829f94ff7b6675ff856a73ffc0918fff9b6c6dff7c787dff678d89ff955265ff7a97a0ff90687fffa67650ffb28b80ff8c7580ff6d8278ffb5dedaffd2a3b5fffffffdff935c5dff7a5a68ff568b9cff8e5658ffd4ae9cff96becaff5b8db1ff7a5563ff92546affbe8396ffbb8393ff93586dff5585a9ff5d86a7ff5c7f79ff8c9b89ff689694ff775866ff8f949eff9c6d5fff5784a8ff95a092ff517b9cff96566effa5ada8ff5e8f8eff5c7f76ff617971ff5d82a1ff718ba1ff7e8c9bff637675ff5a7770ff828592ff659494ff7e8672ff8d5f60ff8a7761ff5c7670ff5a7585ff778b8dff90586eff5c86aaff668aabff5d819fff958865ff8e6f5fff825466ff7e6d77ff7a93a0ff7e5a5aff6c7b7aff8a725fff7c5d5fff7e6064ff8297a0ff5d7570ff526d64ff4d7678ff577e8aff6b515bff897065ff60756eff7f99b0ff5d727cff728c92ff677e97ff7c94a8ff687f95ff819199ff9d9a8dff758c88ff648687ffa59d88ff7a93abff6f879bff70878dff81a5acff7e99a9ffa28575ff89857dff6d7f8bff637f88ff7f9194ff76656bff91707aff789ba3ff936367ff74646aff736c6effac8693ff9c7880ffa68a7aff72817cffecf3f0ff9f716cff7e959aff708eaaff9d7c7eff8e6675ff9e8273ff7f9b90ffabb0b6ffd4ecebff8d8171ff7b918aff8d9780ff87636dff989384ff6d95aaffa2676effc5a089ff669f9bffa36b75ffbba5a6ffa98774ff9a5e65ff9c7678ffaa9571ff63847dff979178ffb6ae92ffb38697fffffffdffa47f82ffcfb8c2ff94b3b0fffffffdff6b93b3ff8aadcaffd9d2b8ffab7e8dffd2ada8ffacd2ddffdaa9bdff61939eff9980a0ffa399a7ffb08f77ff8390adff5f8376ff6690b1ff63837cffccbb98ff9c6475ffa98588ff99979bff9a8679ff5d88a9ff9e9f91ff597f9dff638aa6ff8b7678ff689191ff698589ff677f78fffffffeff6a7a7aff8a6260ff9b7081ff749c96ff85686cff8f9392ff778b87ff916566ff648586ff6d8080ff8d858fff7c848cff687f7cff818691ff6b86a0ff63859fff8a716fff917361ff788080ff8d727bff7f92a3ff826160ff738286ff638282ff628a87ff826666ff778891fff9fffdff5a8081ff876d5cfffffffdff847576ff887a76fffffffdfff1f6f8fffbfefffffffffdfffffffdff806b6cfff7f7f6fffffffdffd1cabffff9fffffffcfefcff8b7c7dfffffffdfffffffdfffffffcfffefffffffdfffdfffffffdfffffffdfff8ffffffe4ebebffb0b4b0ffdfd0cafffffffdfffffffdffad8b8bff7b696cff81777affa98a91ff9d7c81ff729e97ffa6c0bcfffffffdfffffdf4ffc4b0a3fffffffcff7e9389ffb28d77fffefefdff9d7c7efffffffffffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffffffffffdffb3aa82fffefffdffb18a7effaf808fffd9e8eaffae8d7ffffefcf1fffffef8fffefefbfffffffdfffffffdffab8788fffffffdfffffffdfffffffdffc5d7e4ffecf7fafffffffdfffffffdfffffffdfffffffdfffffefdfffffffdfffaffffff96a0abffb59480fffffffdffb1a9adff6d92b4fffffefffffffffdfffffffffffffffdfffffffdfffffffdff628cadffa59a73ffe5f2f1ff81a0a8fffffffefffffffdfffffffdfffffffdfffffffdfffffffdfffffffffffffffdfffffffdfffffffdffc7b9baffc4d6cfff926b6dfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffaeab9dfff7fffefffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffefdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff849c75ff869c76ff879b73ff8c9967ffa19f64ffbfb06cffc8b163ffcab05fffc9af5cffcfb05dffb5a65fff97955dff87956cff859370ff83936fff83916bff8ca282ffb2cbacff92b1a1ff4c96bbff4795bdff4395beff4194beff3d90baff3e8fb9ff4793baff7072a6ff7e233dffa45c7cffad3064ffbb346bffbe356dffbe366dffbe396dffbf3c6fffc03e72ffc24274ffc24676ffc64b7affc6507bffc3537effb24971ffa9466cffa7486bff903058ff861f4dffbd839dff936c40ffb19644ffb49743ffb69948ffb99c4cffba9f4fffbda153ffbda355ffbea358ffc0a556ffbfa555ffbfa454ffc4a651ff737844ff67794bff788859ffbdbe90ff50a6b4ff61bfcdff6fd5e3ff63cfdfff58cbdaff4fc7d6ff43becfff238fa2ff197889ff0e6170ff23708dff4986b2ff55b7e9ff55c0f5ff4cbbf0ff44b7efff5dabbfff488374ff29705fff368e89ff44a9b5ff3aa9b7ff437897ff88839fff8f5c6dff9c363bffa0353bff9f3438ff5f1a3fff7d2651ff7e2854ff802a54ff812c55ff832f57ff7c3056ff343d46ff885a25ffbb7130ffc07639ffc57e43ffc9854fffac6f39ffc99059ffe98279ffdc417cffe04d84ffe85f8ffff278a0fff297b6ff8a92abff6b1f42ff741b41ff5c4d50ff5d9271ff669777ff4d866cff418673ff327d73ff246c6cff286e6fff277374ff397f8cff57a9b8ff499fc0ff473d53ff59a4bdff6fc5e3ff54b0ceff3c94b1ff6899a8ff9590b1ff9584abff3e9da5ff2e95a7ff467e9dffae4f77ffaa3665ffa52b5fff66464bff7a8356ff868c5dff3a99c5ff3498c6ff2d91bdff1a7e9bff31b5c6ff43c6d8ff6c808dff885b57ffac2e4affab2e4aff92264bff701e48ff902358ff922359ff8d2258ff90275aff95275dff902658ff377c6eff5d7e5affab512aff88a386ff93a98fffa0b099ffb98c5cffbe8e3affc5943fff93b298ff97af99ff3b93b9ff46bcd0ff63d0e3ff6a7f8cffa03458ffc14575ffcc6288ffb77f90ff459798ffc4c2a0ffd7c29fff429cabff70d3e2ff70d5e3ff37a0b1ff176987ff635b6fff524f65ff848a9aff73bfdbff79cffcff5cc1f4ff4fb7daff55aa90ff2c7c80ff72acbbff369f96ff318e9eff358ebbff907db8ffde6565ffe15f5cff588097ff458899ff3c7f90ff672550ff596598ff3d7299ff31c0d2ff2cc0d1ff2dbbcdffb56c28ffc1732affbd7028ff9f3c39ff871a34ff731418ffb42666ffda3e7dffc6306dffc6306fffde387dffe13e80ff90466fff88514affa84b2dff684a4aff504d67ff574e69ffb56c2bffbc7434ffc87e41ff2b87b8ff2b7eacff0c6e82ff3390c2ff4ea2cfff648a94ffbc9f9eff9d4344ff1f7789ff3f9db0ff2c8fa1ff49745dffa3a297ffb48a9cffb6899dff4e9eb0ff4fa0b1ff258391ffafa1afffbfadb5ff3b9caeff9dc8b4ff98cfb2ffd3944fffac692eff791843ff4094bfff2b86b5ff3e454cff4b575cff1e9a92ff1c8186ff43b9f1ff3db6efff399bbfff54a9bcff787095ffbc2867ffb22461ff6a456aff327686ff3d6763ff2d6d7cff7d7050ffe48832ffe38732ff821a20ff8a181eff82171cffc66830ffde535fffd02b70ffb84b4cffbf7228ff9a7354ff5b707aff7b644eff9a5b1cff805f45ffc4383effcc4b4fff7a8056ff9cb085ffad833dff536e5eff186d9aff3eb9ceff399eb1ff893c62ff275462ff0b7877ff6c5a66ff4ca9b5ff6ad4e5ff8ac2c9ffdede9cff8f5c51fffba6c3ffffc8deffeae2e8ffdbfefaffa2eeecff4698b9ff499fadff412241ff464048ffa2b791ff737a6dffab6628ffeb6f76ffd63b7aff7f234fff6c1e48ff924845ff95462fff297c67ff1a5055ff317181ff54a9bdff54829cff8c4d7effa54a80ff936899ff5298a5ff567b68ff956869ff599cafff875648ffa85224ff95896bff8d3c4cffc42c32ffc42c32ffa02049ff564a7bff3377a6ff2c6b87ff2bc2b8ff326c83ff1a78a6ff4f7f8cffa18864ff67999aff55abbfffb1ae67ffe09c48ff90b693ff90bb8cff4e8b96ff3fa7dbff48aee2ff4fa5c8ff67b3c7ff52a5a7ff84dfd7ff498b9dff869778ffc0a658ff9f6f5bffb67790ff874463ffadb2b2ff603636ff651217ff6ebaddff87d2faff1c6790ff437a97ff8b3e61ff776069ff187a8bff276272ffb0363cff837d5fff609eb1ff903365ff872155ff83926cffb86f29ff928449ff3f8ba0ff4ea4b9ff3f8c9fff567592ffb82869ffa74c4eff7f6d29ff496160ff653635ff8f194dffa52227ff9e2025ff6e1419ff5e5e69ff2ca8deff35b6eeff9f3b65ffdc2d77ff76558fff309cccff4a4675ff7e164dff664051ff33b5ebff37b6efff13778dff0c8984ffa38a3affaf943dff8b722fff62a181ff489e96ff1e79a0ff40ace1ff636885ffa03343ffca9c57ffc4ab57ff58a482ff44aba5ff268180ff5cb6b1ff3da099ff9397a4ff2d8492ff13577effbe5e5fffc26162ff80224eff0d4c41ff1b5d61ff487e8fff278d89ffac6931ff2493a4ff248593ff07606fff0f5f6eff1b685fff674d5fffa4205aff278ab7ff7e9894ff786e39ff372d2aff2b6676ff1a6e72ff0a726dff515c4eff81896cffb99641ff863152ff912027ffb72364ffba2548ffb22334ffb12329ff615763ff9a8b42ffa3692fff83395eff7c629dff66a7baff55a7b6ff5c7088ff8a5435ffd77d28ffc67529ff1b76a6ff1f8eacff29aeb6ffb18c3cffa66f33ffa28538ffc4a748ff91985fff63877eff498e9cff6a6163ff5a1037ff3d3051ffb49842ff9b823aff9c8c44ff67a27cff52c7ddff3393adff238d92ff2f99abff3c8ebaff3f94c3ff823b2dffba8089ff337667ff367d6cff2a8883ff4e8690ffb95836ff5e6365ff58747fff2aaebdff2497a4ff217c66ffa16325ff9d2258ff8071aeff30a8dcff248685ff7c3f3bff468897ff25acb0ff129f94ff54865aff197198ff146086ff28707eff786664ff866eafffb92364ff891c51ff57596eff199caeffb3953cffab8e36ff453b5fff17bdceff2994b6ff2a94b1ff48a7c1ff5f8a75ffac7d65ff4ca2c0ff309cb7ff2e87b5ff2ea4d9ffc67a37ffc6454cff757253ff7fa475ff6d8168ffe68c3fff708b69ff35bfb4ff544f78ff2d4d67ff467172ff587365ff8e976aff539674ff4aadb9ff35a3a1ff49b8b5ff54bbefff47a8d9ff646557ff724314ff66533cff52634fff9b6d84ffa17598ff196085ff165881ff4e776fff2d86b6ff23597bff30727fff125647ff1e4c3cffa5223aff982249ff470a2eff4b3254ff603248ff661920ff25a290ff1d7e66ff4b7e53ff2ba3b2ff2596a6ff5490a6ff7b7997ff3191b7ffa62e6bff637fb9ff2197acff5a9386ff61a07fffb96d51ff78144aff435a69ff25868aff0f8a81ff2581aaff317386ff1f7687ff1d8c9dff565a7dff574b80ff90551dff905b45ffab6848ff156b61ff2aaabaff4f3e57ff580e3aff6d7848ffc3a446ff307198ff29758bff598599ff347893ff509fb3ff358c79ff816d2aff1f889cff218da3ff49b6ecff145c83ffa88b68ff9f7a67ff7f3028ff8d4728ffb27a37ff943c4dff2780acff2b8cbfff807d48ff1c6979ff2786b6ff0d4f41ff1c6b58ff195f51ff2487b6ffa04c3fff7c1e45ff3d5e73ffc7632aff664855ff235765ff18a899ff1e8069ff1a8d7cff217879ff217068ff731548ff6b7486ff595565ff3584a5ff3b6371ff522c50ff2597a7ff4b71a1ff554772ff696266ff5f7e7fff1ea2b0ff397186ff588791ff508b89ff1d9cbaffbb5144ff2996caff579db1ff276a4eff858751ff78a368ff7f3423ff642f39ff7f2353ff258b7fff2a90c2ff497e9fff296175ff71535aff2890b8ff2d99c7ff5e8558ffb89a40ff8e9361ff2b708aff2c6684ff6c8987ffb06a2cff4f4445ff94282bffb97752ffa8944dff278abcff328bb2ff1f7596ff298285ff237863ffa14c2fff459281ff469587ff3b8072ff147c7effb33d55ffbab170ff30869dff1e728cff3aacc8ff5896a2ff8a7a3fff1b6654ff209e9fff45a192ff38907fff0f7f78ff1b6e95ff369d96ff2ab2c2ff406e89ff782656ff408fa3ff47879fff158a9cff3f5672ff41486cff2998ccff2998ccff647280ff695d63ff217ea9ff358393ff38646dff176a59ff525c51ff2a4647ff216953ff9c4d25ff4a6571ff2c867eff13807eff761f4cff3f6273ff69766fff485969ff627b5dff6c8861ff32a6a4ff1f938dffad6729ff2d5e75ff3d6183ff7a4516ff784a26ff1a8681ff618c92ff7e5953ff534f4eff55867bff1f5471ff337984ff1f7063ff374b6aff306a82ff366a79ff468083ff1c857fff229fa4ff1d666bff62634cff6c726cff864a5cff592a34ff918359ff9f6c34ff267462ff355860ff5f9566ff347360ff41798cff7c909cff4e7883ff537ca3ff26a9a0ffac365bff2d99ccff538483ff527d88ffa62539ff634c71ff15716aff267caaff487da4ff357996ff24b2d0ff99252bff64575bff3e8483ff972931ff3d595eff687a61ffe6a949ff4f8c8bff38a7a2ff429091ff4c5a77ff4a7f99ffb76e2bff2994b4ff217ba1ff438d89ff3a6a63ff3c4a4cff761c20ff426167ff1f707aff83443dff6d5a32ff701c37ff68282fff511535ff3d446aff24607bff4b4b4eff5c524fff4d6776ff1d5a81ff385065ff635077ff6b4b4aff2b8478ff333851ff1f6589ff274151ff525664ff624536ff572138ffb7714cff83763dff39866bff3190bcff889d76ff7c4f41ff117b74ff64826eff6a6275ff1a8496ff8e8147ff34686fff694c43ff37888eff5e97b3ff9a6031ff6d3956ff278c93ff2d93c4ff2e83a2ff438e93ff836d4eff426e7fff2b7594ff565874ff526377ff4d645cff2174a2ff8d2153ff517064ff427a71ff1a8093ff1f799cff1d6a95ff1f6b7fff1b6f8cff2675a0ff556661ff765445ff4f4662ff1f686cff69523aff4c5146ff6a5c44ff6d1c33ff6b1a40ff294e75ff3d4259ff294f58ff325169ff5e5339ff6c2c2dff443f5eff1f5b80ff27586bff1a5b81ff6b3639ff1c4f45ff495963ff25678bff3a495dff2b606fff155c54ff563947ff69343dff947143ff38785eff363e4effa0883aff874a3bff4faec2ff855d6cff883733ff1b7b96ff255c7dff3d8082ff374962ff6d6646ff426a59ff9c7a31ff464852ff2a7da9ff267c9bff277685ff7d6c4fff846947ff54625eff15798bff1e796cff36637cff517362ff2275a2ff8d2354ff597074ff655338ff516e55ff6e3637ff2876a3ff46727cff2a7689ff226c97ff5b3452ff5b6142ff1f6894ff306364ff512f26ff4b4549ff645147ff55614dff316987ff325974ff68203bff3b415dff445d44ff79662cff523d56ff434060ff515d72ff8a9178ff703d43ff2c3a49ff6c2a2eff4b2e36ff23688bff5d5236ff2b6170ff146864ff563746ff56413eff5e1b3cff167175ff32454cff547e54ff952252ff2679a0ff4d6c70ff6b1c37ff197e91ff444952ff77464fff475157ff716a49ff266e6eff9e8634ff3d526dff2e7ea8ff406e82ff585b79ff618456ff677a6bff9d6a3aff147f8fff20748eff3b6781ff496762ff18838dff83552bff5a7174ff4f3230ff893a28ff4f4863ff206a96ff69765bff316478ff216c98ff2f546fff3e7260ff7d724dff5f463fff454030ff22585bff475151ff3f5b5aff4a6e80ff276581ff6d451fff2e536eff42563bff78662dff5d465bff494b64ff5e3e34ff74632aff421735ff2d3b49ff6e1e35ff5c2d4dff516041ff744720ff493750ff146964ff583745ff792143ff52385cff247383ff2b5258ff59724fff947238ff27789fff307e73ff691944ff835584ff913851ff952152ff894674ffa3427aff5a5389ff5a7a59ff3f4c5dff2e7eabff967661ff733259ff3d6e8fff5d8365ff606f5eff148090ff21748eff5a5879ff4d6767ff147e7bff895324ff597174ff682a33ff7a2027ff296688ff276d93ffa08534ff517068ff5b6577ff62516eff3a665eff8c7345ff703220ff4f4f31ff1f5d5cff3d4957ff295568ff3e7489ff246084ff5a502dff404453ff43573aff475838ff5e465cff474f4eff664b31ff682a4fff1e6171ff754f4bff901c50ff921c50ff5b4d4eff73433aff463a54ff434c6dff226185ff7d2147ff474467ff287786ff5a4b5effa34f65ffba6152ff9d5480ff8e5577ff26698eff1b7c81ff2a4557ff942553ff763d57ff25abe8ff35a8daff2f7978ff41454eff317a99ff4e816eff444254ff5f5f82ff596f66ff297c89ff167f91ff207793ff3b6b83ff4e6768ff167d7aff506757ff577175ff7a2436ff742227ff296687ff306e88ffc3a242ffceac40ff905a43ff624e6cff266875ff374953ff5e3b3dff375650ff1c625dff37555cff295567ff554d58ff266186ff705529ff505f63ff1b5462ff2a4c5aff4c3c5fff484f4dff664a32ff2b5d7aff1d6373ff60553effbb527cffa2255cff586847ff754e32ff4a454dff434d63ff2f6d83ff6f2344ff62333eff556583ff823b5cff596f6dff66806dff4c7a7dff2a7c8cff246e95ff1e7d82ff2b7483ff952654ff8f2941ff555e74ff5293a0ff536a58ff4b4f56ff43687bff595c56ff64464eff873c63ff6b5753ff248194ff25828cff1f8092ff2a7488ff5a6e6cff387c6eff526757ff844143ff6e283bff565064ff3c5a75ff375461ffae8946ff518e71ff5e785cff4d444fff276a80ff46685dff4d4359ff425d72ff20687fff1f697cff33677bff46585bff5d4956ff62573fff505d61ff1d5461ff353f54ff2a6080ff365462ff654031ff325f78ff4f625eff73582cff2b5e5bff3c425eff69684fff755a2cff4d4f46ff424e58ff346975ff5c2740ff58454aff277a86ff4e4e60ff643f4cff49767cff547b77ff2d7b93ff277b93ff3d716dff257c8bff713c64ff8f2a41ff82354cff9b602eff434a52ff545559ff58535aff80463aff5f6f72ff922d57ff81523cff476f82ff2d7981ff588461ff3d757dff597571ff5a7a60ff1b7689ff525070ff702a3dff565065ff4d4c65ff454041ff414b64ff2d7084ff437166ff4d4551ff297285ff346767ff4d435aff455f74ff2b709bff2a5f71ff426e72ff4a5661ff74443dff51594fff555b59ff225564ff354154ff346977ff2f5a67ff3b4560ff316381ff67565aff745a2fff2d5c56ff404460ff554a56ff755a2eff4f5147ff454d59ff496b6aff4c293aff57464fff466168ff663c58ff794d5aff3d6f7dff7d6d4eff427e82ff5e5c66ff915c30ff257e8bff4e5678ff2a8896ff63577bff9c6130ff5b6243ff58545fff683d47ff803c47ff64736aff9e8a42ff895a41ff684e5bff327e8aff2d7e9bff35697dff507069ff5c7c62ff1b7587ff3d6576ff674050ff42607dff7a293fff524541ff455361ff49746bff2a7675ff46565bff535b71ff2f6e73ff435659ff4b5565ff2d709bff2b5f70ff426f73ff41657aff586e54ff505f4fff623e38ff245b6fff364256ff3a6c7aff5a303aff4d2b3dff3c5c77ff604854ff5c5d4aff30574eff533b4eff415d70ff775c31ff4d5556ff484f59ff604b4eff553c4dff5c4b54ff564e51ff822e4fff91703cff387089ff885b3dff557d6dff854957ff976035ff632e46ff3c83aaff308a98ff6e5c78ff9c6436ff637071ff4a7184ff82403eff7e3454ff677863ff878d56ff765e4dff8f5d4fff2e8689ff456888ff456976ff477284ff5d7f65ff24717dff5a716bff3a7075ff3f738eff347681ff772f31ff297271ff5c7e60ff2f7777ff5c567dff815d53ff307581ff3a6364ff766d56ff2f719cff664d3dff525c57ff516775ff58635cff525c4fff66413aff306878ff384456ff447280ff6c3e40ff563141ff465265ff604947ff5a4e5fff3f6a64ff60333bff326c88ff775632ff614b4aff376b6fff4c4b53ff656c6aff575060ff4e5b52ff605474ff857d5aff337195ff764a49ff628571ff4f7d7dff3d8496ff65344bff427f89ff438ba2ff67495aff456a66ff4f6f79ff576d7fff796c66ff715b81ff746f58ff6e906aff715b4fff91604fff734751ff3a7b93ff596155ff3c5177ff8c5a3dff2c675dff554152ff466c60ff52767aff37787bff824c3bff4e819dff647178ff37758dff62577bff897846ff596b66ff337374ff82784eff416585ff4c5561ff524e5dff63343eff474c66ff5e5f61ff694840ff3a6c7bff683f45ff5e757eff71484aff5b3d49ff446d8bff54555cff4d5a69ff49716bff613942ff3f6c81ff5a5e60ff744340ff3d7377ff5b616dff547486ff694143ff4c6759ff557267ff477384ff676887ff5a5670ff747b60ff556e6aff5289acff4d838cff4f858fff657f85ff4e6a76ff5d666fff76606bff8d4747ff867573ff925a60ff616c7eff7f8f70ff96674bff8c525cff7a4e61ff79766cff5a5e57ff508279ff757c63ff3f7584ff645660ff677962ff587771ff3e7d79ff835141ff746b7eff7a677fff506b8bff91566cff5a3f4eff735e5aff697770ff867b55ff366e85ff474c65ff6a666fff755240ff4b4f67ff3e6470ff505665ff5c6f7fff5e5665ff704d44ff735056ff6b5b52ff4e7391ff4f646eff536b70ff547875ff606776ff436a76ff616366ff7a4a4fff6d746dff636c70ff6f7080ff757261ff556c60ff4b727aff537b89ff536d85ff5486a6ff7f7664ff737e72ff7f7886ff687c84ff686d87ff618591ff738388ff6e7887ffa16e5dffa3735eff4d7a8dff817977ff5e7a92ff5c778aff966c51ff695f6fff736f66ff827e77ff478185ff5f716fff6a747aff576e7aff6e5d65ff6a6e5aff727c80ff4c777eff727060ff5a6767ff6b8391ff497b92ff885151ff506e6bff746b76ff667975ff526f6bff437092ff4f5b74ff8d8d8aff696b6bff63575eff59585eff696879ff6b7786ff624d59ff636e82ff658699ff6e757dff547782ff5b6e78ff69766dff5e5d5aff597583ff4c6f81ff696e78ff6f7467ff68656eff6a7772ff6e7283ff66848cff6d8b88ff567981ff72837aff5b7484ff848492ff807b7aff648277ff857177ff668494ff6d8d8dff727373ff8e8a92ff758390ff776e76ff737b76ff71656dff608f95ff82a4b1ff8094a0ff7a7c76ff947273ff7e8173ff726473ff8e85a1ff736b71ff567b91ff9d745cff818a7eff6d7162ff6e738dff7592a6ff578291ff65747dff707f8fff557983ff7e6068ff626e6cff847779ff5c747bff83666cff597486ff64687aff6c5c69ff717177ff867169ff5c5b6eff666256ff4e6c80ff5d626dff707f88ff6d899aff6f818eff76869bff8b908dff68847dff6f8286ff6b8089ff8696a3ff907971ff6e7b82ff72676eff7b8b99ff86676cffaa9f9fff8f837fff94aba6ff818890ff768390ff947070ff949596ff97adafff809b92ff7a8993ff7b7b8cff89928dffa88387ff95716eff907b79ff818482ffab8b7dffa79c9dffabadb2ffbebac1ff85929bffb48a88ff9db2c3ff7f7085ffb58d8fff737b8eff648695ff919188ff998489ff7a808cff6c8593ff847781ff648a87ff899ea2ff7b7983ff6f7e7dff787c81ff7d6f6cff6e7e76ff707f86ff757888ff6586a3ff8f7766ff7c656fff857e85ff777d79ff776b6aff92a1a4ff61746effe1dcdbffe3e1ddfff9fbfbfffefffdffdcd7d6ffedebe5fffcfffeffe5e1e0fffffffdfffefffdfffffffdfff9fcfcffe8e6e2fffffffdffccc2c1ffd7cccfffc5c7c4ffe4eceafff5efe9ffdee5e1ffebe1dbffe4dddbfffffffdfffffffdfffffffdfffffffdfffdfefcffece8deffdac8c7ffdfdbd6fffffefafffffffcffe9e0dffffffffdffeef3f5fff9fdfcfffffffdfffffefdfffdfffdffd3cdc8ffe8e5e5ffdae3eafffffffdfffffffdffd8e2e9ffdfe0d7ffdee7e8fffffffdfffffffdfffffffdfffffffdffe8e3e1ffd4cfcefffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffe8e6e2fffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffa9b089ff7b946fff819b77ff849c74ff8e9a6dffa7a165ffc2b16bffcab364ffcab261ffc9b05bffc3ae5effb3a761ff949660ff8a966eff849572ff839470ff83926dff91a885ffb3cbacffb2c9abffaec9b1ff669ba7ff4694bfff4292bfff4091bcff3c8ebaff3e8fb8ff6fb2d6ff9c576eff781d4bffb23265ffbb346affbb346affbd366bffbd386cffbf3b70ffc23e72ffc14174ffc34677ffc54a79ffc54f7cffbf5079ffad456affa84468ffa34565ff95355cff953760ff8e2955ffb58c72ffb09644ffb59647ffb59848ffb89b4bffba9d4fffbda053ffbda157ffbfa358ffbfa357ffc0a356ffbfa250ffbfa350ff696f3aff5a6f45ff65794dff4399b5ff4ea4b2ff71d0deff68d2e2ff5dcdddff52c8d8ff48c5d4ff32aabcff238ea1ff0d6170ff116175ff3c688cff4ba4d4ff5cc2f7ff4fbcf1ff45b9f0ff48b4e3ff699a90ff21665cff2e7e6cff3fa0a3ff3baab7ff2e9bb2ff797996ff8d8097ff8f414bff9b3638ffa03538ff702133ff7a2653ff7e2852ff7e2953ff802c55ff812f57ff813159ff601d3fff4d5939ffad6829ffbd7434ffc27a3effca834affc68754ffa87b33ffcf7a63ffe45b80ffe04782ffe6568affec6c97fffa89acffae95afff795775ff711a43ff771c42ff468263ff659875ff619475ff46846eff37806eff246a6cff266d6fff287274ff277178ff4f9cacff59b1c3ff524054ff428ba7ff62b5d1ff68c5e5ff3c94b1ff639bb5ff9896b5ff8c81a8ff7596adff3198a9ff2790a9ff9c7192ffac3a67ffa62d5fff723f5aff717c54ff878d5cff5ba7beff3498c8ff2e92c0ff2b8ab6ff23a4b5ff43c7d9ff599daeff757884ffac2e4affad2e4bffaa2e4cff751f48ff882c4bff932359ff8f2257ff902558ff93265aff96275bff44575eff318970ffa0542bff967a58ff91a689ff9daf96ffb2966dffbb823bffc3923effb4ac79ff95af98ff3e8297ff39abc3ff5dcddfff6296a6ff76445bffbe4172ffc85b81ffd17694ff429292ffabb699ffd2c3a4ff83b1a9ff59b8c9ff75d8e6ff4fb4c5ff196e93ff586c7cff544f65ffa18a94ff75c1d8ff7dd2fcff61c3f7ff4eb8e6ff50a9a1ff297b74ff43889aff45aba2ff2f8e9eff3292bfff927fb7ffb76881ffe1605dff96777dff468b9cff3c8192ff5b2c50ff595e90ff41749eff2ab6c8ff2ec1d3ff2abed0ff71694affc3732affbf7128ffa24239ff8a1c39ff78161cffa33d41ffd03475ffd23a77ffc62d6dffdd377affe13d7dff825a84ff875049ffaf4c30ff736257ff4d4c67ff594f68ffb16b2affbb7231ffc47c3eff808d87ff2a7eacff0b697eff308cbdff479fcdff6191a4ffcdacacffab5051ff095e72ff3c9bacff45a3b5ff45715bff858a82ffb3899cffb6899dff499cafff52a2b1ff3b97b1ff769da1ffc7b5bdff3797a9ff95b8a3ff95d0b8ffa1996dffaa6930ff862642ff4191bbff2c89b7ff3b4149ff4a585cff209c95ff167778ff44b9f2ff3fb7eeff3a9cc1ff56a9bdff738aa9ffba2765ffb52462ff6d456bff337486ff35798aff2e6e7eff5d5b44ffe48832ffe48731ff963c20ff8b181eff86171cffb95a2fffde614dffd43470ffa2225bffbe7127ffa78b57ff5a6f79ff75624cff96581bff875b29ffc3363dffcb494dff826c42ff97af83ffb39b5eff587161ff186b98ff2797b2ff5ccbdaff843a61ff375968ff0a7573ff476f72ff4a9698ff65d2e2ff7cc7d8ffe4dfa1ffa97763ffc890a9fffecae0ffc1ccd2ffdffffcffb1f3ecff49a2b5ff4aa0b0ff412a49ff412237ff899e78ff588185ffae6829ffeb7571ffda3e7aff6e1543ff6d1f48ff874340ffaa3e45ff2c7f68ff1a5857ff327181ff54aabcff53839bff72678cffa43c76ff936997ff6a8298ff398076ff97696aff589dadff784c40ffab4e21ff978969ffa25650ffc32b31ffc42c32ffac2443ff702557ff3277a6ff30728dff29beb4ff65604bff1b77a4ff4f7f8dff9f8563ff769694ff55abbdffa9ad73ffdf9c45ff82a689ff9cc89aff56969aff40a4d7ff4ab0e4ff4a87a9ff66b2c5ff42898dff76ddd2ff4794a0ff849677ffbea355ff9d6e57ffb3718dff9b5c79ffacb3b3ff5f3739ff641116ff4b8fb4ff8ad8fdff1c678fff366a87ff8a3e60ff723f4eff167988ff1b697bffaa373cff8b7a5eff66a6b0ff924875ff882054ff82936dffaa6423ff967c40ff48787fff4fa7bcff3e889bff537895ffb62769ffa73c57ff826f2aff46585eff5a564dff911a4fffa32328ff9f2025ff771519ff5c5864ff2fa4d7ff32b5edff745a93ffdc2d77ff8e427cff2e9accff4a4979ff7b164dff853733ff34b4ecff37b7efff137a93ff0d8a8bff6e7e46ffb7993eff814c23ff669f7bff40918bff1e84a5ff3face1ff626784ff9a3848ffc79c58ffceae52ff57a480ff40a9a5ff468774ff65b6b3ff359693ff9499a4ff458997ff13587fffa1595fffcf6f70ff802350ff0d4c42ff1b5d60ff37677bff369b96ffab6931ff2493a4ff1e8fa1ff086170ff0b5d6eff1e6a5fff684e61ffa4215cff278bb8ff5c93a2ff796f3aff362d29ff2c6775ff17616bff09756dff4c5f4cff89886cffb99a3cff8f2658ff902124ffb62364ffbb2647ffb32434ffb7252bff645864ff798b5bffa56b31ff83385dff7b639aff748cafff5ba6b0ff59718aff7e4a3cffd27c29ffd67d2dff1a75a4ff1e8fafff28b0b7ff8f8d51ffa66f31ff975b2cffc4a647ff919760ff63877dff478d9aff695f61ff772041ff3f3a5affb29644ffb29747ff948540ff7b965eff51c7d9ff3491aeff137f80ff2f98aaff3c8eb9ff3f93c3ff773f2cffba7f87ff25695aff347c6cff2a8983ff518493ffb95833ff70625cff587380ff29acbcff25a2b3ff247e68ff995d22ffaa4248ff8c70b1ff2fa7ddff1f8788ff7c3f3bff468798ff23a5b1ff12a197ff51875eff19739bff155e82ff147583ff7c6b6aff8163a2ffbd2467ff951b51ff5a5769ff199baaff818a4effae923aff4e325aff18bccdff2498bbff2b96b4ff49a8c0ff689384ffb4795dff54a0b9ff2d9db5ff39a7d0ff30a4d9ffbe6c2bffc94b48ff77724eff7da273ff67724fffe78c3fff718966ff3dc5bbff5b4c71ff2d5770ff456f72ff335e6aff8d9569ff5c9571ff3e99a2ff34a19fff44b3b0ff4cabdfff47a7d8ff606d63ff704113ff655036ff50634fff8e7181ffb8668fff165d82ff15587fff4e786fff2a87b5ff1e577cff397b8aff18594bff1b4c3bffa42339ffa52a4aff470a2eff4c3153ff5d3247ff6d161dff22a193ff1d7f67ff4b7e52ff2aa1afff2597a7ff5390a6ff7a7997ff3291b5ff9d3268ff8270b3ff239bafff69937eff48a18effb56d4dff78134aff54475aff26858aff0e8c84ff2484b1ff317285ff1f7586ff1d8d9dff585c7bff56497fff78613fff905e4affa85c48ff146553ff2eaabbff5a4a5fff570e3aff79553cffc2a345ff3a6e91ff2d8499ff5b8595ff356a81ff5baabeff328071ff806b2cff177989ff2a9aadff4ab8eeff155b85ffb39270ff9e7b66ff813022ff8a462affb07a36ff973c4cff2e89b2ff2c8ec0ff858351ff307580ff2787b6ff0f4f42ff246f5fff1a5f50ff2587b7ff923f42ff852349ff45647dffc7632aff714651ff255666ff18a899ff1f8068ff18897aff1d7772ff207068ff751747ff697588ff53646eff3f7a9fff3b6c77ff5c133cff2697a8ff3f7caaff53476dff6a6468ff657a7dff1ba2adff4a6d80ff5e8692ff608979ff1b9ebcffb85246ff2a94c6ff589eb2ff176554ff8d844eff7aa466ff78382bff5c3e3fff822454ff256867ff298ec0ff497e9eff296074ff725258ff3488aaff37a5d6ff608358ffb89940ff918554ff3f798dff216992ff688787ffae692dff484648ff94282cffae7557ffbe9f49ff298abbff4590abff1d7692ff2a7f85ff237862ff995235ff609a84ff359090ff3e816cff147d7fffa9455dffbab272ff31869aff27526fff36a5c0ff5697a5ff8e7a44ff1c6753ff209c9cff43a597ff43917cff10817aff1c6f95ff2e948fff2bb1c1ff427996ff7c1b4dff4290a6ff4689a2ff178b9dff3c5773ff472d4fff2798cbff2b97caff657583ff9c6f53ff207dacff358696ff39646bff176a58ff525c51ff3d3f3cff1a6b58ff994d27ff416b79ff2c847dff12817bff761f4cff3c5e73ff6e7c70ff555561ff5e7c62ff708761ff32a9a9ff1e918cffab6828ff48656eff3a6086ff794517ff774a23ff1a8781ff618b93ff7c5651ff645348ff53867dff245670ff337a85ff256b63ff35526eff296a81ff346978ff4b7f81ff208680ff28a5a9ff1a6879ff61644dff716c63ff874a5dff5d2b30ff91835cffaa6829ff297564ff465460ff63986aff487356ff3b7485ff7b8c9cff4f757cff58749aff27a9a0ffa94769ff2e98caff52888bff527f88ffa62539ff6b436dff137069ff257aa7ff4382abff367895ff2bb5d5ff95252cff5f5155ff3f8386ff962b34ff4b5457ff547d71ffe7a948ff558c87ff39a7a1ff379690ff4f5876ff418ea5ffb56e2bff2a91b0ff2783aeff478f8cff3b6a62ff404c4fff761d21ff4a6269ff1c6d75ff85413fff6f5c32ff77283bff6a2c32ff511535ff3d446bff24607dff4f4d53ff55555aff4c6477ff1d5a80ff2b5464ff624e74ff704c47ff2b8479ff303953ff276687ff274154ff545763ff625141ff62283cffb7724eff83683aff3b8568ff2f8db6ff899c75ff8c6150ff137c74ff63816fff6c6172ff1b8598ff828255ff356970ff6a4c46ff398890ff5e99b6ff9b5f2fff6b3856ff288990ff2689b9ff2d84a4ff428e95ff857252ff426e7fff207b9aff575474ff4c6176ff4e645cff2374a2ff8d2455ff5b6e5dff487770ff1d8392ff1e7a9aff1e6994ff226a80ff1b6f8cff25739eff546563ff755243ff4d4962ff1f6669ff685239ff4c5046ff6c5947ff6d1d32ff6d1a3dff265274ff3c4259ff2a4f56ff30536eff5a553bff6b2c2bff433c62ff1d5a81ff255565ff1b5b83ff76393dff1b5044ff4c5862ff2f6b8dff39495eff2d616eff1a5c58ff4c3c4bff64333cff956a44ff3c785cff363e4effa1893aff894c3cff4fadc3ff82606fff8a3b37ff1d7c97ff2b6b8eff438184ff384a63ff706141ff3f6b5dff9c7c32ff434651ff2a77a1ff287e99ff237885ff846c50ff856945ff546361ff137b8cff1f786aff335d77ff567562ff2474a3ff902958ff616f6aff6f4c36ff516f53ff6f3637ff2777a5ff4e706dff2b7687ff216c97ff5e3b5dff575f42ff206994ff316263ff522f24ff494548ff665049ff52614bff316883ff295b75ff672039ff3c415fff4a624aff76652aff543e58ff403b61ff505a6eff878f76ff713f44ff2b3b49ff66272bff50323aff2d6e92ff5c5239ff2c6370ff196867ff4a3b4cff4e403bff60193bff157274ff343e42ff558155ff972253ff2978a0ff4e686eff662741ff197d93ff4a505bff784750ff46575fff756644ff286e6fff9f8739ff3b4e68ff2c77a1ff378481ff5b4e6cff668654ff667966ff9f6c3aff157f91ff1e6e83ff38657dff546861ff18838bff825429ff626f6cff5d2b33ff893f25ff4f4962ff1e6b97ff6e7452ff306377ff226c98ff385c7dff357469ff877944ff5d473fff45402fff22585bff455b5cff3e5b59ff4a6d7fff2b6682ff654520ff30526eff47593eff77652bff704b57ff434663ff623927ff766329ff471831ff2c3b4aff712639ff5d2e52ff4d5f42ff734621ff4a3853ff156964ff4a3d4cff7b294aff54375bff247181ff2f4643ff5a7253ff7b5528ff297aa0ff2b7a6eff552245ff656184ffab3051ff9f2359ff625674ffa1457cff744d89ff65735eff3e485bff2c79a5ff8b7f55ff8d3f66ff2f7796ff588366ff637160ff167f91ff1e6f84ff575876ff566767ff157f7bff885222ff626f6cff702636ff772027ff286684ff266d93ff9e8536ff526e66ff5a6475ff624e6dff336967ff8f7840ff713422ff504f32ff1f5d5cff385b6dff285566ff407186ff246286ff5b5431ff434253ff445738ff475736ff6e4d58ff494e4eff6d4523ff6a274cff1d606eff5a5851ff911b4fff921d51ff5c3f4eff734339ff4b3a55ff434767ff226287ff80214aff474466ff247383ff314642ffa04f62ffb43f52ff7e588aff8d5376ff5c5485ff1d7f83ff30455aff942553ff77445dff24ace6ff2da3d8ff2a7e85ff41434dff347998ff54755dff464859ff506688ff556e67ff297b8aff178092ff1e7590ff376880ff546665ff157f7cff516759ff616f6dff83223cff742227ff2a6886ff306d89ffc2a241ffcead40ff905a43ff624c6bff286978ff374954ff5e3c3fff385550ff1b615cff31626dff285566ff544f5aff2a607fff74592cff515855ff1c5462ff2a4d59ff553e5eff49504eff6d4626ff295d7bff1d616fff5f5540ffac5b80ffb72b67ff5d6349ff754e34ff4d444cff43495fff316c84ff712345ff603442ff237482ff993b69ff7a6c6fff667f6cff567a71ff297787ff237096ff208184ff2a6e7fff942755ff8f2842ff565e73ff4996a6ff4d5d4dff4a555aff456679ff59524fff66484dff814066ff6b564fff228192ff24828eff1d8094ff277184ff606b65ff377c6dff506657ff8a403bff7f243eff575169ff395975ff395360ffad8646ff4d8b6eff5f795bff4e424fff266a7eff466b62ff4b4459ff3c5068ff20667dff20687cff33697eff485459ff594753ff5f5941ff535854ff1e5463ff354056ff315f7eff385460ff653e2bff2d5d75ff516760ff73592eff2c5e5fff3c435dff68563aff745a2dff4e5045ff444b57ff3a6c77ff5d2741ff54454fff287b88ff464e5eff6a3547ff3d7483ff5a7a70ff2c7589ff2c7a91ff3d736fff237d89ff723d65ff902a42ff843348ff996133ff40434cff4e585bff55464eff80443aff626f6bff942e59ff855139ff4c6a7dff2c7982ff548364ff48787aff577274ff5b7a60ff1c7588ff555173ff80263dff564f66ff4c4b63ff4a3f40ff415168ff2c7083ff447267ff4d4351ff277184ff356d70ff4c435aff3d5168ff296e99ff2a5e6dff477272ff4e5059ff75453eff51594cff555753ff235664ff334154ff3e6877ff325966ff3b4463ff306281ff685b5dff745a31ff2d5b55ff404561ff513f49ff765b30ff505147ff474b58ff4a6c69ff4a293eff564853ff465f66ff643e59ff7f4a58ff347089ff7d6b4eff3a797dff645f66ff935d31ff277e8cff4f5579ff2a8897ff63577bff9b6234ff5d6243ff535761ff65313eff813a45ff68726aff9e8943ff8d5739ff6d4b5aff327d8aff317a97ff356a7eff496e6fff5d7c61ff1e7488ff3d6475ff6e3e4fff435f7eff78283eff58433fff415e67ff48756cff2e7876ff47585dff53566eff30717aff455052ff464b5eff2b6e99ff295e6dff4a7373ff45687fff5a6b55ff4f5d4eff5f413dff255c70ff364356ff426a78ff5b303eff4a2f40ff385c78ff614a54ff5b5e49ff305750ff533b4fff405a6eff785e33ff4e5656ff4a4d5aff5e464aff533441ff5b4d59ff4f4c51ff822e4eff91713eff337190ff885b3dff48786fff834e52ff986135ff622e47ff3983aaff308a99ff6a5c77ff956537ff647170ff48778bff7f3d3dff803354ff687864ff868b53ff7f5a4aff905a4fff2e8689ff4d6582ff436371ff417284ff5c7b69ff256f7cff5f756eff3e6d74ff3d7493ff347682ff752f32ff29706fff5c7d5eff327877ff5b557dff84594fff307484ff40595aff6f6550ff2c6f98ff674d3dff525c58ff546a78ff566160ff535d4fff624440ff2f6978ff394357ff4c717fff6d3c3fff51313eff435469ff604a48ff594e60ff416b66ff62333eff326b88ff795834ff644c4cff356c72ff4b4b53ff5d6867ff564f63ff47514bff5f5375ff857d5dff347197ff774a49ff5a8374ff567c77ff3d8696ff66344bff427d88ff408aa4ff654859ff446b67ff4e707cff576d7eff776f66ff72597dff766f59ff6e8e6aff7b5a4cff935f51ff75414eff3b7a93ff53574fff406184ff8b5842ff2f675eff554051ff466c60ff527a82ff36797bff824c3cff4e86a2ff64717aff36778eff62587cff8b784bff5d6963ff357273ff7c734eff446282ff4b555fff524e5dff63343eff474c64ff5b5e63ff654a46ff396e7cff663a42ff5d747cff704548ff5a3c4aff446d8cff56575eff4f5a68ff4b736eff623a43ff3f6c84ff5a5f5fff764542ff3d7479ff5c616dff527687ff663c44ff516758ff546f64ff45727fff66698aff5b526aff707c66ff597167ff508aaeff4a858fff4c838dff607c86ff4a6c7aff5d646dff78626cff8d4547ff867670ff956067ff656c82ff7d8c6bff93684cff8c505dff7c465aff77746aff585a57ff52877eff747c62ff40747eff655660ff687863ff617e7dff3b7c79ff865547ff726b77ff7b677dff526a8bff8f5268ff5d3f4dff775c58ff61777aff7c7553ff366f85ff474e66ff66626aff745341ff494f66ff3b626fff4d586aff596c7cff595361ff704a42ff6f4e54ff706058ff4d738fff516872ff536a6eff597d79ff5c6776ff446a76ff626467ff7b5154ff6d746eff646c72ff727182ff747361ff5a6b5dff476e76ff4e7983ff4f7289ff5687a5ff7d796aff707d6dff7d7586ff657e8aff646a86ff5e8592ff70858eff6a7484ff9f6e5dffa67260ff538193ff867e7bff617590ff5c7689ff956d53ff6e5e6bff726f65ff807e74ff478086ff60746fff667476ff566f7cff6f5d66ff6b6e5bff6d767eff45757bff848070ff5f6361ff71848fff4a7b92ff8c504fff5c7673ff716673ff6c7c78ff54736eff497597ff525e78ff7b7c7aff696a68ff62575dff5a5960ff61667aff657181ff644e5bff636d7dff6a8b9dff6d7983ff547681ff5b7078ff6a776dff5f5d5aff597684ff4d6e81ff6a707aff717469ff65636bff6b7875ff6f7484ff67878fff6f8a85ff557680ff73867aff587988ff858899ff797879ff658277ff877378ff668292ff6a8383ff757574ff8f8c93ff778694ff7a6b73ff727778ff70646eff639095ff8cabb6ff8296a6ff7a7e77ff9b7472ff7f8175ff716471ff88809eff786a6bff56798fff9a7159ff838c81ff6f7366ff656d89ff6d8ba2ff5e8997ff677880ff728493ff557884ff815f66ff6e7570ff807070ff637a80ff82666dff5a7889ff64677aff6e5f6dff6d6d74ff88736bff5e5c6eff686357ff4e6b7fff5d636fff717d83ff6f8b9cff6d838fff6f8397ff868c8aff6b8681ff73858bff6b808aff83949fff8e7b71ff68777eff736a6fff7b8c99ff87666cff8a7f82ff8d8381ff95a8a4ff848b8fff758392ff927070ff8f9191ff8fa9a9ff839c94ff788890ff7c7989ff89908bffa88287ff967270ff907a75ff818484ffb08d7effa69d9dffbabac0ffbfbbc2ff8c98a1ffb78b8aff9db1c5ff816e82ffb28b91ff727b8eff608593ff97938aff928289ff7a7f8aff778e97ff8a808dff628987ff899ea2ff787c85ff727e7eff7e8489ff84756fff6d7c75ff76828bff757889ff6485a2ff8f7665ff816c75ff7e777fff737c78ff776b6bff93a4a7ff5f736effe0dcdbffe1dddbfffafcfcfffffffdffddd8d7fff3f1edfffcfefdffe2deddfffffffcfffefffdfffffffdfff6faf9ffe3e0ddfffffffdffc9bcbcffcabfc1ffc3c6c4ffe8efecfff0eae4ffdee4dfffebe2dbffe6deddfffffffdfffffffdfffffffdfffffffdfffffffdffebe9deffd7c2c1ffe1dcd8fffefef8fffefefcffeae1dffffffffdfff0f5f6fffafdfcfffffffdfffffefdfffdfffdffd2ccc9ffebe9e9ffdae3ebfffffffdfffffffdffd7e2e9ffe2e2d7ffdfe6e8fffffffdfffffffdfffffffdfffffffdfff1edecffd5cfcdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdffe8eae5fffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff6ea79aff79b6a7ff81b8a0ff7eab8cff6f8d6cff6e8c7eff6da7aeff65a5aeff78a698ff4f9191ff429fb9ff5287abff6b6d86ff8b3f55ff8b335cff9d2e60ffa03261ff8b395fffb1544fffc4635cffba645dffc0686affb43769ffca7182ffb89579ff935b45ff8b8758ff8b9863ff7c9364ff73895fff4e7863ff75a398ff658aa1ff65c1e8ff52a3b0ff728fa5ff3497a0ff6e75a1ffc34961ff5f7474ff587280ff3d7facff29acc0ff649b96ffac5a3cff982a40ff891e47ffaf2c66ffb22d68ff8d496dff8e5a3eff747871ff997d62ffc1853bff6099a5ff2f93b3ff5f9eb4ffae566bff787d94ff5f968dff9ba29fff79b3c4ff308a9eff887e8eff57717aff9fa47fffae5543ff6f5e8fff61404dff3e776bff328badff4d9bb4ff994b7eff805a82ff566f6eff627370ffc07a3cff97262fffab3231ff8d4f7bff737a6cff50717dff817156ff807676ffb58554ff9aa878ff3d839aff43aacaff5a7a8cff508f94ff7fae9affafa193ffaf7e8affab7c84ff9cdeefff3b85a3ff756561ff217d8cff525c5dff5c6175ff755774ff907e4fff3b707eff2e7883ff8c565cff816546ff8f2443ffab2232ff773b43ff67948fff9e4075ff588fb2ff6b485fff8d7963ff218cb3ff62936cffa07e35ff7f9f6fff428ea6ff714258ff9f8350ff749769ff4ea7a2ff49959eff2a809dff90636cff5e595fff307777ff4d6573ff4c7482ff288396ff3c6043ff963562ff395a78ff62444eff1e9a8eff38857dff2d7d94ff6a7798ff923a76ff3a8793ff9e8b50ff455977ff218e9cff3f8999ff4d8892ff42719aff85735cff7e6251ff59837bff86674aff5e8882ff3d6e7fff5a8885ff548e73ff2f9ba5ff3d9dcdff876b4eff714b36ffa06668ff2883acff3a786aff466c69ff2d7768ff626271ff686c71ff617274ff478377ff1c8475ff2f867cff425d76ff3b8998ff514867ff3d87a2ff446279ff398099ff478098ff3d8093ff547383ff39736aff517654ff72453cff386d73ff496387ff526069ff488a8fff599572ff647162ff536568ff645f45ff8a6058ff5d7c74ff3e5a64ff305e70ff405d75ff3e7471ff24687aff515a5bff65363fff9a7545ff31787aff657d5fff4c8182ff49768cff65716cff487c87ff7c6669ff436070ff3283adff478991ff5a5766ff5f5967ff446a6fff847162ff358c8dff346e90ff46777aff37788aff4e5355ff504d4bff565850ff6d2b36ff47334cff2e5169ff65483aff3d4d6cff4e6069ff473a3dff37556bff3b565cff354c51ff6c403eff2d5b5bff835c46ff517b8fff495364ff475a67ff575a52ff68764bff366583ff396e86ff727455ff46706cff2b6d7dff34747cff705659ff634b39ff415774ff427075ff33587bff4d6b60ff49463eff454f4fff43646bff4b4853ff3b5152ff5e5247ff544845ff4f4147ff673046ff663d4bff5d3e3fff345366ff632f53ff34616fff92654fff606782ff4b5475ff793053ff715c8bff467b8dff37627bff665a5fff546f77ff2c7a82ff356b87ff317271ff626759ff74242dff2a698affa09047ff6b5764ff48625aff544437ff2b575aff395a6bff455957ff3b5354ff354963ff524b44ff326070ff6e5750ff674d53ff604e3cff3a5c6cff613043ff525a71ff5a6868ff3d7b84ff297585ff555471ff7d3950ff60695eff4e5760ff665554ff814452ff2f7a88ff377b7eff51766aff505b64ff623c50ff414e5fff5b7467ff4e5c58ff326a72ff485066ff246781ff41606aff604f48ff38585fff365666ff443e4fff4d5769ff4b5a47ff4a495dff62563eff4d545aff543d4aff614658ff5f6766ff66705eff825848ff44617cff4a7188ff7d6546ff63505aff725659ff887349ff556b6fff3b6d85ff54776cff356f79ff486073ff5d444cff446d67ff3e6671ff4c666eff4f5e5eff3b6378ff49656eff546253ff475056ff505a66ff633c44ff4f5764ff4b6065ff4c5061ff695047ff466269ff5e5c64ff536161ff59727eff696762ff4c7d8aff506e7bff576f7dff59676eff786567ff75646dff7c785cff825157ff596c6aff636a64ff485c64ff55746bff5e645cff687184ff5e637fff6b5f55ff687761ff425d74ff644e52ff4b5767ff535e67ff645760ff6c696fff526e7eff5b6d6aff516d7cff6c6364ff686f6fff6e767bff587878ff5c7783ff757e85ff767a79ff687e8aff758187ff7e757aff757373ff708993ff7b7c7cff7b706eff727984ff64727aff78726eff6d7372ff627e85ff667781ff686973ff6a6f71ff657071ff536981ff747175ff675e64ff626b75ffa4a7abffb4c1c8ffb2b6b8ffadb9b8ffbbc5c9ffbdbbbaffb4b5b9ffb4a5a6ffb2b8b4ffb2b7baffbdb0afffc5d1ceffbcc0c6ffc6bebbffb7a3a0ffcac2bdffcec9caffcacfd3ffd3ced1ffc1b2b6ffa6b2bcffcac4c2ffa7b1b7ffb1b9bbffc0c5c7ffb3b7b7ffafaeabffb8bdc2ffbcbec0ffbfb8bbffbbb9b7ffb6bebcfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff6da097ff77b6aaff78b3a1ff81b497ff709473ff70876fff71a4a6ff66a7b0ff71a299ff6c9e87ff63abacff4b8eb1ff667796ff796a7fff7f2e4fff9a2d5cff9e3160ff97305dff9f4f52ffc15f58ffc56a64ffb25f5affbf4770ffbd4875ffc39084ff956751ff8b754fff909b65ff7e9262ff728660ff5d7d5dff598d80ff6a8599ff6ac3eaff4fa3bbff64869aff4699a5ff6184acffba4b69ff6f6f71ff5e787fff3f7fadff29a9c1ff4da2a8ffa86248ffa02e42ff85273bffb12c67ffb12b66ff8f456eff815e44ff797367ff967f65ffbf8039ff7c9990ff2c88a5ff59a4bdffab6072ff77728cff5d978effa3a19aff73adbeff3d96aeff7a838fff536673ff85a188ffb25a43ff6d5b8bff5e3e4bff43736eff338eaeff4d9cb5ff905484ff87547eff4e757cff566c6bffc2793bffa1352fffab302fff954c6eff6e7070ff60746fff7e6f55ff85746dffb57f51ff9aae80ff41859aff45a6c6ff587386ff439595ff7ca891ffaca197ffad858effa07780ff99d6e6ff39849eff77605dff1c8191ff515b5eff5f6979ff755775ff85784fff3e6c76ff2c7582ff8c525eff846147ff8c2d49ffac2331ff7b3a42ff5f9394ff934880ff6283a9ff664663ff98785dff208db5ff4c9176ff9d6b2fff7e9b6bff4191a7ff77475bffa18652ff779a6aff5da697ff438f99ff30819eff89666fff5a555cff2c7272ff4d6471ff507480ff29889dff3b5f44ff9f3f5eff385a79ff63434dff1c9990ff37867eff287e94ff6a7696ff9c3874ff3f888fff8a8a58ff4c5272ff208f9fff418c9eff51868eff457a9fff7d7363ff7f5f4cff5b8277ff8a5d46ff658880ff3e7384ff548184ff53866bff2e99a1ff3c99caff886e53ff6f4a34ffa36364ff2f87abff407b6dff4b706cff2c776aff5c6275ff6d6f74ff65676aff488379ff1c8274ff30877bff425f77ff3a8897ff554465ff3b8aa6ff436379ff3b7891ff4e7f97ff4d848cff547483ff35726bff577452ff6b4b42ff39646cff496287ff576067ff4e8b90ff5a9573ff70725dff4e656dff615f46ff875f59ff678072ff3e5c68ff305e71ff3a5d74ff417570ff266a7fff535a59ff6a3b42ff9d7143ff367678ff6f8161ff4b7f80ff4b7388ff617673ff487d8aff7c6769ff445c6fff2e82abff498b94ff555766ff5d5869ff436a71ff897160ff358d8cff337292ff467579ff397a8eff4f5455ff514d4bff565550ff702e36ff47354cff2e516bff63483aff3c4a6cff4e5f68ff483a3dff3d586eff3b575dff324e55ff693d3dff2e5958ff855d47ff517b90ff495668ff4c606fff585951ff68764dff34607eff377282ff757453ff46726dff2a6978ff39747cff755655ff694938ff405875ff456f6fff365b82ff4c6d60ff49453dff455151ff426469ff484954ff3f5355ff665544ff56443eff504045ff613448ff663a4cff5e3e40ff305367ff653155ff295b62ff8a554bff576783ff4c5574ff832f55ff67628cff4b7890ff375f79ff6c5e5cff4a737aff2e7a83ff326882ff347270ff676555ff77222fff2a6989ffa09047ff6b5664ff48645cff554438ff285e64ff395a6bff475b58ff3c5150ff394a62ff544a3fff31606fff6a5953ff6e4951ff614f3cff3c5a6cff603045ff4a5d74ff616469ff41777cff2a7786ff545370ff7e384fff5b655cff4c565eff685350ff814551ff2f7987ff387a7dff527469ff525b63ff6b3a52ff424d5dff597467ff4f5b58ff326c75ff434a60ff24667fff435f68ff5f4f47ff3a565bff3a5566ff443e51ff4c586aff4a5a47ff484659ff63583fff4e5259ff533c4aff5e4557ff5d676bff616d5dff845a47ff44607dff497188ff7c6647ff5f4f59ff745559ff8b7146ff576a6fff3d6b81ff50756fff376f79ff4a5f74ff5e434cff436f67ff406771ff4d646eff4e5656ff396276ff4d6870ff546154ff455259ff515865ff623b43ff4f5866ff4d6167ff4d5163ff6b5248ff46626aff5a5a65ff525e5fff58727fff666663ff4e7f88ff4f6e7bff536e7fff59686eff786566ff78656fff7e775bff844d55ff576768ff646e69ff4a5c63ff587770ff5e655dff677284ff5e627fff6f5e54ff637463ff425c72ff634d51ff495666ff515f6aff63555eff6d6c73ff53707eff5d6e6bff516d7cff6d6667ff686e70ff6f777dff597675ff597a83ff748088ff767978ff667b89ff748289ff7e7479ff767376ff758b95ff7b7d7eff7e706dff6f7882ff657277ff78726fff6b7171ff648288ff6a7880ff6b6872ff6e7071ff697374ff566c84ff6f6c70ff685f65ff5f6974ffa3a6aaffb5c2c8ffb1b5b9ffafb9b9ffbac4c8ffbabab9ffb4b5b8ffa8979affb3b7b5ffb1b7b8ffbcb0aeffc4d0cdffbcbfc4ffc6bebbffb7a29fffcbc3bdffd2cdceffcdd1d5ffd4ced2ffc0b0b6ffa5b3bdffc9c4c3ffaab4b8ffb2bbbeffbfc6c8ffb8bbbbffb1afabffbabec3ffbcbec0ffbfb8bbffbab9b7ffb6bfbdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff6ca9b2ff70a5a0ff5f898aff7d828cff568995ff489baeff8e4c55ff982a5aff9a3865ff9d6256ffb57358ff837590ff957977ff7b8c76ff809c89ff5e8889ff637d79ff725b69ff68625eff398398ff895768ff7c4a54ff8d5b4fff8b5374ff6e6a6aff60817aff9b925cff4c7f98ff6f8876ff71a29bff857785ff598c9aff3e7482ff35716aff66576fff4a7471ff2b8380ff5e6587ff59787aff387289ff448495ff547278ff666757ff596f71ff4c787fff4f8b7bff5e7371ff7d635aff44535eff445a63ff395b66ff674d44ff516a5eff4b7180ff52686aff576869ff487b86ff4a636dff5b6969ff436772ff3c6d7dff4d544fff524d50ff3e4756ff4e4b4cff554953ff624546ff4c4359ff5c6265ff446a7fff6f4667ff4a6771ff68585fff317683ff4c6a66ff504559ff6c6d5aff45585aff325d6bff465454ff4b4a57ff4c595eff584f50ff51535cff5b5f67ff676b64ff4d6b7fff6c605dff7a695aff5a656dff4c6b6bff555f61ff526976ff5b6660ff4a5c6bff4e595dff8a8a90ff829296ff8d9498ff8f8f92ff86979aff9b9e9eff979fa4ff9c9392ffa0a7aaffa09a9eff939699ff89969aff90979cff8d9293ff90949cff8e8f92fffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff6ea7b0ff6aa3a3ff618d8cff7f818cff5e8d93ff49a0b1ff895c67ff932b53ff9d3464ff965f55ffb27157ff896b86ff977e80ff7b8673ff819986ff5b8886ff5a797aff735e69ff665f5fff3a8296ff895669ff774c58ff8f5e50ff8d5171ff736867ff5b807bff9a8c5aff4f8098ff6c8a75ff729f96ff817886ff568894ff427682ff36736dff675a6fff4a716fff2a8380ff606586ff56787cff3a6e86ff4b8593ff52747cff676755ff5c6a6eff4d777fff528977ff5c7273ff806258ff43535fff445a62ff3c5c68ff684d45ff556b5dff4c7080ff536a6fff576668ff487c84ff48626cff5e6968ff446772ff3e6e7dff4d544fff534d50ff3e4857ff524b48ff524b53ff644446ff4c435bff575c62ff436a7eff6f4667ff4a6470ff675a5dff317582ff4f6964ff534459ff6c6d5aff44575aff315f6dff465452ff4c4957ff4c5a5fff585050ff50525cff595f68ff666a63ff4b6b7fff6a605dff7d685aff5b626bff4d6b6dff575f63ff516a76ff5b635eff4a5c6aff4c595fff8a8a90ff849396ff8c9498ff8c8c8fff859799ff9a9e9eff979ea4ff9d9292ffa3a9adffa0999dff929699ff8a989bff92989dff909394ff8f939bff8d9093fffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdfffffffdff6c898dff5f7b83ff68717fff8f495cff816167ff877e77ff7c8b7fff6f898cff3e646bff545c62ff497079ff4e6e75ff4a757fff576968ff487071ff5a5a5cff4e4d54ff554a52ff58656bff5c5d6dff5b676aff4f5e62ff576462ff445961ffc2c6c8ffc6c8c9ffc7ccccffccccccffcfcfd0ffc6cacbffc6c9caffc7c8caff69888dff607b83ff697381ff8e4d5eff805e66ff887a73ff7c8b7fff6c8889ff3f656bff555c62ff4a7078ff4e6d76ff4b757fff596867ff4a7070ff5b5a5cff4f4e54ff564a53ff56636aff5b5d6cff5c6668ff515d63ff576462ff435961ffc3c6c8ffc5c7c8ffc7ccccffcccbccffd0d0d1ffc6cbcbffc8cacaffc6c8caff577177ff636672ff6a6f71ff637775ff8a898dff91969cff8f9799ff899395ff577077ff636773ff6b6d6fff637775ff8b898dff90959bff909799ff8a9395ff757d84ff798485ff757d84ff7a8384ff778084ff
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Stereo.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Stereo.asset.meta
new file mode 100755
index 0000000..880c1ab
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-360Stereo.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 0d696b76d81c0e640a7dbcc2d148b9ec
+timeCreated: 1592334546
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-Transparent.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-Transparent.asset
new file mode 100755
index 0000000..f4a525a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-Transparent.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Local-MP4-Cones-Transparent
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/Cones-Transparent-2K60-H264.mp4
+ _hints:
+ transparency: 1
+ alphaPacking: 1
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: 132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0007344a34009c78ff019d7bff019d7bff079e7dff0ba07fff10a080ff14a07fff19a07eff19a083ff004f3eff004733ffde3083ffdf3182ffdf3182ffdf3182ffdf3182ffe13384ffdf3484ffdf3484ffdf3484ffe13585ff6d0b38ff670934ffe5c85fffc8a840ffbc9d31ffb9a547ff083a52ff0b3b50ff0c3c4fff0e3f51ff6a0911ffc02629ffc6262bffc6282effc6282effc42b2dff7b171bff4b0d12ff490d0dffe0c85effdfc95dffdfc95dffe0ca5effe0ca5fffe0ca60ffe1cb61ffbaa442ffc82c34ffcb3036ffca3233ffcb3636ffcd3a39ffce3d3cffcf3e43ffdd8c2cffe38a28ffe08c2bffdf8d2bffe28e2cffe38f2fffe38e2fffe38e2fffe49030ffe48f33ff3e4b3eff00475bff00475dffc12e31ffcb3638ffcc383affcd393bffca3b3cffcb3a3cffd03e40ffc83940ff941d20ff851820ff86181fff733f31ff60103cffa22569ffa1276affa3286bffa52a6dffa72d70ff881e58ff651340ff7a3712ff76350dff783411ff74300eff6f3010ff702f0fff984e0dffdd8d31ffdb8c2effde8b2effde8b31ffd8862cff262a2504142b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00043e3c15009b7aff019d7bff029e7cff079e7dff089f7fff0f9f7eff129f7fff025a48ff003d2eff004532ff054135ffdd3082ffde3081ffde3081ffdf3182ffdf3182ffde3383ffde3383ffde3383ffdf3281ff54150effe1cb5effe1cb60ffe2cc62ffe2cc62ffe2cc65ffe4cd65ff0a3951ff0e3c4fff0d3d50ff0c3e50ff4e0d10ffb6252effc3242cffb9272cff4c0c0dff4b0d12ff4b0d12ff4c0e15ffe0c75bffdec85bffdec85bffdec85bffdfc95cffdfc95effe0ca5fff7e681dffc42a31ffc82c32ffc92e34ffca3036ffcb3339ffcc363bffcb3d41ff914512ffe38a28ffe18b2affdf8b2affe08c2bffe18c2bffe28d2dffe28d2fffe38e30ffe38e32ff00475cff00475bff442638ffcc3336ffc83436ffcb3638ffcc383affcc383affcd393bffcb393bffcc3a3cffcc3c3dffca3d3dffcb3e40ff5a0c2fffa02165ffa02165ffa12268ffa4256cffa5266cffa6276dff7f1652ff63123fff78340effb83837ff912024ff8b1f24ff8e2024ff6e2c0fff6a2d0cff692c0eff692c0eff692c0eff6b2f17ff152c3300142b2f00142b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b310009987ffd009c7aff009b7aff019d7bff049d7cff059e7dff0c9d7eff003c31ff013d32ff023f31ff003f31ff243637ffdf3081ffdc3081ffde3081ffde3081ffdd3282ffde3383ffe03482ff630b31ffe0ca5dffe0ca5fffe1cb60ffe1cb60ffe2cc62ffe2cc62ffe2cc62ffe3cc62ff0e3b4fff0d3d50ff0d3d50ff11414eff4f0c11ff480d11ff4b0d10ff4b0d12ff4b0d12ff4c0e13ff4c0e13ff8b6c20ffdbc758ffdec859ffdec859ffdec859ffe0c75bffdcc55eff79651dffc4262dffc4292fffc72b31ffc92d33ffc73035ffc93237ff6c090dff833913ffda8920ffe08a27ffe18b2affe18b2affe08b2affe08b2affe18c2dffe18c2dffcd7c31ff00465bff00485cff720e16ffca3134ffcb3235ffca3436ffca3436ffcb3537ffcc3638ffca383affca383affcb393bffcb393bffcb393bff771225ffa21a65ffa01e66ff9f2064ff9f2066ffa12268ffa12268ff811756ff62113bff721119ffcb3b3cffcd3d3eff942020ff891b22ff8b1b22ff652d12ff692c0eff623000ffb29b33ffb69d37ffe1ca67ffe4d178fd142d3102132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b3100142b3100093335220a9f7cfe029b77ff009b76ff003c2fff013b2fff013b2dff003b2dff023e2fff1d4031ff033e2fff004536ff790740ffdf307dffda2f7cffcb2f76ff620b34ff630b31ff7a491effdfc95affe0ca5dffe0ca5fffe1cb60ffe1cb60ffe1cb60ffe2cc62ffe1cb60ff947716ff0a3c53ff0d3e51ff00958aff00938fff01978cff40090fff4a0e10ff490e10ff54a8b8ff5bacbdff25727dff78661affddc757ffe0c859ffe0c859ff8a7223ff76611bff77631aff5b0d0fffc3252bffc5272effc62a30ffc62a30ffc72b32ff4f1015ff813913ff753311ffdf8a29ffe08a29ffe2892bffe2892bffe38a2cffe08b2cffdc8a31ff194240ff00475bff2f374eff680e13ffc83033ffc83033ffc83134ffc93235ffca3436ffca3436ffcb3537ffcc3638ffcc3638ffcd3739ffca383aff5e0c21ff610934ff9c1c67ff9c1c65ff9d1e64ffa02167ffa02167ff9b1d64ff690f1bffa81c25ffc93537ffcd393bffcc393bffc33539ff911e22ff6d2d13ffa38a24ffd4be58ffe1cb69ffe2cd6dffe3ce6fffe1cf6fffe2d06fff102c3600132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c2f00132b2f00122b310254c6bcff56c9beff2cb7aaff00948bff17746bcb0c3831ee033832ff013b2fff013b2fff023b2effca2d32ffcb2e33ffcd3034ff99171cff80141eff113929ff61112fff5e0b32ff5f0c31ff5f0c31ff5f0c31ffe3c765ffdfc95cffdfc95cffdfc95affe0ca5dffe0ca5fffe1cb60ffe1cb60ffe1cb60ff947a1fff927d24ff009086ff009388ff009388ff009388ff029489ff361518ff57a3b4ff4ba4b7ff56a9b8ff55a8b7ff346c6aff7a5f17ff755c16ff76591aff8f2157ff9c2a67ff7f602dff611410ff570d11ffa51e29ffc62632ff560c13ff4b0d14ff40191bff813913ff753310ff6f300dffa0551bffe4882affe4882dffe3882dff6c2e09ff6b2e0fff01485eff01485eff6b1019ff680e17ffc42e30ffc83033ffc73033ffc73033ffc83134ffc93235ffca3436ffca3436ffca3436ffcb3537ffcb3537ff440d2bff3e0d2aff951c5cff9c1a63ff9a1b61ff9c1c62ff9c1c62ff69133bff660e17ff770f1affc42c2fffc93134ffca3336ffca3537ffc93538ff9e8724ffe3cc64ffe1cb65ffe1cb67ffe3cc6bffe2cd6bffe0ce6cffe1cd6cffe5cd6fff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0152c7bcff53c8bdff53c8bdff56c9beff54cdc1ff35bdb0ff0e8b80ff073f412308392eff073a2eff870d17ffca2c30ffcb2d31ffcc2e33ffcd3034ffc32f33ff9d181eff641119ff06403aff620f34ff600d33ff600d33ffcaa452ffdec85bffdec85bffdfc95affdfc95affe0ca5fffe0ca5fffe0ca5fffe1cb60ff886e18ff0e8c7fff009086ff009086ff009287ff009388ff009388ff07968cff40a0b4ff44a2b3ff4ba3b1ff51a7b6ff55a9baff80621aff8f2e42ffa2226affa5246dff9f2467ff681042ff68123eff530f11ff500f14ff6acbc0ff72cec5ff7ed1c9ff3d1f26ff803b16ff763511ff6c300eff692e0dff682e0eff672c0eff682c0eff722917ffac272dffcf403effd34341ffd24948ff610f14ffc92f34ffc62d30ffc52f31ffc52f31ffc73033ffc83134ffc93235ffc93235ffc93235ffca3336ffc93235ff420d2cff3f0d2aff3b0d27ff3a0b27ff630d3dff560c35ff581418ff660f19ff670d1aff5e0b13ffbf282effc52c2fffc52c2fffc42e30ffb04e29ff9c8320ffe0ca60ffe0ca64ffe0ca64ffe1cb67ffe1cb67ffe2cd68ffe2cd68ffe4cd69ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b310049c7b6fe4dc5baff52c7bcff51c7bcff53c8bdff55c8bbff57c9bcff57cac0ff01766dff02786fff6a171fffb7262cffca2a2fffca2a2fffcb2d31ffcc2e34ffcd2f36ffcd3034ffd13137ff6d0d15ff01422fff63102fff610d35ff5e0d30ffdec859ffdec859ffdec859ffdec859ffdfc95affdfc95affe0ca5bffe0ca5fff78651eff008f7fff008f85ff009086ff009086ff009287ff009287ff5dc7beff0a7174ff3f9daeff439fb0ff45a3b4ff044a5bff57653dffa01c66ffa11d67ffa42069ffa6226bff691044ff660f41ff591122ff5fc7bfff59cac0ff5ecabdff6acdc1ff76cdc5ff7d3a11ff74350fff6a7665ff67563fff6b2b11ff682d12ff692d13ff82141effce3a3effce3a3affce3f3dffd04140ff801b1eff5e0c13ffc42c33ffc42d30ffc42e30ffc52f31ffc52f31ffc83033ffc93134ffc93134ffc93134ff3e0f28ff3f0d2aff390d27ff390d27ff300823ff56a9b9ff58a8b8ff59aab9ff59aab9ff5aabb8ff5cacbaff4a3c44ff9d1f23ffbf2b36ff9a6e32ff9b8125ffaf9536ffe0ca60ffe0ca62ffe0ca62ffe1cb63ffe1cb63ffe2cc66ffe2cc66ffe2cc66ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100112c31014dc7b7ff4cc6baff4dc5baff4dc7bbff52c7bcff54c7baff55c8bbff58c8beff09ae98ff01776cff81111bffc7272cffc8282dffc9292effca2a2fffca2c32ffcb2d34ffcc2e33ffca2f30ff610d13ff640f15ff50211eff452b3eff621035ffe0c759ffdec658ffdec859ffdec859ffdec859ffdfc95affdfc95affc5af4dff766318ff148c7eff008f85ff018f85ff009085ff008f85ff46c7baff58c8beff016a64ff08405dff3f9dacff034156ff0e4054ff5c2150ff9e1a65ffa01c66ffa11d67ffa11d67ff9f2068ff680e43ff5c1240ff4cc6baff51c6bbff58c7bcff5ecabfff5fcbc0ff853810ff62ccbfff67ccc0ff76cfc6ff79cec5ff6b3012ff7f0f19ffac2029ffcc3439ffcc3639ffcd383bffcd3d3cffa72229ff591114ff560d13ffca2831ffc52c2fffc72e31ffc62e31ffc92f32ffc92f32ffca2f33ff4a101eff3e0f29ff3c0e2aff3a0d27ff3c839eff57a7b7ff57a7b7ff57a7b7ff58a9b8ff58a9b8ff5aabb8ff5aabb8ff59aab9ff59aab5ff9d8328ff9a8024ff997f23ff90761cffe1c85effdfc95effe0ca5fffe0ca5fffe0ca5fffe1cb63ffe1cb63ffe4cd65ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132d32014cc7b6ff48c7baff48c7baff4dc7bbff4fc7bbff52c7bcff52c7bcff53c8bdff16a493ff006f64ffaf171fffc6262cffc7272dffc8282dffc9292effc92b2fffca2c30ffca2c31ffc92e31ff6b0a13ff5f0c11ff610f14ff681302ff243826ff5d112cffe0c458ffdec859ffddc758ffdec85affdec85affc6b250ff766219ff73651bff736416ff40bfb2ff25b6a7ff3ebfb4ff49c5b9ff50c6bdff026460ff015f5aff198793ff5abbddff5fc0e0ff458ea8ff541a42ff9d1963ff9e1a63ffa01c66ffa01c66ffa01e67ffa32067ff931f5dff47c4b9ff4ac5b8ff4ec5baff54c8bdff57c9beff52c7b8ff55c8bbff60c9c0ff66c9c0ff6dccc3ff52361bff87111affc92e34ffca2f32ffc93235ffca3336ffcb3838ffcb3837ff560b0cff530e12ff520d11ff701015ffc72d32ffc62b31ffcb2b34ff670c14ff440f26ff3e102bff3d0f29ff3a0f28ff1c6d85ff51a8b6ff56a6b6ff55a8b7ff56a9b8ff58a9b8ff58a9b8ff59aab9ff59aab9ff59aab9ff59aab7ff74abacff957b21ff90761dff907621ffe1c863ffdec85dffdfc95effdfc95effdfc95effe0ca5fffe0ca5fff5a58395b132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100142c320049c4b3fe46c5b7ff46c5b7ff4cc6baff4cc6baff4fc7bbff50c8bcff52c7bcff047d71ff08756effba2a31ffc5272effc6262dffc7272cffc7272cffc9292effc92b2fffc92b2fffca2a31ff5e0e13ffe18b25ffe4902bffe38f2affac5513ffab5415ffac571bff78462aff775d10ff785f1bffa51d69ffa6206dffa8216dffa8236aff815932ff69652dff4bc4bdff49c2b9ff4ac3baff00605aff005c59ff005d57ff48b6dbff4fbbddff56bcdcff59bbdcff02415bff991664ff9c1861ff9e1a63ff9f1b64ffa01c66ffa11d67ff400d2aff076b6aff42c0b4ff44c4b5ff4bc4b9ff066b65ff46c3bbff4cc5baff55c8bdff58c7bbff5ccabdff5d5955ffc82c30ffc72b2fffc82d30ffc72e31ffca3134ffc93235ffca3435ff5a1414ff530e12ff540d14ffb23467ffe35891ff600a29ff4f1018ff471127ff3e122eff3c112bff3c0f29ff106379ff4ea5b5ff50a8b7ff52a7b6ff53a8b7ff55a8b7ff55a8b7ff57a7b7ff55a8b7ff56a9b8ff56a9b8ff57a9b8ff56a9b8ff8d7523ff8d721fff886e1aff836b11ffdec65cffdec85dffdec85dffdfc95effdfc95effdec85dff132b3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b31000d292d0241c5b2ff43c4b4ff4ac5b9ff4ac5b9ff4cc6baff4dc7bbff4cc6baff005e5aff005f5bff00635fffc1242affc6262dffc6262affc7272cffc8282dffc9292effc72a2eff87141fffe68c36ffe38c27ffe18e28ffe38f29ffda852affaa5214ffab5413ffab5413ff62112fffa21c68ffa31d69ffa41e6affa7206affa82269ffa9236bff85453aff706626ff03595aff005855ff005957ff005c59ff005a61ff44b5d8ff48b7dbff4db8dbff50b9dcff47b3e0ff89124fff9a1662ff9b1761ff9d1962ff9d1962ffa01b63ff390d27ff286468ff015d5eff015753ff015752ff005d59ff016c6aff45c3b8ff4dc4b8ff4dc4b7ff54c7baff6c101aff691015ffc32a2dffc4292dffc72b2fffc92e31ffca2f33ffc73134ff580d1affe53f8bffe33f88ffe3418affe4428cffe4428effe4428affbe4578ff3c1129ff3c112bff125e73ff0a5d71ff4fa6b7ff4fa6b7ff50a6b5ff52a7b6ff52a7b6ff53a8b7ff53a8b7ff53a8b7ff55a8b7ff55a8b7ff56a9b8ff56a9b8ff5fa7adff876a1dff80681bff7d641aff7b6218ffe0ca60ffdfc95effdfc95fff525227a7132c2d00132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f000d524d7640c4b1ff43c4b4ff43c4b4ff49c5b8ff4bc5b9ff005e5aff005e5aff005d5aff005d59ff2a5554ffc42528ffc6262cffc6262dffc6262dffc7272effc2262eff4d0d0effe18b26ffe28c27ffdf8d27ffe28e28ffe38f2bffdc8731ffac5512ffaa530eff9d1a62ff9f1864ffa21c68ffa31d69ffa41e6affa41e68ffa42068ffa5226cff663b24ff6e642cff015858ff025857ff015a58ff005a5eff3db4d9ff41b4d8ff45b6daff46b7dbff005785ff17445aff460d30ff9a145eff9c165eff620c3bff380e25ff3a0f28ff30201eff0782b5ff0384b9ff4fbbdeff0281b6ff006c72ff005f60ff45bfb4ff46c1b5ff005b57ff67141aff631015ff851519ffc3292fffc3282effc72b31ffca2830ff5e101fffe33c89ffe33c89ffe43d8affe2408bffe4408affe3418affe4428cffe6428cffe1468cff105c6fff0e596eff4ca4b6ff4ca6b3ff4ca6b3ff4fa7b5ff4fa7b5ff51a6b5ff51a6b5ff52a7b6ff52a7b6ff52a7b6ff53a8b7ff53a8b7ff53a8b7ff54aab8ff7b641aff7d611aff7a5f18ff755b18ff745b19ff212a2409142b2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c2f00122c2f00142b31000f2c3102177e71ff45c0afff026960ff005853ff015a58ff005b58ff025b59ff005e5aff035c5aff005e56ffb4222affc22329ffbd262dff520a10ff4d0d12ff4c0e09ffe18b26ffe18b26ffe18b26ffe48c27ffe28e28ffe38d2affe38f2cffdd8928ff991561ff9d1763ff9f1864ffa11a67ffa21c68ffa31d69ffa41e6affa2206bff711045ff572b22ff6a6741ffd4ce71ffe2cd69ff70955eff3da9d2ff39b0d7ff40b1d9ffaa60a4ff765193ff005d8eff40112bff182028ff2da788ff3faa8dff44af92ff3a0e2aff4eb6dfff4cb9ddff50bbddff51bcddff0082b8ff0382b9ff005e5eff015859ff035758ffd8347effe6428cffe6428cffe7438dffdd4a88ff4a0e10ff4d0d14ff4f1116ffdd3a83ffe03a87ffe23b88ffe33c89ffe33c89ffe43e88ffe14089ffe33f89ffe4408affe4408cff16556dff0e596eff4ba4b7ff4ba4b7ff4ba5b4ff4ca6b3ff4ca6b3ff4ca6b3ff50a6b5ff50a6b5ff51a6b5ff52a7b6ff52a7b6ff52a7b6ff52a7b6ff53a9b6ff7b5d1cffa55518ffb0591dffad571bffae571cffa05d26ff122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122c2f00d63580fda20c53fea20d54ff9e0e54ffa20f53ff25263b10082f3700005851ff005755ff005755ff015a58ff015a58ffd6d373ffe1ce62ffdecb5fffdbce63ff481515ff4c0f11ff4e0e13ff4c0e0cffe08a25ffe28925ffe38a26ffe18b26ffe18b26ffe38c29ffe18e2affe48d2aff991561ff9c1662ff9d1763ff9f1864ffa01966ffa11a67ffa21c68ffa51e6aff5d0d33ff460f2fffe0ca5dffe2cc62ffe2cc64ffe2cc64ffe3c95eff034b86ffe33687ffe33c89ffe54591ffe94c96ff2b435cff10a07fff1ea383ff2ca987ff36aa8bff271d24ff46b6daff4bb7dcff4cb9ddff36a8d5ff0480b8ff0281b8ff05759bff0a575effa41054ffe23d87ffe33f89ffe4408affe4408affe4408affd94687ff501016ff9a0d50ffe13888ffe13886ffe23987ffe03a87ffe23b88ffe33c89ffe33c89ffe43d8affe43d8affe43f8bffe33f8bff0a576cff46a1b3ff4aa3b5ff4aa3b3ff4ba5b4ff4ba5b2ff4ba5b2ff4ca6b3ff4ca6b3ff4da7b5ff4fa7b5ff51a6b5ff51a6b5ff52a7b6ff55a8b9ffab5318ffa95418ffab5519ffac561affac561affae591cffe29335ff112c2c00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c2f00a23169b3e13384ffe13484ffa20c53ffa00c53ffa00c53ffa10e54ffa10e54ffb22166ff8a1248ff202b360108403e2a045658ffe0ca5dffe1cb5effe1cb5effe1cb5effe4cc62ffe4cc62ffdfc657ff413026ff4e1010ffe08722ffe18824ffe28925ffe08a25ffe08a25ffe18b28ffe38c29ffe48c2aff861a48ff9a1360ff9c1662ff9d1763ff9d1763ff9f1864ffa01966ff9a1b64ff450e2fffe0c75affe0ca5dffe1cb5effe1cb61ffe2cc64ffe4cd64ffc89a5bffe03283ffe23585ffe13b88ffe53f89ff145583ff01997aff109e7eff1aa081ff21a486ff005843ff42b5ddff42b5dbff45b6dcff26a4ceff007db5ff0180b7ff067fb4ffa40a51ffde3383ffe33788ffe33a8affe33c8bffe13d8affe43e88ffe33f89ff691836ffde3687ffe03787ffe03784ffe13886ffdf3986ffe03a87ffe23989ffe23b88ffe23b88ffe33c89ffe43d8affdf3c88ff0b556bff489eb1ff47a3b4ff4aa3b3ff4aa3b3ff4aa3b5ff4ba4b7ff4ba5b2ff4ba5b4ff4ba5b2ff4ca6b3ff4ca6b6ff4da7b7ff4fa7b5ff51a6b5ffab5411ffab5519ffa95418ffab5519ffab5519ffd17a27ffe69337ff152b2b00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f006d2a5441e03283ffe13384ffe23585ffa90e58ffa20c53ffa20c53ffa20d54ffa20d54ffa20d54ff9b1050ff860e42ff871141ffdfc95affe0ca5dffe1cb5effe1cb5effe1cb5effe3cc62ffe4cc62ffe4cc62ffd5be4affd1b54fffe08c2fffe08725ffe18824ffe28925ffe28925ffe38a26ffe38a26ffe08723ff692f0fff97115bff9a1360ff9b1561ff9c1662ff9c1662ff9f1663ff350f27ff390d27ffe0c75bffdfc95cffe0ca5dffe0ca5dffe1cb60ffe2cc62ffe7c869ffe02b7fffdf2f81ffdf3182ffdf3686ff7c0b38ff138f72ff039873ff049c79ff0e9f7eff014231ff3fb4deff3fb5d7ff42b5dbff45b4dbff007eb4ff017eb8ff00587effdf3482ffe13585ffe23687ffe13888ffe13888ffe33a8affe33a8affe13d8bff8c0c44ffdd3586ffdf3683ffe23687ffe03787ffe03787ffe13888ffe13888ffe23987ffe03a87ffe03a87ffe33c89ffc52571ff0c5067ff044d63ff43a4b4ff49a2b4ff49a2b4ff49a2b4ff4aa3b5ff4aa3b5ff4aa3b5ff4ba5b2ff4ba5b2ff4ba5b4ff4ca6b6ff4ca6b6ffdc8e3effe58e30ffd67e2affc16723ffcb7225ffe48d2fffe59132ffe29232ffa07a44a8132c2d00132c2d00132c2d00132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f000b2e2f00df3182ffdf3182ffe13384ffe03283ffe23583ffab125aff9e0b51ffa00c53ffa10e54ffa10e54ffd82c7cffda2c7dff99332affdfc95affe0ca5dffe0ca5dffe0ca5dffe0ca5dffe2cb60ffe3cb60ffe3cb60ffe4cc5effb09626ff997f21ffdd8226ffe28622ffe08722ffe18824ffe28925ffe28925ff692f0fff692f0fff692f0fff94175cff9d1063ff9b1561ff9d1563ff380a28ff390d27ff390e25ffe1c85effdec859ffdec859ffdfc95affe0ca5fffe0ca5fffa89334ffca2c69ffd92b7effd92b7eff70093dff600f34ff1f5286ff013d36ff013f32ffab2b72ffb73478ff025994ff3cb4dbff3cb4d8ff3fb5d9ff40b4d9ff2da7d0ff015c5fffe03283ffe03283ffe13384ffe13585ffe03787ffe03787ffe13888ffe23989ff8c0c44ffde3681ffe13482ffdf3484ffdf3685ffe03787ffe03787ffe03787ffe33886ffe03986ffe03a87ffe23b88ffbd206bff0d4f66ff0b4b63ff44a3b4ff44a2b3ff46a2b1ff47a3b2ff47a3b2ff47a3b2ff48a4b3ff48a4b3ff48a4b3ff4aa3b3ff4ba5b4ff4ca4b3ffe08b29ffe38c2dffe38c2dffe48d2dffe48d2dffe18f2effe38f2effe49031ff9c7a3fa6132c2d00132c2d00132c2d00132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100932e5dc1e13084ffe13084ffe13084ffe03283ffe03283ffe13283ffe03283ffd22677ffd7297bffe63485ffe23585ffe23585ffe6c45bffdfc958ffe1c95affe1c95affe2ca5bffe0ca5dffe0ca5dffe1cb60ffe1cb60ffe1cb60ffbea633ff907820ff917921ff9d7823ffd6822dffdc862bff712d01ff6a2d11ff682e0dff692f0fff692f0fff6b3012ff673016ff380d29ff340e22ff390e25ff390d29ff360e27ff78552effdec658ffdec859ffdec859ffdec859ffdfc95aff766216ff7e6a21ff670937ff5a0f37ff630e38ff611037ff6e1138ff024138ffa11c67ffa5216affa6276fffad2c73ff05518aff3faedcff3eb0daff005686ff004e83ff7b1341ffdd2f7effe13182ffe03285ffe03283ffe03381ffde3484ffe13585ffe23687ff7e1044ff7c0846ffe03281ffde3383ffdf3484ffe13384ffe13583ffe23784ffe23784ffe03784ffe03784ffe13886ffd3307cff0d495fff0c4760ff08455eff47a3b4ff46a2b1ff46a2b1ff46a2b1ff47a3b2ff47a3b2ff47a3b2ff47a3b2ff4ca3b3ff4ca3b3ff833c0effd88533ffe18b2affe18b2affe18b2affe38c2bffe38c2bffe48d2dffe28d2fff132b3000132c2d00132c2d00132c2d00132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100de3080ffe13084ffe13084ffe13084ffe23283ffe03283ffe03283ffe03283ffe13384ffe13384ffe23585ffe23585ffe23585ffebc666ffdec857ffe1c95affe1c95affe1c95affdfc95cffdfc95cffe0ca5cffe0ca5dffe1cb60ffa78e26ff9e1a66ffa11a66ffa31d69ffa41e6bffa51f6aff6e2b16ff682e0aff682d12ff692e13ff692f10ff6b3011ff6b3012ff621035ff610e3cff610e3cffa41e6affa3226aff41112bff9f8134ffdec755ffe1c757ffe1c757ff77621dff77631aff7a6418ff017d93ff057f93ff4fbec4ff462946ff661034ff30466bff9a1661ff9e1a66ffa11d69ffa5216dff0f4e84ff014983ff004880ff004b80ff004e83ff811346ff780d3fffdc3081ffde3083ffdf3184ffde3184ffde3385ffde3383ffde3784ff7f1043ff780d3fffe23386ffde3383ffde3383ffe03283ffdf3482ffdf3482ffe13583ffe03784ffe03784ffe13784ff04495bff0d495fff0d445aff0c4359ff0c4359ff48a0b0ff44a0b0ff46a2b1ff46a2b1ff46a2b1ff47a3b2ff47a3b2ff47a3b3ff803a10ff7f370fff7e360dffe38c28ffe0892bffe08929ffe18b2affe18b2affe18b2affe38b2dff162a2f00122c2f00553f1d14d49a59ff704c2c460f2c3500142b2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b3100e12f82ffdf2f83ffe13084ffe13084ffe13084ffe03182ffdf3182ffdf3182ffe03283ffe03283ffe13384ffe13384ffe23585ff820f35ffdec857ffe0c859ffdec859ffdfc95affdfc95affdfc95affe0ca5bffe0ca5bffdbc655ff9f1665ffa01766ffa11a67ffa21c68ffa31d69ffa31d69ffa7206dff8f0e55ff4f1425ff6b2e11ff6b2e11ff6d2e20ff620e3cff620e3cff620e3cff730b46ffa21c68ffa41e68ffa41e68ff7c1c50ff38132dff775d1fff765c1bff745f1bff75601cff157574ff01798dff23adb5ff45b8c4ff46bbc9ff611033ff6a173cff93115aff981460ff9a1662ff9f1b67ff262148ff004d86ff004b82ff004b80ff005084ff811446ff730f3fff710a3effde2e82ffdb2e7fffdd3081ffdd3282ffd53582ff801143ff7b0e42ff720d40ff750a38ffe03283ffe03283ffe03283ffde3381ffde3383ffdf3484ffe13583ffe13583ffa52163ff0f475cff0d445aff0d4157ff0d4157ff0e4056ff0e3e55ff053e53ff4ea1b0ff47a3b0ff49a4b1ff4d9eaeff5e3d2aff833a17ff8c1c50ffa7336dff8f2741ff732b0affe18929ffe2892bffe0892affe08a27ffde8a2dffcc6b1dffc56b16ffe39335ffe49439ffe49439ffe49437ffe59538ffdd9a4cff0f2d2e00122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100e23084ffdf2f83ffe13084ffe13084ffe13084ffe03182ffdf3182ffdf3182ffe03283ffe03283ffe03283ffe13384ffe23585ff830b46ffe4c95dffe0c859ffdec859ffdec859ffdec859ffdfc95affdfc95cffe1c95aff98135aff9e1564ffa01766ff9f1864ffa01966ffa11a67ffa21c68ffa31d69ff9c1d66ff520d33ff4b0f2dff531134ff600d3bff620e3cff620e3cff620e3cff9f1b66ffa21c68ffa21c66ffa31d67ffa41e6aff7f174eff451430ff796123ff745d19ff745f1bff36a59aff25afbbff2bb3bfff2fb5c2ff36b6c5ff025d6dff691639ff5d1336ff951459ff95135fff380c26ff410f2cff004e87ff034a82ff004e83ff2d5182ffd07e4affe3923bffef9d4eff670d34ff600a37ff600d3aff5f0e33ff81154affe3cc62ffcdb64cffb69c31ff692021ff71093bffe13283ffe03283ffde3381ffde3383ffde3383ffde3381ff5e1341ff12445cff10435aff0e4157ff0e4056ff0f3e55ff0f3c54ff0f3c54ff0e3b50ff0e3c50ff473b3bff82391fff5e113aff630f3cffa02469ffa5256effa5266cffa6276dffa7286dff9c2963ff6f2d05ff792d05ff9b4a16ffab5a17ffae5611ffe49031ffe49133ffe29234ffe59235ffe49437ffe49437ffe39335ffd39447ff122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00aa2a60ffdf2f83ffdf2f83ffdf2f83ffdf2f83ffdf2f83ffe13084ffe13084ffdf3182ffdf3182ffe03283ffe03283ffe13384ff700935ff680e37ffdbc854ffe0c857ffe0c859ffe0c859ffe0c859ffe0c75affb89f37ff9e1264ff9e1564ff9e1564ffa01766ff9f1864ff9f1864ffa01966ffa21c67ffa21b69ff6b0e40ff480d2aff5f0d3bff600d3bff620c3bff620e3cff670c3effa11a67ffa11a67ffa21c68ffa21c68ffa21c68ffa31d69ff4f0d36ff4e1137ff72b7c1ff6ab9cdff755c1fff1badbdff1db0bcff26b0c0ff004a5fff005064ff772457ff8c134eff5c113cff3c122eff39102cff391029ff004f88ff024c85ff23506bffe4902dffe19131ffe49130ffe49132ffe59233ffe9993bff601234ff7e1841ffe1cb60ffe1cb60ffe1cb63ffb39b31ffb59a31ff6c2a23ff650d34ff620d34ff9b1452ffad205eff680c36ff16435bff16435bff124259ff113f56ff113f54ff103e53ff103c52ff0f3b54ff243c47ff873d1eff571035ff561038ff580f3aff5d0e3affa3216affa1226affa5246dffa5266cffa5266cffa6276bffa5266affa52869ff954514ff934311ff944212ffe4902dffe38e30ffe49031ffe49031ffe49031ffe49031ffe49134ffe49134ffe49134ff132b2f01132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f000c2e2f00db2f83ffde3083ffde3083ffdf2f83ffdf2f83ffe13084ffe13084ffdf3182ffdf3182ffe03283ffe03283ffe03283ff660c33ff640c33ff620d32ffdabc58ffe2ca5bffe1c95affe0c859ff786015ff735e17ff9e1264ff9c1362ff9d1463ff9e1564ff9d1763ff9f1864ff9f1864ffa01966ffa21a68ff600d39ff460f2eff5d0d3fff600d3bff600d3bff620a3cff9e1864ffa01966ffa01966ffa11a67ffa11a67ffa21c68ffa21c68ff8a0f4cff4ab6ddff50bbddff55bbdaff5bbfdfff516b57ff004761ff00485bffd53983ffa50f56ffa10f55ffa10f55ffa21056ffa21056ffe74f97ff371129ff004e84ff034d82ffe48d2affe28d2dffe38f2effe18f2cffe2902fffe29031ffe59233ffbc6446ff9a8420ffe0ca5dffe0ca5dffe0ca5effddc75affb0972dffb39b32ff650f34ff611035ff621039ff055f8bff084c6bff16435bff134159ff124056ff154156ff143f57ff163e4aff83401bff5a123cff571139ff55123aff550f38ff520e37ff8c1f5cffa11f68ffa3216affa3216affa4236cffa42369ffa42369ffa5246bffa5246bffa6256cff964118ff90420fff90410fffe18d29ffe28d2fffe38e30ffe38e30ffe38e30ffe38e30ffe29031ffe29031ffe29031ff162b2a00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100ce3070ffdd2e84ffdd2f82ffde2e82ffdf2f83ffdf2f83ffdf2f83ffe13084ffe13084ffdf3182ffdf3182ff80053bff620d33ff620d33ff620d33ff620d33ff630e34ff650f35ff641635ff7e5c27ff725e15ff9c115fff9e1262ff9c1362ff9b1561ff9c1662ff9c1662ff9d1763ff9f1864ffa01966ff4e0c31ff3d0b28ff901559ff8f1353ff9d1761ff9d1763ff9d1763ff9f1864ffa01966ffa01966ffa11a67ffa11a67ffa21c68ff752469ff42b5dbff46b7ddff4dbadeff52bcdcff52c1ebff086795ff95115fffe23989ffa10e54ff9f0e54ffa10f55ffa10f55ffa80e58ffe33a8affd94486ff0a528affde8327ffe38c29ffe38c29ffe48d2affe28e2affe48f2cffe49030ffe29031ffe39030ffdec760ffdec85bffdec85bffdfc95cffe0ca5dffe2c95fffc5ac42ff5e153fff4bbadfff53bbdfff53bbdfff56bcdbff56bcdbff174f6cff1c4154ff80402eff5f193fff58173fff385588ff363668ff55103aff520e37ff500d33ff500d34ffa01f68ffa11f68ffa22069ffa22069ffa3216affa32269ffa32269ffa32269ffa4236affa4236aff9d2664ff8d4111ff8c3f10ffe38c2bffe38c2bffe38c2bffe28d2fffe38e30ffe38e30ffe38e30ffe29031ffe18f2eff1a2a2500132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100132b3100e33081ffdb2f80ffde3083ffde2e82ffdf2f83ffdf2f83ffdf2f83ffdf2f83ffdf3182ffde3181ff620d33ff620d33ff620d33ff620d33ff630e34ff630e34ff650f35ff630e34ff650d27ff661134ff821249ff9c1161ff9c1161ff9d1463ff9b1561ff9c1662ff9c1662ff9d1763ff7f1a53ff390d25ff380c26ff9c1662ff9d1763ff9d1763ff9d1763ff9d1763ff9d1763ff9f1864ff9f1864ffa01966ffa01966ffa11a67ff742566ff3db2d9ff3eb3daff44b5d8ff49b5d8ff4dbae2ff005e8dffcd2675ffb31460ffa10e54ff9f0e54ff9f0e54ff9f0e54ffe03787ffe23989ffe23987ff215d90ffe38926ffe08a27ffe18b28ffe18b28ffe48d2affe48d2affe38f2effe4902fffe4902eff94781fffdfc859ffdec85bffdfc95cffe0ca5dffe0ca5fffdfcd64ff2e9dccff4cb9dbff4eb8dbff50b9dcff54badbff54badbff55bbdcff551b47ff0671abff0281baff0281b8ff037fb7ff0082b8ff0082b8ff383c70ff4f0e31ff500d33ff9f1d66ffa01e67ffa01e67ffa11f68ffa11f68ffa22069ffa22069ffa22069ffa22069ffa3216affa4236cff883e0dff873b0dffe18b29ffe18b2affe18b2affe38c2bffe38c2bffe48d2dffe58e2effe28d2dffe48e2eff122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000132b3000132b3000132b30019f2059ffe02e82ffe43286ffdf2f82ffdf2f83ffdf2f83ffdf2f83ff981452ff5f0e32ff5f0e32ff600d32ff620f34ff620f30ff620e38ffd07b1cffde8823ffe58d28ffe78e29ffbf6615ffab5413ff981566ff9b125fff9c1362ff9c1362ff9b1561ff9c1662ff9a1561ff390e25ff380e25ff380e25ff9c1662ff9c1662ff9c1662ff9c1662ff9c1662ff9d1763ff9f1864ff9f1864ff9f1864ffa01966ffa11a67ff771349ff36b1dcff37b1d7ff39b2d6ff40b4daff024f84ff971058ffe23384ffb51863ffa10e54ff9f0e54ff9f0e54ffa20d54ffe03787ffe13888ffe13886ffb1286effe58925ffe08a27ffe18b28ffe18b28ffe38c29ffe38c29ffe28d2cffe48f2dffe48e2dff907325ffddc559ffdec657ffddc758ffe0c859ffe0c85eff0b68a1ff45b7dcff48b7d9ff4cb9ddff4dbadcff4fbadcff52baddff50bbddff4dbbe6ff0978aeff4cb9ddff32add3ff0283b4ff0080b6ff0082b8ff0082b8ff4d0d31ff4c0b31ff9d1c65ff9f1d66ff9f1d66ffa01e67ffa01e67ffa01e67ffa11f68ffa11f68ffa11f68ffa11f68ffa2206aff843b0dff81380cffe28c2bffe28a2bffe18b2affe18b2affe18b2affe38c2bffe38c2bffe38c2bffe48d2fff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112a3000122a2f00441b3175961854fea61c5aff6a0638ff600f37ff5e0e33ff630c34ff620e35ff610f32ff600f34ff5f0f36ffe18b26ffe48c28ffe38c27ffe38c27ffe48c27ffae5513ffab5413ffab5413ff750b36ff9c135fff99125dff9a1360ff84164eff370d23ff380c24ff380e25ff360d23ff9b1560ff9c1660ff9c1660ff9c1662ff9c1662ff9d1763ff9d1763ff9d1763ff9f1864ffa01966ffa11966ff3b0c2bff3a0e2cff3d90b6ff41addaff004b80ff004d81ffe03484ffde3383ffe23383ff9b0850ff9e0d53ffa00e54ffdc327fffdf3685ffe03787ffe13888ff9a1353ffa65014ffe08826ffdf8826ffe08a27ffe18b28ffe18b28ffe38c29ffe38c29ffe28b28ff876c20ff7e641affdcc35effdec658ffe0c659ff106698ff0568a5ff42b2daff47b5dcff48b7ddff49b8dbff4cb9ddff4cb9dbff4dbadcff4cb8e0ff48b7dbff48b7dbff49b8dcff4eb7daff4dbadcff50bbdeff51bbdbff147db2ff4a0c2fff9d1a63ff9c1a63ff9f1b65ff9d1c65ff9f1d66ff9f1d66ffa01e67ffa01e67ffa01e67ffa01e67ff8c1c45ff7d380fff7b350eff7b350fffdc8728ffe08929ffe08929ffe18b2affe18b2affe18b2affe38c2bff112a2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100112c3100132b3100132b3100132b3100112c3100112b3200112b3200132b3200182932002e233116e88a23fee38b24ffe38a26ffe38c27ffe38c27ffe48c27ffaa5111ffaa5312ffaa5312ffab5413ff8a3f11ff893f10ff893e10ff2c8e83ff59cbc1ff60ccc3ff5fcabeff2f5757ff36122dff9b155fff9c1660ff9c1662ff9c1662ff9d1763ff9d1763ff9d1763ff9d1763ff9d1763ff971a65ff440b16ffab5413ffac5618ffab5516ff491621ff034980ffe13482ffe03283ffde3383ffe43485ffd32d7bffdf3381ffde3484ffdf3685ffe03787ffdf3686ff9f1258ff803b15ffdd8822ffe38726ffe08a27ffe08a27ffe08a27ffe18b28ffe18b28ff886121ff7c621fff74601fff586247ff0272a7ff0068a0ff0166a3ff0063a1ff41b5ddff42b5dbff42b5dbff45b6dcff46b7ddff48b7d9ff49b8daff309cc9ff44b5d8ff46b4d8ff47b6daff48b7dbff49b8dcff4cb9ddff4ab6dbff0080b5ff470d2fff98195fff9b1962ff9e1a63ff9e1a63ff9f1b65ff9f1b65ffa01c66ffa01c66ffa01c66ffa21e65ff77330fff753310ff73320fff72310eff6d3009ffdd8422ffe18828ffe18828ffe38a2affe18b2aff112c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100e28a23ffe28a23ffe38b24ffe18b26ffe18b26ffe38b26ffab5413ffaa5312ffaa5312ffab5413ff96420bff863b0eff52c5bbff50c9bdff57c9bcff5bc9beff59cabeff5dc9beff35bdb0ff59113aff9c1661ff9c1662ff9c1662ff9c1662ff9c1662ff9c1662ff9d1763ff9d1763ff7a3118ffad5313ffab5413ffab5413ffac5515ffe0892effae5718ff8e1e30ffdf3182ffdf3182ffdf3182ffe03285ffe13384ffe13384ffdf3484ffdf3484ffe03388ff740f3aff8a4118ff74320fffdd8725ffde8725ffdf8826ffdf8826ffe08a27ff71410dff4f6c66ff49bbe0ff4cb9dbff51baddff52baddff52baddff53bbdfff005d98ff187aaeff3eb4d6ff41b4d9ff42b5dbff42b5dbff45b6dcff46b7ddff02639aff41b4d7ff43b4d9ff44b5dbff44b5dbff45b6dcff46b7d9ff46b4d8ff36678fff420d2eff410d31ff9b1962ff9d1962ff9d1962ff9d1962ff9e1a63ff9e1a63ff9f1b65ff9e1c62ff90215aff6c300bff6b2d10ff6a2f14ff672e11ff692d16fe5e2d15ff442e1db72f2c201a122c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c3100e28a23ffe28a23ffe38b24ffe18b26ffe18b26ffe28a25ffac5210ffaa5312ffaa5312ffaa5312ffa8521bff50c6bdff52c7bcff51c9bdff53c9bbff58c9bcff58c9bcff59cabeff58cfc3ff04877eff1d6a6fff981561ff9c1662ff9c1662ff9c1662ff9c1662ff7f1751ff370e29ffad5311ffaa5312ffaa5312ffab5413ffaa5312ffe68f2fffe9922dff8c4016ffdf3182ffdf3081ffdf3081ffdf3184ffdf3182ffe03283ffde3383ffdf3484ffe13285ff661338ff8d4c2bff6e3420ff6b2e1dff6f2d11ff723203ff662c05ff13749dff0072b0ff4ab8daff49b8daff4cb9dbff4ab9dbff51b9dcff4fb9dcff50bbddff189ac8ff005492ff40afe0ff40b3d8ff40b3d8ff41b4d9ff41b4d9ff015c94ff005c99ff015c99ff40b6ddff41b4d9ff45b3d9ff44b5dbff44b5dbff42b5dbff3e0f2eff3f0e2eff3d0d2aff4d092eff9f1863ff9d1962ff9d1962ff9d1962ff9d1962ff9e1a63ff9b1e5effa75115ffab5519ffa95413ffab5519ffab5519ffad5618ff73522ed3132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100e28a23ffe28a23ffe28a23ffe28925ffe28925ffe28925ffd0771fffa95111ffaa5312ffaa5312ffa95315ff4ac6bcff4ec5baff4fc7bbff50c8bcff51c9bdff55c8bbff56c9bcff57cabeff04a395ff007267ff017167ff007369ff1f6665ff234950ff20212eff321428ff321220ffdf8424ffa95011ffa95111ffaa5111ffe48b2cffe58f29ffe58f29ff803a0eff7f3818ffdf2f83ffdf2f83ffde3083ffde3081ffdf3182ffe03285ffe13082ff681135ff4987afff4ab9ddff50bbddff52bcdfff52bcdfff59c1e2ff0072acff026facff0877adff45b8dbff48b7d9ff49b8daff49b8daff4ab9dbff4cb9dbff4fb9dcff51bcdfff0081b4ff02497eff02497cff21477cff423f75ff702865ffc7428effc5438fff174886ff2080b6ff3eb3d8ff3eb3d8ff3fb5d9ff3fb5d9ff420c31ff380f2dff3a102cff2e0f2bff3c0c2bff3e0d2aff761346ff9e1765ff9e1c62ff881952ff984917ffb45d1bffab5317ffa95416ffa95416ffab5517ffab5517ffab5517ffab5517ffa95616ff132b3500132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142c3200e18824ffe18824ffe28925ffe28925ffe28925ffe28925ffe38a28ffbb6015ffa9510fffab5310ff9e4815ff4ac6baff4ac6baff4ec5baff4fc7bbff4fc7bbff52c7baff55c8bbff55c8bdff018d81ff016d64ff016d64ff016d64ff026e67ff006f67ff007068ff007068ff08726bffe48724ffe28926ffe08729ffe28a23ffe38c27ffe38c27ffe38c29ff783712ff753613ff773717ffcf3179ffe62f82ffde3081ffde3081ffcf357bff661234ff317b99ff47b8dcff49b8dcff4cb9ddff4fbadaff50bbddff50bbddff52bcdeff026ca7ff45b6dbff44b7d9ff45b6dcff48b7ddff48b7dbff49b8dcff49b8daff49b8daff4eb8dbff4fb9e0ff941355ff931050ff9e1155ffe43989ffe33a8affe53c8bffe53c8bffe63d8cffea3d8eff018591ff0a8094ff088783ff008881ff16aea2ff5fcbc2ff5dccc2ff04958aff029489ff03948aff9b4b19ff984612ff994713ff994711ffb35a12ffcf7724ffab5317ffa95416ffa95416ffa95416ffa95416ffab5517ffab5517ffac5618ffcc7628ff132b2f00122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100132b3100132b3100132b3100132b3100132b3100112c3100142b3100e78716fbe18824ffe18824ffe18824ffe28925ffe28925ffe28925ffe28925ffe28a22ffbb6014ff6e3111ff44c5baff48c5baff49c5b9ff4ac6baff4ac6baff4fc7bbff4fc7bbff50c8bcff007368ff00655eff037167ff53c9beff58c7bdff5dcbc1ff5fccc3ff3ec3b4ff028375ffe18720ffdf8621ffe18824ffe18824ffe08a25ffe18b26ffd58733ff6f3214ff6b3114ff596469ff589bb5ff046b93ff006fa6ff0172aaff0370aaff1173acff43b7daff46b7dbff48b7dbff49b8dcff49b8dcff4cb9ddff4fbadaff4fbadaff036ca7ff44b6daff43b7d8ff43b7daff45b6daff46b7dbff48b7dbff48b7d9ff49b8dcff4bb7dcff4cb9ddff761653ff970f53ffdf3685ffe13888ffe13888ffe23989ffe33a8affe33a8affe43a8affe23d87ff028582ff028580ff079c8fff5bc8bcff5bc9beff5bc9beff5dc9beff3bbeb1ff069789ff00968bff91440eff8f440dff9a4812ffe48d2dffe48d2dffad5316ffa95416ffa95416ffa95416ffa95416ffab5519ffab5519ffac5618ffe68f2eff1f261c00112c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c31002c272600ce2930ffcb292effcb292fffca292effd63439ffc42228ffbb1f22ff6d0d15ffe08723ffe08722ffe08722ffe18824ffe18824ffe28925ffe28925ffe28925ffe08b2dff6b3010ff45c7b1ff45c3b8ff46c5b7ff49c5b9ff49c5b9ff4ec5baff4ec5baff51cabeff045c58ff53c8bdff53c8bdff53c8bdff53c8bdff56c9beff58c8beff58c8beff63cdc4ff037d71ffdf8723ffe08521ffe28622ffde8822ffe08a26ff6a2f0fff4bbaddff4ab9ddff4ab9ddff4ab9ddff4cb9dcff4cb9d8ff2e9acaff016ba2ff006ca0ff43b7daff43b7daff43b7daff46b7dbff48b7dbff49b8dcff4ab9ddff4dbadeff2897c8ff40b6dcff41b6dbff43b6dcff45b6dcff43b7daff43b7daff46b7ddff46b7ddff48b7dbff49b8dcff81104affbb1c66ffe23585ffe33687ffe23687ffe33788ffe13888ffe23989ffe23989ffe53a88ffcf4086ff01827dff53c8bdff57c7bbff58c9bcff58c9bcff58c9bcff5bc9c0ff5dc9c0ff5dc9c0ff61c8bcff8f410cffe38c2bffe38c2bffe38c2bffdd852dffad5517ffa95416ffa95416ffa95416ffa95418ffaa5515ffe58e30ffe68f2fffe79030ff112c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3000132a3100ca2835ffc9262cffca282dffca282dffca282dffca282dffcb292effcb292effea5456ffbc1b23ff730e15ffdd8621ffe08724ffe18826ffe18826ffe18826ffe18826ffde8927ff692f0fff692f0fff6a2f0fff43c4b8ff43c4b8ff47c3b8ff48c4baff49c5b9ff49c5b9ff035e5bff52c7bcff53c9bbff53c9bbff53c9bbff53c9bbff55c8bbff57c7bbff57c7bbff58c8beff5fccc3ff05796eff24705eff425132ff0f756aff017875ff4bb9ddff48b7dbff49b8dcff4ab9dcff4ab9dbff4cb9dbff4cb9dbff4cb9dbff47b5daff00689fff41b4d9ff42b5dbff42b5dbff43b6dcff43b7daff46b7dbff48b7dbff49b8dcff38a7d4ff41b1dcff41b4d9ff42b5dbff43b5dbff45b6dcff45b6dcff45b6daff45b6daff46b7ddff4ab6ddff850d4affde3385ffdf3484ffdf3484ffe13585ffe23687ffe13687ffe13888ffe13888ffe23989ffe23989ff017b75ff52c7bcff56c6baff56c6baff57c7bbff57c7bbff58c9bdff59cabeff5bc9c0ff5bc9c0ff8f4112ffe18b2affe38c2bffe38c2bffe38c2bffe18b28ffc1691bffae5614ffb55c17ffd17c28ffe28e2bffe38f2effe38f2effe58e2eff112c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100102c2f00cc232effc9262cffc9262cffca282dffca282dffca282dffca282dffcb292effcb292effcc2a2fffe3464affb61b23ff6a0c14ff822b07ffdb891dffe28820ffdf882aff6a2d0dff742f1aff742623ff66132dff590f30ff581037ff343c4bff40c4baff44c5baff025f5dff254852ff4dc7bbff50c6bbff52c7baff52c7baff53c9bbff53c9bbff53c9bbff53c9bbff57c7bbff58c8beff58c9bcff48c4b9ff04776dff02776eff007569ff39b5e3ff46b7dbff46b7dbff46b7dbff49b8daff49b8daff49b8daff4bb8daff4bb8daff39b3dbff03659eff3cb4daff3fb4dcff3fb4dcff40b6ddff42b5d8ff43b7daff43b7daff45b8dbff1b5890ff005a9aff3fb4dcff3fb5daff40b4d9ff42b5dbff42b5dbff43b7daff43b7daff45b6dcff51b6dbff860d46ffe23082ffde3383ffdf3484ffdf3484ffdf3484ffe23585ffe33687ffe33687ffe13888ffe13888ff52c6c2ff51c6bbff51c6b9ff51c6b9ff52c7baff56c6baff58c9bcff58c9bcff58c8beff5bc9c0ff8a3c0dffe18b2affe18b2affe18b2affe18b2affe38c2bffe38c2bffe38c2bffe48d2dffe28e2affe28d2dffe38f2effe38f2effe58e2eff132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b310023262701c8242affc7252affc9262cffc9262cffca282dffca282dffca282dffca282dffca282dffc8282dffc9292effbb1e26ffa71722ff660f17ff660f14ff6c0f16ffa51565ff9f1665ffa01864ffa01864ffa21868ffa31a69ff9b1060ff550f30ff530e30ff520f32ff531033ff224e55ff4cc6baff4dc7bbff52c7bcff52c7bcff53c8bdff53c8bdff53c8bdff53c9bbff57c7bbff57c7bbff57c7bbff57c7bbff14a197ff037369ff007165ff45b6daff45b6daff45b6daff46b7dbff46b7dbff46b7dbff46b7dbff47b8dcff47b8dcff0381b4ff027eb8ff3ab0dcff39b3d9ff3eb3daff3eb3daff41b4d9ff42b5dbff42b5d8ff42b5d8ffa04c16ff9b365eff1176a6ff41b4d9ff3fb5d7ff3fb5d7ff3fb5d9ff40b6dbff40b6dbff42b6dcff7c1141ff7e0e41ffe33081ffe13182ffe03283ffe03283ffe03283ffe03484ffe13585ffe13585ffe13585ffe23687ff43bab5ff4cc6baff50c5baff51c6bbff52c7baff52c7baff54c7baff54c7baff57c7bbff57c8bbff8b3b10ffe18b2cffe08b2affe08b2affe28b28ffe18b2affe18b2affe38c2bffe38c2bffe28d2dffe28d2dffe28d2dffe28d2dffe68f2fff132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c2e00c92529ffc8242affc6242bffc7252affc7252affc9262cffc9262cffca282dffca282dffca282dffc8282dffc9292effcb2c32ff9d151dff720e15ff6d0e20ff9f1665ff9f1665ff9f1665ff9f1663ffa01764ffa01766ffa21868ffa21868ffc13887ff711144ff4f0e2fff500f30ff46c8baff4cc6baff4cc6baff4dc7bbff4cc8bbff52c7bcff52c7bcff52c7bcff53c9bbff53c9bbff53c9bbff57c7bbff55c8bcff06a796ff037067ff006d8cff42b5dbff42b5dbff43b6dcff43b6dcff43b6dcff45b8ddff46b7ddff46b7ddff46b7ddff007db5ff007eb8ff065e87ff3cb2d7ff3bb3d7ff3db2d9ff3cb4d8ff3cb4d8ff3fb5daff9f4a0effcb7328ffd77f29ffa04715ff4f386bff44b5dbff3db2d7ff3fb5d9ff40b6daff1d709bff761442ff75113fff780f40ffcc3074ffe0307fffdf3182ffde3081ffe03283ffe03484ffdf3484ffdf3484ffe03482ffa3487fff016f6dff4bc5b9ff4cc5b9ff4dc6baff51c6b9ff51c6b9ff51c6bbff54c7baff56c6baff57c7bbff843b11ffde8b2cffe08b2affe08b28ffe18b28ffe18b2affe18b2affe18b28ffe18b2affe18c2bffe18c2bffe28d2dffe28d2dffd78e40fd132c2d00132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142c2d00c72328ffc62429ffc62429ffc62429ffc7252affc7252affc9262cffc9262cffca282dffca282dffca282dffca282dffc9292eff94111aff8c1016ff9f1564ff9e1564ff9e1564ff9e1564ff9f1665ff9f1665ff9f1663ffa01764ffa01764ffa21966ffab2271ff75134bff520f30ff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4ec7bbff51c6bbff51c6bbff53c9bbff53c9bbff53c8bdff20b1a0ff036f66ff10789bff41b4d9ff42b5dbff42b5dbff42b5dbff43b6dcff43b6dcff43b6dcff45b6daff46b7dbff007fb9ff007eb8ff04748aff037487ff006687ff44b3ddff3eb3dcff3b6679ffa04a08ffe58e2affe58e2cffe4902fffe59131ffe69130ff961d52ff991752ff961850ff96174fff8b1952ff0071a4ff28608bff72113cff710e3dffe2317effde3081ffde3081ffdf3182ffe03283ffe03283ffe03283ffe23384ff016769ff006965ff50c3bcff4cc4baff4cc6baff4fc7baff4fc7baff4fc7bbff50c7b9ff51c8baff743b15ff823b12ff924706ffe08a2bffe18b2affe18b28ffe18b28ffe18b28ffe18b28ffe18b2affe38c2bffe38c2bffe38c2bffe38c2bff0b2e3300172b2c00112c2b00122c2d00142b3000132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122a2c00c22229ffc52328ffc62429ffc62429ffc62429ffc7252affc7252affc7252affc9262cffc9262cffca282dffca282dffcc272dff8f0f18ffa01362ff9d1463ff9e1564ff9e1564ff9e1564ff9e1564ff9e1564ff9f1663ff9f1663ffa01764ffa01764ffa21868ff8c0d54ff540f37ff4cc3b7ff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4ec6baff4fc7bbff51c6b9ff52c8baff52c7bcff26b5a4ff00685fff006571ff3fb5d9ff3fb5d9ff3fb5d9ff40b6dbff41b5dbff42b5dbff42b5dbff45b6daff45b6daff0487b5ff057db8ff027286ff027084ff026e7eff086c77ff904512ff95430effe38c26ffe48e28ffe38d2bffe38f2cffe38f2dffe6912effe49030ff92194cff941550ff94144fff96134fff961350ff95124cff076ba6ff066bacff6d0d43ffdd2e7fffdf2f81ffde3182ffde3182ffdf3182ffe43182ff1fa4d3ff30afddff2b9fc1ff006261ff4cc3b8ff4ac5b9ff4bc5b9ff4dc6baff4ec5baff4fc7b9ff4f5235ff783710ff7a3513ff7b3510ffe18b28ffe18b2affe38a28ffe28b28ffe28b28ffe18b28ffe18b2affe18b2affe18b2affe38c2bff78887dff12a3d1ff19a6d2ff1fa7d4ff2ca8d1ff42b5ddff50c0e1ff28678061112c2f00102c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142c2f00c22227fec52329ffc5232affc5232affc62429ffc62429ffc62429ffc7252affc7252affc9262cffc9272cffc9272cffcc252bff740b15ff9d1462ff9d1463ff9d1463ff9d1463ff9d1463ff9e1564ff9e1564ff9e1564ff9f1665ff9f1663ff9f1663ffa01766ffa11d6cff5b0b36ff4dcabdff49c5b9ff4bc5b9ff4bc5b9ff4bc5b9ff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4fc7baff50c8bcff52c7bcff04897cff00645dff00615bff3fb5d9ff3cb4daff3fb5d9ff3fb5daff3fb5daff40b6dbff41b6dbff42b6daff42b6d9ff43b6dcff016f9aff007285ff027084ff006c7bff006976ff8d421cffd6822cffe38c26ffe58c27ffe38d28ffe28e29ffe38f2cffe38f2cffe38f2cffe5902dff941351ff921451ff971253ff961052ffa6155bffb71d67ffa81357ff1a6295ff006dacff34528eff9d1e63ff8e266dff096fa8ff0681baff4ebbe4ff50bbddff53bbdfff56bee1ff56bcddff485740ff4dc2b9ff4bc3baff477e73ff53606cff18679aff603522ff763312ff74320fff753113ffdf8924ffe28927ffe28925ffe28925ffe08a25ffe18b28ffe18b2affe18b2aff79745fff028ec5ff0192c6ff0796c6ff50bbddff4fb9dcff50b9dcff50b9dcff51b9dcff53bddcff63b8d8f1142b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f00c22229ffc52327ffc5232affc5232affc6242affc62429ffc62429ffc62429ffc7252affc9262cffc9262cffc9262cffcb272dff620b19ff9d1463ff9d1463ff9d1463ff9d1463ff9d1463ff9d1463ff9e1564ff9e1564ff9f1665ff9f1663ff9f1663ff9f1665ffa11663ff5f0d37ff212534ff49c5b9ff49c5b9ff49c5b9ff4bc5b9ff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4dc7bbff4dc7bbff4fc7bbff006059ff00605dff02647fff2396c6ff3eb3d9ff3eb4d8ff3eb4d8ff3fb5d9ff3fb5daff3fb5daff40b6daff40b6d8ff43b7daff027489ff017185ff016e83ff006c7aff006979ff622038ffe28925ffe38b24ffe38b25ffe38c27ffe38c27ffe48d29ffe38f2bffe38f2cffe38f29ff941051ffaf195effc31d6bffe43989ffe33888ffe33788ffe33788ffe23788ffdf3e8cff406297ff016ba7ff006aa9ff016ba9ff3fb3e3ff4ab8dcff4bb8daff4fbadcff50bbddff52bcdfff52bbdaff9f4b0fffad5516ffe58e2cffe59130ffe2902fffe4932fff978a82ff0069a8ff056daaff4e3d39ff8a3e09ffdf8a26ffe08a25ffe08a25ffe18b25ffde8b2cff066eadff027eb8ff0081baff078abfff4fb7daff4fb9dcff4fb9dcff4fb9dcff4fb9dcff4fb9dcff50bbddff50bbddff51bad7ff142b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00152b2d00c42128ffc52329ffc5232affc5232affc52328ffc52328ffc62429ffc7252affc7252affc7252affc9262cffc4262cff4f0f16ff9c1262ff9d1463ff9d1463ff9d1463ff9d1463ff9d1463ff9e1564ff9e1564ff9e1564ff9e1562ff9f1663ff9f1665ffa11663ff600d37ff400e29ff49c5b9ff49c5b9ff49c5b9ff49c5b9ff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc4b8ff005f56ff016796ff0275adff0073aaff3eb3dcff3eb4d6ff3eb4d6ff3eb4d6ff3fb5d7ff3fb5d7ff3fb5d7ff40b6d8ff01748fff047287ff046f84ff006d81ff006c7aff006876ff571c3cffe38822ffe28a23ffe38b24ffe38b25ffe38a26ffe48c28ffe18d29ffe28e2affe28e28ffa31457ffbd1b66ffe23687ffe13585ffe33788ffe33788ffe33788ffe33788ffe43989ffe33788ffe3408eff0069a7ff026aa9ff49b5e3ff48b7dbff48b7d9ff49b8daff4ab9dbff4dbadcff4fbbdfffa9520fffe38c29ffe48d2affe18f2cffe2902dffe4922effe6912effd89545ff026aa9ff016aa9ff006ba9ff006ba9ff006aabff006ba9ff016ba9ff016ba9ff016ba9ff016facff0274b1ff45b8dbff49b8daff4db8dbff4db8dbff4cb9dbff4db8dbff4db8dbff4fb9dcff4fb9dcff4fb9dcff0b2b3000132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132a2f00c32334fec42227ffc5232affc5232affc5232affc5232affc62429ffc62429ffc62429ffc62429ffc62429ff4f0c12ff4d0f0fff9c1262ff9c1362ff9c1362ff9c1362ff9c1362ff9d1463ff9d1463ff9d1463ff9e1564ff9e1564ff9e1564ff9e1563ff9f1562ff440d28ff3d0f29ff391028ff48c4b7ff49c5b9ff49c5b9ff4ac5b9ff4bc5b9ff4bc5b9ff4bc5b9ff4cc6baff4cc6baff4dc7bbff006079ff0068a0ff0f8bbaff2da4d0ff0a7eb3ff0072a9ff00679fff3eb4d6ff3db2d7ff3db4d8ff3eb3d8ff3fb2d7ff006f83ff26b6beff3cb7c3ff3cbac6ff3ebdc9ff24a1afff006876ff5d173fffe78723ffe18824ffe28925ffe28a23ffe38a26ffe38b26ffe18b26ffe28c26ffe38c27ff9f0e52ffe13585ffe13585ffe13585ffe23687ffe23687ffe33788ffe33788ffe33788ffe43989ffe43889ffcd408dff00669dff40b4dcff42b5dbff43b6dcff45b8ddff46b7ddff49b8dcff49b8dcffe68c27ffe38c29ffe48d2affe58e2cffe38f2cffe38f2cffe68f2dffe68f2dff01689fff0166a5ff0267a4ff0168a7ff0069a8ff0069a8ff0069a8ff016ba9ff016ba9ff016ba9ff006ea4ff48b7ddff48b7dbff48b7d9ff49b8daff49b8daff49b8daff49b8daff4cb9dbff4eb8dbff4eb8dbff50bcdefe132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100102b2f00102c2f00c82229ffc4222bffc5232affc5232affc5232affc52328ffc52328ffc62429ffc62429ff5f0912ff4e0e14ff4a0f14ff9c1361ff9c1362ff9c1362ff9c1362ff9c1362ff9d1463ff9d1463ff9d1463ff9d1463ff9d1463ff9d1463ff9e1564ff9f1564ff3f0d28ff3c0e28ff3a0f26ff1d6697ff48c4b5ff49c4b7ff4ac4b7ff4bc5b9ff49c5b9ff49c5b9ff49c5b9ff4dc6b9ff016294ff36a9d6ff48b8dcff4bb7dcff49b8d8ff49b8d8ff49b8d8ff5fbfe3ff006ba0ff016aa1ff0369a1ff0268a0ff00698cff2fb7c1ff39b4c1ff38b6c2ff39b7c3ff39b7c3ff39b7c3ff1fa5b0ff3e3555ff601a16ffe08722ffe08722ffe18821ffe28924ffe28925ffe18b26ffe18b26ff932a26ffdf3686ffe13384ffe13485ffe23585ffe23585ffe23585ffe33687ffe33687ffe53788ffe13888ffe33788ffe43788ff005f96ff3cb2daff3eb3d8ff41b4d9ff42b5dbff43b6dcff43b7daff4cb7ddffe48a27ffe18b28ffe38c29ffe38c29ffe28e2affe38f2cffe58e2cffe58e2cff87837bff0464a4ff0162a0ff0165a5ff0265a5ff0166a5ff0267a6ff0267a6ff0267a6ff0368a8ff45b8dfff47b5dcff47b5dcff48b7ddff48b7ddff48b7ddff48b7ddff49b8daff49b8daff4ab9dbff4ab9dbff49badbff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122c2f006c1e2ba9c42129ffc7222affc5222cffc52328ffc42328ffc42425ff500a1cff22211d3a102c2f00132b2f008f1458ff9c1163ff9c1264ff9c1362ff9c1362ff9c1362ff9c1362ff9d1463ff9d1463ff9d1463ff9d1463ff9e1564ff490b2eff380f28ff107db4ff007fb6ff0180b6ff007fb3ff027094ff4fc4baff4bc4b5ff46c5b7ff4ec2bbff00648aff016198ff057eb2ff47b9daff46b7dbff47b8dcff47b8dcff47b8dcff47b8dcff46b7dbff4cbadeff158db6ff026a9fff00669cff2eb8c3ff2fb5c0ff32b5c0ff33b6c1ff36b5c1ff38b6c2ff39b7c3ff1da7b3ff0f6171ff591239ffc87b30ffdf861fffe08720ffe08722ffe18824ffe28925ffe78739ff8b0d48ffdf3182ffe13384ffe13384ffe23585ffe23585ffe13585ffe13585ffe23687ffe23687ffe23687ffe33788ffe43788ffa5377dff046598ff3db2d9ff3bb3d9ff3db4daff41b4dcff42b5d8ff6f4727ffe48925ffe18b28ffe18b28ffe18b28ffe38c29ffe38c29ffe28e2affe28e2affc69460ff015b94ff015d98ff03619dff00619cff0263a0ff0263a1ff0266a3ff0266a4ff0267a4ff42b5dcff42b5d8ff42b5d8ff43b7daff45b6daff48b7dbff48b7ddff48b7d9ff49b8daff49b8daff49b8daff49b8daff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00152a2d01382020332e202051182a2e00152a3000132b3000132b2f00132b2f00132b2f00132b2f009c1162ff9b1161ff9b1160ff9b1161ff9c1362ff9c1362ff9c1362ff9c1362ff9d1463ff9d1463ff9f145bff370e26ff40b9dbff30afddff007fb6ff007fb6ff017eb6ff017eb6ff0271aaff036598ff026496ff026496ff006093ff007cb3ff199ecbff46b7daff46b7dbff46b7dbff46b7dbff46b7dbff46b7dbff47b8dcff49b8dcff4abad8ff006b9aff016492ff2db3bfff2eb4beff30b4beff32b5c0ff32b5c0ff33b6c1ff35b5c1ff2eb3bfff017f91ff591138ff591138ff59112fffdb8324ffe18623ffe0892cff672c59ff831147ff890845ffe03281ffe03283ffe03283ffe13384ffe13384ffe13585ffe13585ffe13585ffe13585ffe13585ffe23687ffe33687ffe73589ff02604aff046075ff39b0d9ff3bb2dbff39b3dbff703e24ff863912ffe28824ffdf8826ffe08a27ffe08a27ffe18b28ffe18b28ffe18d29ffe18d29ff232c2000005180fe015997ff005b97ff015c97ff015c98ff025e9dff01609eff0361a0ff0362a1ff41b3e1ff42b5d8ff42b5d8ff43b7daff43b7daff43b7daff45b6dcff48b7ddff48b7ddff48b7dbff48b7d9ff49b8daff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c31009c1360ff9c1161ff9c1162ff9b1161ff9c1362ff9c1362ff9c1362ff9c1362ff9b1265ff320b23ff068686ff42b5d8ff42b7d8ff2ea8d3ff017eb6ff017eb6ff037fb7ff0181b6ff006398ff016295ff005f92ff01548aff027dafff42b7dbff41b6d9ff45b6dcff45b6daff46b7dbff46b7dbff46b7dbff47b8dcff47b8dcff49b8dcff4cbadeff006c89ff2cb3bfff2cb3bfff2cb3bfff2eb4c0ff32b5c0ff30b5c0ff32b5c0ff34b6c1ff057d94ff561039ff571039ff5e0f3dff610d3dff620e3dff620e3eff5f1951ff830f44ffa00b4dffdf3180ffdf3182ffe03283ffe03283ffe03283ffe13384ffe13384ffe23585ffe23585ffe13585ffe13585ffe23585ffe7388aff035f47ff016147ff00614aff036852ff026c56ff10a27cff813612ffe0862dffe18826ffdf8826ffdf8826ffdf8826ffe08a27ffe18b28ffe38a28ff78141eff76151bfe611c24ed0c2b3701015089fd005994ff005995fe015a96ff015d98ff025e9dff03689fff42b5dbff42b5dbff42b5dbff42b5dbff43b6dcff43b6dcff45b6daff45b6daff47b6daff48b7ddff326b7e7f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100112c3100122a2f006e1146f39e1264ff9c1262ff9b1161ff9b125fff9c1360ff580838ff008679ff03847bff3bb5d2ff3fb5d9ff40b6dbff40b6dbff40b8daff0389bbff007eb5ff0080b7ff00679eff045d8fff00568bff0674a7ff3ab4dfff40b6dbff40b6dbff42b7dcff43b6dcff45b6dcff43b6dcff46b7ddff46b7ddff46b7dbff49b8dcff47b6deff006186ff29b1bdff2bb2beff2bb2beff2cb3bfff2db5beff2db5beff32b5c0ff32b5c0ff12a6afff591035ffa11868ffa11b65ffa21c68ffa21c66ffa7206affa8216bff126da2ff8d0645ffde3280ffdf3182ffdf3182ffdf3182ffe03283ffe03283ffe03283ffe03283ffe13384ffe13585ffe13585ffe23585ffe43587ff026046ff1a9c7cff0c9674ff1c9f7eff20a484ff21a484ff24a585ff526c4effdd8928ffde8727ffde8725ffdf8826ffe08a27ffe48927ff78141dff78121cff78121cff78121cff77131cff75131dfe2d2628100a364d26005293fe015893ff035894ff005b98ff3fb5daff3fb4dbff41b4d9ff42b5dbff42b5dbff42b5dbff44b5d9ff45b6daff47b6daff46b6dbff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f00132b2e00122b3000102e3301078779ff008879ff008575ff028277ff018178ff39b4d5ff3fb4d9ff3fb5d9ff3fb5d9ff40b6dbff42b5daff45b5d4ff46b7d9ff0b75a2ff005288ff026399ff3fb3deff3fb5d9ff40b6dbff40b6dbff40b6dbff42b5d8ff43b7daff43b7daff45b6daff45b6dcff46b7dbff47b7dbff0b8ebcff005d8eff26b3c0ff26b2bdff28b1bdff29b1bdff2cb3bfff2cb3bfff2cb3bfff2db4c1ff38a0aeff92185fff9f1864ff9f1864ffa01968ffa11b65ffa21c66ffa31d67ffa41c69ff800e41ffdc317fffdf3182ffdf3182ffdf3182ffdf3182ffdf3182ffe03283ffe03283ffe13384ffe13384ffe13384ffe23585ff7e3c60ff119574ff17a17fff19a280ff1aa381ff1fa382ff1fa382ff20a484ff20a484ff67141eff701c0fffdd871bffd7851eff8f3f10ff72131bff73121bff76111bff76111bff77111bff78111bff78111bff78111bff78111bff6d141bfe142c2f0109446dcf005295fe005690ff3bb4d7ff41b4d9ff41b4d9ff41b4d9ff42b5dbff42b5dbff42b5dbff44b5dbff152a2d02132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00172b2f004ec8bcfc50c8bcff54cabeff54c8bdff69d3caff3dc1b3ff37c1b1ff037b85ff3db2d7ff3cb4d8ff3cb4d8ff3db5d9ff3fb5d9ff40b6dbff41b6dbff015388ff0776adff0473abff42b3dcff3fb5d9ff3fb5d9ff3fb5d9ff40b6dbff42b5d8ff42b5d8ff42b5d8ff43b7daff42b7dcff44b6dcff48b9dcff0480baff085b86ff2db2bdff26b0bfff25b1bcff25b1bcff26b2bdff2bb2beff2bb2beff2cb3bfff0c7970ff9c1662ff9c1662ff9d1763ff9f1866ff9f1866ffa01968ffa11a69ff9e1b67ff006fa4ffe32f7fffdf2f81ffde3081ffdf3182ffdf3182ffdf3182ffdf3182ffdf3182ffdf3182ffe03283ffe03283ffe13384ff025745ff109e7cff11a07dff13a180ff16a181ff17a282ff1ca182ff1da283ff1da485ff1da484ff55343dff6f151cff6c131aff6e121aff6e121aff6f1118ff72111aff72111aff74111aff77101aff77101aff75101aff790f1aff7d0e17ff7f101bff8a1823ff5d1820fc15303303054c77ff3fb5dcff3fb5d9ff3db5d9ff3fb5d7ff41b4d9ff43b3d8ff142b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000172b32004dc7bbff4dc7bbff4ec8bcff52c7bcff53c8bdff54cabcff55c9bcff43c3b5ff06897eff3bb0d3ff3bb3d7ff3bb3d7ff3cb4d8ff3cb4d8ff3db5d9ff3eb4dbff0074abff0073aaff0172aaff2f9fccff3eb3daff3db5d9ff3fb5d9ff3fb5d9ff3fb5d9ff40b6dbff40b6dbff40b6dbff42b5d8ff43b7daff44b8dbff0280b5ff914716ff924618ff20afb5ff21b1b9ff25b1bcff25b1bcff26b2bdff28b1bdff018178ff028176ff9b1463ff9b1561ff9c1662ff9e1864ff9e1864ff9f1864ffa01966ffa01964ff0070a7ff444c83ffdf307fffde3081ffde3081ffde3081ffdf3182ffdf3182ffdf3182ffdf3182ffe03283ffe03283ff503a4aff005541ff0b9e7fff0ea07fff0ea07fff11a180ff14a080ff16a181ff17a282ff1ba283ff1aa383ff018580ff00857dff681623ff6e121cff6d1118ff6d1118ff6d1118ff6d1017ff6e0f17ff700f17ff710e17ff770e18ff81131cff84141dff84141dff84141dff84141bff87141cff51231f78172a2f00132b31000d2b3402112c3200142b3001142b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b30004dc7b9ff4dc7bbff4dc7bbff4dc7bbff4dc7bbff52c7bcff53c9bbff53c9bbff54cabeff23b1a0ff02746aff38b1d2ff3bb4d9ff39b3d7ff3db2d7ff42b2d9ff0574adff0073aaff0172aaff0070a6ff006ea5ff42b2dcff3cb4d8ff3cb4d8ff3fb5d9ff3fb5d9ff3fb5d9ff3fb5d9ff40b6dbff42b5d8ff42b5d8ff41b6d8ff239fcfff8f4319ff904317ff008781ff028881ff00787dff0e848dff018580ff00857bff028379ff008278ff98135dff9a1360ff9b1561ff9c1662ff9d1763ff9f1864ff9f1864ff9f1864ff0073acff016ea7ff5b1656ffdd2f80ffde3081ffde3081ffde3081ffde3081ffdf3182ffdf3182ffdf3182ffa82e56ff004d3fff005141ff069e7fff0a9f7fff0a9f7cff0ba07eff10a07fff10a07fff14a080ff17a181ff19a282ff008880ff008b7fff39bfb5ff3cc1b6ff6e121bff6e1119ff6a1017ff6b1017ff6b0f16ff6e0f17ff781019ff85121cff81131cff84141dff84141dff84141dff84141bff85151cff87161eff30242c1c122b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f000e2c30004ac7b8ff4cc6baff4cc6baff4dc7bbff4dc7bbff4ec7bbff4fc8bcff52c7bcff53c8bdff4ecabdff03907fff007068ff006b65ff006663ff0273a4ff37b0dbff43b8dcff3eb5dbff35afd4ff33afd8ff006ea2ff43b4deff3cb4d8ff3cb4d8ff3cb4d8ff3fb5d9ff3fb5d9ff3fb5d9ff3fb5d9ff3fb5d9ff40b6dbff40b6dbff7e4a31ff954517ff426047ff018880ff008980ff0f9a8fff1cab9dff52c9bdff58c9beff3ebab1ff028178ff8e1659ff97135fff981462ff991462ff9b1463ff9c1564ff9d1564ff821b66ff0172adff0270abff006da6ffa3862effda2e76ffdb2f80ffda3080ffdb2f7effdc307fffdd3280ffaf8b29ffa88a28ffa08a2cff014c44ff019c7dff049d7cff059e7cff089f7fff0b9e7fff0ea081ff11a182ff11a181ff13a383ff24b4abff2bb7aaff50c6bbff68d4ccff64cbc0ff56c3b4ff6e111bff690f16ff6b0f15ff6b0f16ffc52a33ff851018ff81131cff82141dff84141dff84141dff84141dff85151cff85151cff85161eff122c2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00499e95ff4ac5b7ff49c5b9ff4cc6baff4cc6baff4cc6baff4dc7bbff4dc7bbff4fc7bbff4ec8bcff54cabeff029583ff016964ff00635eff46b9deff45b8ddff45b8ddff45b8ddff45b8ddff45b7ddff54bfe7ff2eb1d3ff00689eff3eb4dbff3db5d9ff3cb4d8ff3cb4d8ff3eb3d8ff3fb5d9ff3fb5d9ff3fb5d9ff40b6d9ff2c84b3ff8f4414ff8e4214ff008380ff38b9afff53c8bdff50c8bcff53c8bdff55c8bdff55c8bdff06948eff02938aff0a948bff9a125cff9a1363ff971261ff9b1360ff9d1461ff9e1364ff0581b0ff128abcff0071a4ff006da7ff036ba0ffa98a28ffa68c28ffa78d2affa88f29ffa98f28ffaa8e29ffaa8d28ffa98b27ffa88a28ffa38828ff069c7fff019d7bff029c7bff049d7cff079e7dff0b9e7fff0c9f80ff0fa081ff03a69aff55cbc0ff55c8bbff57c9bdff57c9beff57c9bcff56c9bcff59c8bcff727e81ff6e0f17ff680e15ffcb2832ffaa1d24ff83121eff82121cff84141dff84141dff84141dff82141bff85151cff86161eff152a2a00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f004db6a9fc46c5b6ff46c5b7ff48c6b9ff4bc5b9ff4cc6baff4cc6baff4dc7bbff4dc7bbff4dc7bbff50c8bcff008173ff006062ff43b6dcff43b6dcff43b6dcff45b8ddff45b8ddff45b8ddff45b8ddff46b7dbff48b8ddff2ca8ceff00659dff45b6e4ff3bb4dbff3bb4dbff3cb4daff3eb3daff3eb3daff3eb3daff525156ff934411ff924414ff8c4114ff17a397ff4ec5baff4fc7bbff4fc7bbff50c8bcff50c8bcff54c8bdff11a098ff00938aff02938aff048e85ff0d66a6ff6d2068ff75216cff0871abff42bae0ff49b9ddff4bb9ddff4ab9ddff4cbadeff4fbfe5ffa28932ffa68a2effa88d2affa88d28ffa98e29ffab8f29ffa98c23ffa98c25ffab8c28ffa98a26ffa18728ff029b78ff009b7cff039c7bff049d7cff079e7dff089f7fff079489ff54cabeff55c8bdff55c8bdff55c8bcff56c9bdff58c9bcff58c9bcff58cabdff58cabeff84bfb3ff660f13ffc92930ffc82a2eff891118ff81131aff83121cff84141dff84141dff83151cff85151cff86161eff30262d10132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00032d2f0046c5b4ff46c5b7ff46c5b7ff49c5b9ff49c5b9ff4bc5b9ff4cc6baff4dc7bbff4dc7bbff4cc6baff02625bff40b7dcff42b7dcff43b6dcff43b6dcff43b6dcff45b8ddff45b8ddff45b8ddff46b7dbff47b8dcff47baddff10a3d1ff006495ff006093ff005a8cff3fa5caff3b95b5ff804e3fff98480cff98460fff964311ff914313ff894112ff4ec6b8ff4dc5baff4fc7bbff4fc7bbff50c8bcff50c8bcff53c8bdff4fc8bcff00928aff00938aff009488ff037190ff016ba8ff0371aeff43b8daff46b7dbff48b8dcff49b8dcff49b8dcff49b8dcff4ab9ddff4cbaddffa88925ffa68b28ffa88d28ffa88f29ffceb441ffd4ba47ffd9c152ffe2ce5effe4cd60ffe2ca5effa18726ff026b65ff019b7eff039a7bff05947bff027e78ff58c7bdff52c7bcff55c8bdff55c8bdff55c8bbff55c8bbff57c7bbff57c7bbff57c9bcff57c9bcff58c9bcff660e19ffc6272cffc72a2effc6292fff88111aff83121cff84131dff84141dff83151cff85151cff89171dff29252700132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b300046c4b3ff45c4b4ff46c5b7ff47c6b9ff47c6b9ff49c5b9ff49c5b9ff4cc6baff4cc6baff007167ff314969ff3fb6dbff40b6dbff42b5dbff43b6dcff43b6dcff43b6dcff43b6dcff43b6dcff46b7dbff46b7dbff45b8dbff3fb8d9ff006499ff005d90ff38506fffb75f17ffd67a19ffdb831cffdd8520ffde831dff9d4609ff8d4114ff187f6fff4cc6b8ff4cc6b9ff4dc7bbff4dc7bbff4fc7bbff4fc7bbff50c8bcff52cabeff31b8adff01968bff009487ff018d85ff006aa5ff41b4dcff45b8dbff45b8dbff47b8dcff48b8dcff48b8dcff4bb7dcff4ab9ddff4ab9dbff61a9b4ffa48827ffa78c27ffc4aa3cffd3bb49ffe2cd5effe1cb60ffe1cb60ffe2cc62ffe2cc62ffe2cc62ffe6cf68ff007b75ff007b76ff007b76ff088c83ff54c7bbff50c8bbff54c7bcff54c7bcff55c8bbff55c8bbff57c7bbff57c7bbff57c9bcff57c9bcff58c9bcff54cabeffc2282dffc4282cffc6292dffc92930ffb7252dff9f1720ff97131cff9c161dffc62c30ffc92c2fff132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000062e300249c3b3ff45c4b5ff47c3b6ff47c3b6ff48c4b7ff47c6b9ff4cc6baff49c5b9ff74101cff44b3d8ff3fb6dbff40b6dbff42b5dbff40b6dbff42b5dbff43b6dcff43b6dcff43b6dcff43b7daff43b7daff45b8dbff45b8dbff0784baff005b90ffca6f13ffe28a23ffe68d26ffe58f27ffe69028ffe78e27ffd87f18ffa14c07ff45c3b9ff4cc6baff4cc6baff4cc6baff4cc6baff4dc7bbff4dc7bbff4fc7bbff50c8bcff50c8bcff4ac5b9ff1baa9cff109d88ff006aa5ff41b6d8ff43b7daff43b7daff43b7daff43b7daff45b8dbff47b8dcff49b8dcff49b8dcff47b9d9ff9f8826ffb29a32ffd5bd4effe1cc5cffe1cb60ffe1cb5effe1cb5effe1cb5fffe1cb60ffe1cb60ffe1cb60ffe4cd63ff007c77ff017c77ff4bccbfff4fc7bbff50c8bcff50c6bbff52c7bcff52c7baff52c7baff53c9bbff53c9bbff54c8bbff55c8bbff58c9bcff58c8beffb22632ffc42629ffc5272cffc6292dffc6292dffc72a2effc72a2effc72a2effc72b2fffa93035fb132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000132b3100112c310040c5b3ff44c4b5ff45c4b5ff45c4b5ff46c5b6ff4bcab9ff70121cff74101bff3ab6d9ff3db5d9ff3fb5d9ff40b6dbff3fb6dbff40b6dbff41b6dbff42b5dbff42b5dbff43b7daff43b7daff43b7daff45b8dbff007cb3ff945221ffe18821ffe48c25ffe48c25ffe68d26ffe78e27ffe78e27ffe68d26ffcd7223ff49c5b7ff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4cc6baff4fc7bbff4fc7bbff4fc7bbff50c8bcff50c8bcff52cbb9ff006ba3ff3db5d9ff40b5d7ff42b5d8ff43b7daff43b7daff43b7daff46b7dbff46b7dbff45b8dbff47b8dcff9e832affb69e2fffe0ca5bffe0ca5bffe0ca5bffe1cc5cffe1cc5dffe1cb5effe1cb60ffe1cb5effe1cb60ffe1cb60ffe2cc62ff007a73ff4cc6baff4cc6baff4dc7bbff4ec7bbff4fc6bbff52c7baff52c7baff53c9bbff53c9bbff53c9bbff53c8bbff55c8bbff57c7bdff391e281fc32732fec4262dffc5272effc5272cffc6292dffc72a2effc72a2effc9292fff112c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f00142b2f0001302c00501c23fb7b1018ff76101cff73111bffc01e26ff3eb5d9ff3db5d9ff3db5d9ff3db5d9ff3fb5d9ff40b6dbff40b6daff40b6d8ff40b6d8ff42b5dbff42b5dbff43b7daff43b7daff006ba7ffe28a23ffe18b24ffe18b24ffe18b24ffe38c25ffe48e26ffe48e26ffe68e27ffde8726ff2b9989ff49c5b9ff49c5b9ff4cc6b8ff4cc6b8ff4cc6baff4cc6baff4ec5baff4ec5baff4fc7bbff4fc7bbff4fc7bbff50c8b7ff006ca2ff3db5d9ff3fb5d9ff3fb5d9ff40b4d9ff42b5d9ff42b5d8ff43b7daff43b7daff45b8dbff45b8dbff998327ffe1cc5cffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe1cb60ffe1cb60ffe1cb5effe1cb5effe1cb60ff08756dff4dc4b7ff4cc6baff4cc6baff4cc6baff4dc7bbff50c8bcff52c7bcff52c7bcff52c7baff52c7bcff54c7bcff55c8bdff57c7bdff112c2f00102c2f00911a28ffc8252bfec5272cffc6292dffc6292dff66302e39132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f00142b2f00b11b31ffcd2e33ffda373dffc32126ffc01e23ffa61620ff3ab6d9ff3cb4d8ff3db5d9ff3db5d9ff3fb5d9ff3fb5d9ff3fb5d9ff3fb5d7ff40b6d8ff42b5dbff42b5dbff42b5d8ff42b5d8ff115e80ffe28a23ffe08a23ffe08a23ffe18b24ffe18b24ffe18b24ffe38c25ffe58d26ffe68d26ff0074acff49c5b9ff49c5b9ff4bc5b7ff4bc5b7ff4cc6baff4cc6baff4ec5baff4ec5baff4ac7b8ff4ec5baff4fc7bbff0071a3ff006ea4ff3eb3d8ff3eb3d8ff3eb3d8ff3fb5d9ff3db5dcff3db5d7ff42b5d8ff42b5d8ff43b7daff4ab8d7ff9d8026ffdfc95affdfc95cffdfc95cffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5bffe1cc5cffe1cc5cffe1cb60ffd7d06eff4fc6bdff4bc5b9ff4cc6baff4cc6baff4cc6baff4dc7bbff4fc7bbff51c6baff52c7baff52c7bcff54c7bcff54c7bcff53c8bdff132b2f00132b2f00132b2f000b2e2f00112c3000122b3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00cb2429ffc9262dffcb292effcb292effcb292effde3c41ffb71a25ff4e172dff3cb4d9ff3cb4d8ff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3fb7d8ff40b6d8ff45b7e5ff136277ffe18821ffe18821ffe28a23ffe28a23ffe28a23ffe38b24ffe38b24ffe38b24ffe48c25ff0276b0ff4ac4b2ff48c4b7ff49c5b9ff49c5b9ff49c5b9ff49c5b9ff4cc6b8ff4cc6b8ff4ac7b8ff4ec6b8ff4fc7b9ff0070a8ff006ea7ff40b2dfff3bb4daff3cb4daff3cb4daff3cb4d8ff3db5d9ff3fb5d9ff44b5dbff42b5d8ff877f4bff9f8021ffdfc95affdfc95affdfc95affdfc95cffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe1cb5effe1cb5effe2cd60ff006d66ff4bc5b9ff49c5b9ff4bc5b7ff4cc6baff4cc6baff4cc6baff4ec5baff4fc7bbff52c6bbff52c7baff52c7bbff4b9b96c4132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c2f00c1222bfec7252affc9262cffca282dffca282dffcb292effcb292effc02027ff8d111aff46b1dcff3eb3d8ff3cb4daff3cb4daff3cb4daff3db5dcff3db5dcff3db5dcff3db5dcff3db5d7ff3db5d9ff0f617aff116177ffe08722ffe08720ffe18821ffe18821ffe28a23ffe28a23ffe28a23ffe28a23ffe58a26ff0076adff0172adff4cc3b9ff48c4b7ff49c5b9ff49c5b9ff49c5b9ff4bc5b7ff4bc5b7ff4ac7b8ff4ac7b8ff0074a9ff0070aaff0070a8ff016a9fff3aadd9ff3bb3d9ff3bb3d9ff3cb4d8ff3cb4d8ff3eb3d8ff3fb5d9ff40b4e0ff0736491b9a7d1dffdfc95affdfc95affdfc95affdfc95cffdfc95cffdfc95cffdfc95cffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dffe0ca5dff09262d024cc6bcff49c5bbff4bc5bbff4bc5bbff4bc5b9ff4bc5b9ff4ec5baff4ec5baff51c6bbff51c6b9ff51c6b9ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00c62429fec62429ffc62429ffc7252affc9262effca282dffca282dffcc2a31ff8f111aff5b0e18ff3cb5ddff3cb4daff3cb4daff3cb4daff3cb4daff3cb4daff3db5dcff3db5dcff3db5dcff055b80ff1a7287ff116177ffe68819ffdf861fffe08720ffe08720ffe18821ffe18821ffe28a23ffe18821ff0f6fa4ff0875acff0573a9ff0372aaff3fb3b4ff4ac4b5ff4ac4b5ff48c4b5ff49c5b7ff49c5b7ff4cc4bfff0490bfff28aad3ff35b1daff0272aaff00699eff006da7ff39a8d8ff3fb3d9ff39b3d7ff39b3d9ff3bb3d9ff0177abff016ea5ff006ba1ff957927fddec859ffdec859ffdfc95affdfc95affdfc95affdfc95affdfc95affdfc95affdfc95cffdfc95cffe0ca5dffe0ca5dffd4c76fff132b2f000e2c330047c6bbff4bc5bbff4bc5bbff4bc5b9ff4bc5b9ff4cc6baff4cc6baff4dc7bbff4cc6baff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2d00c5222cffc5222cffc5232affc6242bffc6242bffc9262effc9262effca272fff780d15ff41191eff590f33ff39b1d2ff3eb3d8ff3eb3d8ff3eb3d8ff3eb3d8ff3cb4d8ff3bb4d7ff10647bff14687dff086879ff106074ff0f5d72ffe0861affdf861dffe08720ffe08722ffe08722ffe18823ff8d6e4aff12a3ceff28a7cfff31b0d3ff31b0d4ff34b0d8ff006fa7ff006799ff016592ff1b6075ff036aa6ff0a86bcff49bbdcff49baddff49baddff4fbbdfff51bedeff0068a3ff006facff0172afff0074b0ff047fb7ff0180b7ff31aed5ff51c2e4ff006fa9ff083e561cdfc95cffdec859ffdec859ffdec859ffdfc95affdfc95affdfc95affdfc95affdfc95cffdfc95cffdfc95cffe0ca5dff102c3200132b2f00132b2f00132b2f0148c9bbff49c6bcff4bc5bbff4bc5bbff4bc5bbff4bc5b9ff4cc1b5ff122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2d00c01e27ffc42227ffc5232affc5232affc5232affc6242bffc7252dffc8252aff521017ff711143ff8e0e55ff8f1059ff580e38ff3b1739ff2d6386ff21365eff420e30ff3d1132ff1c7889ff3f9fafff4dadbeff4dadbcff51b1bfff20768aff425146ffe28623ffe08725ffdd8626ff076ea1ff0495c1ff46b9dcff46b9dcff45b8dbff47b9daff4ab8daff41b6d8ff1f9ac4ff006498ff136075ff026bafff42b6d8ff45b6daff45b8dbff47b8dcff4ab9ddff4ab9ddff3fb4e1ff016dadff0075adff047fb7ff007fb6ff30abddff47b8dcff46b9deff0180b7ff067bb5ff89731cffdec85bffdec85bffdec859ffdec859ffdec859ffdfc95affdfc95affdfc95affdfc95affdfc95affdbc85eff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f01082e2f00092e2f05142b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122c2f0097202cffc02025ffc32028ffc42129ffc5232affc5232affc5232affbb2529ff7a1247ffa5176affa21766ffb92e7dff9a0f5eff890e56ff4a0e31ff470f2eff470f2eff248694ff44a5b5ff44a5b5ff44a5b5ff44a5b3ff44a5b3ff4aa6b6ff57b3c3ff075767ff0e5668ff0c515fff0788b7ff42b5d9ff43b7daff45b8dbff45b8ddff45b8ddff47b8deff47b8deff47b8e0ff006c9dff146075ff006da4ff40b6d8ff44b5d8ff42b5d8ff43b7daff45b8dbff47b8dcff49badcff016ba9ff26a7cfff39b2d9ff45b8ddff43b7daff45b8dbff46b7ddff007fb4ff0080b7ff0b3c532de0c75df9dec85dffdec859ffdec859ffdec859ffdec859ffdec859ffdfc95affdfc95affe2cc5bff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00c2232dffc22028ffc32028ffc42129ffc42129ffca202afe4d1a3e6ea01464ffa01464ffa21766ffa21766ffa21766ff930e58ff820e4cff430e30ff27465cff43a4b4ff43a4b4ff43a4b4ff43a4b4ff46a4b3ff46a4b3ff46a4b3ff47a6b4ff4caabbff075468ff0c515fff42b5dbff42b5dbff42b5dbff43b6dcff43b7daff43b7daff45b8dbff45b8dbff46b9deff059cc9ff135f74ff2b99c0ff3cb4daff3db5dcff3db5d7ff42b6d8ff43b7daff43b7daff43b7daff006ca0ff41b5ddff42b5dbff40b6daff43b7daff43b7daff45b8dbff0082b5ff007fb6ff0082b4ff132b2f0088823bffddc755ffdec857fee0c857ffe0c857ffe0c857ffe0c857ffdccf6bff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b31018e242ce6a5252dff19292c00122c2f01a01260ff9f1363ff9f1363ffa01464ffa11665ffa11665ffa21966ff7c0b47ff4c0f32ff43a2b3ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff45a3b2ff45a3b2ff46a4b3ff46a4b3ff46a4b5ff288999ff005d84ff3db5d9ff3eb5d9ff3fb5d9ff42b5dbff42b5d8ff43b7daff43b7daff43b7daff45b8ddff41badcff135d73ff076381ff3bb3d9ff3bb3d9ff3cb4daff3eb5dbff3eb5d9ff40b6daff41b6daff3db3dcff3eb5dcff3eb5dcff3db5d7ff42b5d8ff42b5d8ff43b7daff41b3deff0080b5ff007eb2ff132b2f00132b2f00132b30001d2a1803b3a659fdc0b062ff1f2d0e07112c3000132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b3000132b3000162a30009e1260ff9c1161ff9e1262ff9f1363ffa01464ffa01464ffa21464ff6b0c44ff1127320042a1b0ff41a1b2ff41a1b2ff42a2b3ff42a2b3ff43a4b3ff43a4b3ff43a4b3ff43a4b3ff46a4b5ff48a7b8ff41aacaff3db5d9ff3db5d9ff3db5d9ff3fb5d9ff40b6dbff42b5dbff42b5d8ff43b7daff43b6dcff45b8ddff135d75ff106076ff39b1daff38b2daff39b3dbff3bb3d9ff3cb4daff3db5dbff19758dff45b5e2ff3cb4d8ff3db5d9ff3db5d8ff3fb5d9ff3fb5d9ff42b5dbff42b5dbff1ca5d0ff0181b7ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b31009e1260ff9c1161ff9c1161ff9e1262ff9f1363ff9f1363ff9f1363ff4e0739ff0338404641a1b2ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff47a4b5ff2e7e9cff3bb5d8ff3cb4d8ff3db5d9ff3db5d9ff3eb5d9ff3fb5d9ff3fb6d8ff42b5d8ff42b5dbff43b7daff0f5d74ff106076ff0f6178ff39b5d9ff37b2daff38b2d8ff39b3d9ff319dbcff0f5b6aff07607dff3db4d9ff3cb4d8ff3db5d9ff3db5dcff3eb5d9ff3fb5d9ff3fb5d9ff41b6dbff3ab4d4ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100980f62ff9c1161ff9c1161ff9c1161ff9c1161ff9d1262ff9e1262ff132b2f00002d320041a1b2ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff42a2b3ff42a2b3ff42a2b3ff43a4b4ff43a4b4ff45a5b5ff964011ff3db5daff3bb4d8ff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3fb6d9ff40b6d9ff3fb6dbff3a8fb7ff105e75ff126279ff0e6277ff0d6277ff0a5e74ff086177ff0c6173ff3a96a7ff318898ff0b5b70ff3ab5dbff3ab3d7ff3cb4d9ff3db5dcff3db5dcff3db5d9ff3db5d9ff42b5d9ff142b2d01132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000262939019d0f5fff96105cff9b1161ff9b1161ff9f1061ff471b37b1132b3100152a310040a0b4ff40a0b1ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff42a2b3ff43a4b4ff42a2b3ff41a3b4ff914212ff39b3d9ff3bb4d9ff3bb4d8ff3cb4d8ff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff71214eff105e75ff126279ff227f91ff46a7b8ff43a4b4ff46a6b7ff46a6b4ff46a6b4ff4aa5b5ff3c9cadff0d596eff3db2d7ff3eb3daff3cb4daff3cb4daff3cb4daff3cb6d8ff0d2e3900132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b31001b2a3400142b3400921356ff9c105eff97115efc172a3202132b3100132b3100132b31003ca1affe40a0b3ff3ea1b1ff40a0b1ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff8b4315ff8e4214ff8a4412ff3ab4dbff3bb3d7ff3db2d9ff3eb3d8ff3cb4d8ff3cb4d8ff3fb6dbff9b7c23ff6c1f54ff0f6076ff238394ff43a4b4ff44a5b5ff44a5b5ff44a5b5ff44a5b3ff46a6b4ff46a6b5ff49aabaff4ca9baff1a5262fd0e2d33014bafd3fe45b3d5fe05394a13132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100132b3000132b3100132b2f00132b2f00132b2f00132b2f00142c30003fa0b0fe40a0b2ff3ea1b1ff40a0b1ff40a0b1ff41a1b2ff41a1b2ff41a1b2ff4697a4ff914212ff8c4011ffa9812effab8c27ff649e8cff3bb2dbff3db2d7ff3eb3d8ff4daac1ffc1a53fff997f25ff632554ff0e6379ff41a1b2ff43a4b4ff44a5b5ff46a4b5ff46a4b5ff46a4b3ff46a4b3ff47a6b4ff47a6b4ff47a6b4ff3196a4ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100132b3100132b3100132b2f00132b2f00132b2f00132b2f00132b2f00603b20803ba0b2ff3da0afff3f9fafff40a0b1ff40a0b1ff3fa0b0ff565c54ff934311ff914212ff8c4011ffa48b2affae932bffb7982dffb39926ffb5982cffb5982effb7982effdbc455ff977d1bff522d59ff45a5b6ff43a4b4ff43a4b4ff43a4b4ff45a3b4ff46a4b5ff46a4b3ff46a4b3ff46a4b3ff46a4b3ff46a4b3ff47a7b8ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00994a0eff9e4b13ffa04a12ff79522dff635f43ff8f4821ff994415ff944410ff934311ff904011ff8f3f11ffae922dffb3972bffb5982cffb5982cffb5982cffb5982cffbb9e32ffe1cc5cffd1bb4cff453a61ff41a1b2ff42a2b3ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff45a5b5ff46a4b5ff46a4b5ff44a5b5ff02303a00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f003b2c1b1c9b4a0dffba6422ffbe6622ffac5215ffb45a16ffdc822effe69029ffdd821eff95410eff8d4011ff8e3e12ffb59a2dffb3972bffb3972bffb3972bffb5982cffc9ac40ffe1cc5cffe1cc5cffdfc95aff423c61ff41a1b2ff41a1b2ff42a2b3ff42a2b3ff42a2b3ff42a2b3ff43a4b4ff43a4b4ff44a4b4ff45a3b4ff45a3b4ff44a5b5ff3d8795ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100b35d15ffe18b26ffe18b24ffe18b24ffe38c25ffe48e26ffe38c25ffe38c25ffe28c25ffd67d17ff8c3e12ff7e5001ffe1c95affddc657ffd9c253ffdec859ffe0ca5bffe0ca5bffe0ca5bffe0ca5bffdec859ff4d3259ff40a2b0ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff42a2b3ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff357c8aff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0026252200e38b24ffe38b24ffe38b24ffe18b24ffe18b24ffe18b24ffe38c25ffe38c25ffe38c25ffe58f27ffcb7511ff875e0dffe0c859ffe1c95affdfc95affdfc95affdfc95affe0ca5bffe0ca5bffe0ca5bffd0ba4bff9a0d4dff3fa2b0ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff42a2b3ff43a4b4ff43a4b4ff43a4b4ff43a4b4ff0c2b3201132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00e28822ffe28a23ffe28a23ffe28a23ffe38b24ffe18b24ffe18b24ffe18b24ffe18b24ffe38c25ffe38c25ffe58f29ff853e12ffe0c859ffe0c859ffdec859ffdfc95affdfc95affdfc95affdfc95affdfc95affcbb546ff960e4dff3da1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff43a4b4ff44a4b4ff122c2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122a2d00e08a23ffe08a23ffe08a23ffe08a23ffe08a23ffe18b24ffe18b24ffe18b24ffe18b24ffe18b24ffe18b24ffe38c25ff903f08ffdec85afee0c857ffdec857ffdec859ffdec859ffdec859ffdfc95affdfc95affc98a5bff930e4aff601f4cff43a1b0ff40a0b1ff40a0b1ff40a0b1ff40a0b1ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff1e515992132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f001c2a2500df8921ffe08a23ffe28a23ffe28a23ffe28a23ffe28a23ffe08a23ffe18b24ffe18b24ffe18b24ffe18b24ffe18b24ffad5a1bff11283300dec951fee0c859ffdec859ffdec859ffdec859ffdec859ffdcc957ff940c4dff920b4aff900e4aff428a9eff40a0afff40a0b1ff40a0b1ff40a0b1ff41a1b2ff41a1b2ff41a1b2ff41a1b2ff4b9facfe132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f001e292101e08823ffdf8921ffe28a23ffe28a23ffe28a23ffe28a23ffe08a23ffe08a23ffe08a23ffe08a23ffe18b24ffe18b24ff965428ff132b3100132b2e00dfc86bfee0c655ffdec657ffddc757ff505424419f1054ffc21b69ffe8398affea398dffc83176ff6d1b45ff439eaeff419fb2fe3fa0b1ff40a0b1ff40a0b1ff40a0b1ff0d3b401b132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132a2b00e18824ffdf8921ffe18821ffe18821ffe18821ffe28a23ffe28a23ffe28a23ffe08a23ffe08a23ffe08a23ffe08a23ff1c2a2900132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112c2d00a70b56fde03285ffe33386ffe23585ffe23585ffe43587ff7d0f42ff132b2f00082f3800072d3200132b2f00142b3000132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00de8820ffde8820ffe08720ffe18821ffe18821ffe18821ffe18821ffe28a23ffe08a23ffe08a23ffe08a23ffe28925ff132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f000d2d2f00e03081ffe23084ffe33084ffe13384ffe13384ffe23585ffd8317eff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0028261c00de881fffdf8720ffdf8820ffe08820ffe18821ffe18821ffe18922ffdf8a22ffe08a23ffdf8c24ff834d20f0132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122d3200dd2b7fffdf2e82ffe02f83ffe13184ffe03284ffe13385ffe63484ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100cd8c34ffde881effde8820ffe08720ffe18821ffe18821ffe18821ffdf8921ffe08a23ffe08920fd132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122d3200dd2a7effde2e82ffdf2f83ffe23084ffe03084ffe03285ffd2337dff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100122b3100372b1105e28621ffe08721ffe08720ffe08720ffe08720ffdf8921ff885512be132b3200132b3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100d32b75fede2d81ffdd2d81ffe02e82ffe12f83ffde3184ff142c2a00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100132b2a024238144c5e451c68192b2901122c2f00132b3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f00cd3278fcde2b7fffdf2c81ffe02c81ff0e2c3000152b2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f000e2d3100132b3100132b3100142b3100132b2f00132b2f00132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f01132b2f01132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f01132b2f01132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00074e4b51009c7aff069e7dff0e9f7eff118e71ff004634ffa7346effde3081ffdf3182ffde3383ffdf3383ff823d36ffdbc158ffceb64fff405e56ff0d3c4fff611e26ffc1252cffa32124ff570f14ff956a36ffdec85cffdfc95cffdfc95fffb15831ffc92f33ffcb3437ffcc3b3effcd7923ffdf8b2affe18d2cffe28d2effe38e31ff0f4853ff74333fffca3638ffcb393affcc3a3cffbd3336ffa72a2eff731e40ffa02367ffa4276cff942161ff6e2427ff8d301eff7e2719ff78350dffa25c1effa45c20ff49412c40132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b300009645787039c79fe028467ff035342ff013d2fff113c32ff8c2b5effdd2f7effb9276bff872440ffdfc95cffe0ca5fffe1cb61ffe1cb61ff2e4a41ff0a545eff25504fff480c10ff4c343bff55665bffc3ae48ffdfc859ffaf973dff833e1cffc4282effc72c32ff921d22ff944b15ffdf8a28ffe18a2affe08a2bffa87533ff0b4357ff9b1f24ffc93134ffc93335ffca3537ffcb3739ffcb383aff751037ff9d1d65ff9f2066ff971d62ff791325ffcb393bffaa2a2dff7b241aff906922ffcab450ffe2cd6ffe46554140132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b2f002252524054c7bdff35b8acff197d73ed043a33c8242f28ffca2c31ffbf292dff7c2425ff4a1b2cff600d32ff9b6046ffdec85bffdfc95affe0ca5fffe0ca5fff6f7c36ff009086ff009287ff0f746dff49a2b4ff51a6b5ff607555ff864137ff9b2464ff6c252fff671217ff7e7272ff514547ff7b3712ff783810ffa55a1cff8a4216ff793735ff84393fff951e23ffc62f31ffc62f32ffc83234ffc93335ffca3336ff400d2aff691343ff7b134dff701433ff680d17ffc42c2fffc73032ffac6329ffe1ca63ffe1ca67ffe1cc69ffe3cd6aff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b31004bc6b8fe4fc6bbff53c7bbff56c8bdff038478ff9a1d24ffc9292effca2c31ffcc2e34ff9a1e23ff462024ff591535ffdec758ffdec859ffdec859ffd9c358ff40784cff008f85ff009085ff3eb9afff146e78ff328899ff31434fff9f1b65ffa31f68ff75134bff586c76ff57c8bcff67cbc1ff755c3bff6b998aff6d553eff851b1cffcd373affce3d3cff77161bffaa2329ffc52d30ffc62e31ffc93033ff631728ff3b0d28ff3e4f67ff57a7b7ff58a9b8ff5aabb8ff666b75ffa3662dff9c8226ffe0c95fffe0ca60ffe0ca62ffe2cc65ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b310048c5b6fe49c6b9ff4ec6baff51c7bcff088175ffbc232affc6262cffc8292dffc92b2fff971c22ffa14d1dff864b19ffa45f2dffaa8c3affb6834effa25550ff835133ff46a790ff46c2b7ff147973ff187e87ff57bcddff3c6988ff9b1862ff9f1b64ffa01d66ff48566aff47c3b6ff3eafa6ff4ec5b9ff5cc8beff5d897cffb7252bffc82e31ffc93335ff912222ff520d12ffb2324fff8f1c29ff4b0f23ff3c0f2aff2d6176ff52a7b6ff54a8b7ff57a8b7ff57a9b8ff57a9b8ff7a9169ff8d731dffc7b04bffdec85dffdfc95eff8a854996132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b30001b5a565d43c4b4ff48c4b7ff38aba1ff005d5aff3a4e4dffc5252affc6262cffc6272effa64e22ffe18c27ffe08c29ffb7601aff94342cffa11b67ffa41e69ffa62069ff7f413cff1c5b4cff005957ff20879bff46b6daff379ec7ff5f1e4eff9b165fff751349ff322735ff036e87ff147c8fff117e7dff49c2b5ff495151ff85171cffc4292effc82b31ff97223dffe33d89ffe3408affe3418bffb0376eff1b485eff3c93a4ff4ea6b5ff51a6b5ff52a7b6ff53a7b6ff54a8b7ff56a8b4ff7f651bff796018ff94853ec1555c3869132b2e00132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00432d433f5a1b417f593152bf1c5f6083005854ff005957ff36795fff9c8650ffa84a33ff4e0c11ff964c17ffe18a25ffe28c26ffe28d2affbc5044ff9d1662ffa01966ffa21c68ff851653ff795a3bffdecc68ff9cb47cff5778afffba4c94ff553f6aff1c826cff39aa8cff3d6581ff4cb9dcff2299c8ff02759aff2c4558ffe03c86ffe5418bffb8376aff610e24ffdf3986ffe13a87ffe23c88ffe23d89ffe43f8aff445174ff49a3b5ff4aa4b3ff4ba5b2ff4ea6b4ff4fa6b5ff51a6b5ff52a7b6ff9d5619ffac561affaa581eff45452f3f132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f007f2e5b7ce13384ffa30c54ffa10c53ffa51258ff721644bf5c5c4cc9e0ca5dffe1cb5effe3cc62ffb6a04affb7752cffe08724ffe18925ffe28a27ffac5729ff99135fff9c1662ff9e1763ff531138ffdfc85bffe0ca5effe2cb62ffdb6f71ffe03483ff943572ff099777ff139f7fff20808bff41b5daff1a94c4ff0175a8ffd02976ffe23788ffe23a89ffe23c89ffab2361ffe03685ffe03786ffe13888ffe13a87ffe23b88ff6e4172ff358c9eff49a2b3ff49a2b5ff4aa4b4ff4ba5b2ff4ba5b5ff72a097ffc46d21ffb8601effd17b28ff9f7236a9132b2d00132b2e00132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00312c3b30e03083ffe03183ffd32a78ffbc1b67ffbf1e6affdd3080ffcfa24dffe0c95bffe0ca5cffe1ca5fffe2cb5fffa58c26ffbb7e23ffdc8527ffa75b17ff682e0eff742922ff751840ff500e34ff380d27ffc5aa4fffdec859ffdfc95cff996234ff9c1b5aff650d37ff24384bff7c295dff82377bff2f99c6ff2f9bc4ff2a587cffdf3181ffe03384ffdf3584ffe13687ff991653ffdf3382ffdf3485ffe03685ffe13785ffe03886ff6a396aff185e75ff45a2b2ff46a2b1ff47a3b2ff47a3b2ff4ba3b3ffa17b47ffe28b2bffe38c2bffe28d2dff9d7033a8132c2d00132c2d00132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00782d587fe02f83ffe13083ffdf3182ffdf3182ffe03383ffe13484ffca9952ffe0c859ffdfc95affdfc95bffdec95bffa03555ffa11b67ffa31d69ff832138ff622716ff6b2e14ff64172fff650d3effa31e69ff803345ff9b7f3eff90782aff5e6630ff0a889aff4796a5ff581f43ff981560ff9f1b67ff0d4175ff004a80ff403164ff8e154fffdd2f81ffdd3182ffc42c72ff780d41ffc52870ffdf3283ffde3382ffe03583ffd1317bff0b475cff0c4258ff1c586cff378898ff47a2b0ff4e888fff754c4aff8c3132ffc57221ffe08929ffe08a2affa26223bf8b642e84c3833dd07961397f112b2e00132b2f00132b2f00132b2f00132b2f00132b2f006c2b507fdf2f83ffe02f83ffdf3082ffdf3082ffdf3182ffe03383ff8f3a43ffdec857ffdfc859ffdfc85affb36353ff9e1564ff9f1765ffa01966ffa01c67ff530d32ff5c0e39ff620d3bff821351ffa11b67ffa21c68ff6d1547ff6b614dff628668ff22afbcff2299a9ff383958ff761246ff501037ff1e2e58ff094d7dffb07b4affe6943affa55036ff671138ffc99d5bffc5ae44ff7e3b2cffa11f5bffc1266dff8e2d65ff263654ff104056ff0f3e53ff143b50ff3e303cff5d2433ff701346ffa2236bffa5266cffa32769ff883121ff9b4a13ffd68127ffe39032ffe49133ffe39235ff765f367f132b2f00132b2f00132b2f00132b2f00132b2f00112b3000d82f7effdd2e82ffdf2f83ffe02f83ffdf3082ffc72670ff630c33ff80383cffa26b47ff8e6632ff87373bff9c1262ff9c1562ff9d1763ffa01866ff4c0c2fff761049ff7f114eff9e1764ffa01966ffa11a67ff901a61ff48b7dcff53bcdcff2a768eff923271ffa10e54ffa10f55ffc42973ff463d6fffa97a3fffe28d2bffe28e2cffe39031ffc58f3dffdfc95cffdec85cffc2a93fff5b3b61ff4379a0ff32819fff15445bff413646ff4a3a4aff4e1a45ff530e37ff73164bffa11f68ffa2216affa32269ffa4236aff9f2b54ff8e400fffe28c2bffe28d2effe38e30ffe28f30ff7c5c2b7f132b2f00132b2f00132b2f00132b2f00132b2f00132b3000472c443fcd2b77ffdf2f83ffdf2f83ffcd2876ff7f1646ff610d33ff620d33ff9d4729ffa54d2aff943729ff9a1261ff9c1362ff9b1561ff7b144fff380d25ff9c1662ff9c1662ff9c1662ff9f1864ff9f1865ff8b1a5fff39b1d9ff41b4d8ff395d92ffc5216effa00e54ff9f0d54ffe03787ffa53d82ffe18926ffe18b28ffe38c29ffe38e2dffbb8227ffddc659ffdec85affaab170ff41b1d6ff4db8dbff52badbff5193b9ff1788bbff0e8cbdff0081b7ff343662ff75144bff9f1d66ffa01e67ffa11f68ffa11f68ffa2206aff843a0cffe18b2affe18b2affe28b2bffe38c2cff7b5c2e7f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122a30003f22395c4d1e3d7f381c337f3a1c337f411a3285c26b28fee38b26ffe38c27ffab5312ff9d411bff912837ff743d50ff496b72ff3f4e57ff811453ff9c1661ff9c1662ff9d1763ff9e1764ff6d1242ff735243ff4d5864ff713f81ffdf3283ffbb1d68ffce2975ffdf3686ffbe246effb8661cffe08826ffe08a27ffe28b28ff9b6e22ff897a37ff70997dff0565a0ff42b4dbff45b6dbff49b8dbff44b1d7ff46b5d9ff49b6daff4cb9dcff2b9bc7ff711348ff9c1963ff9e1b64ff9f1c65ffa01d66ff912248ff78340eff8d4713ffdf8727ffe18a29ffad732abf122a2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b3000e28a23ffe28b25ffe18a25ffaa5211ffaa5312ff85653cff51c7bcff57c9bcff59c9bdff3a898aff7b2a64ff9c1662ff9c1662ff7c1450ff9f4a13ffaa5312ffc77020ffac5122ffdf3081ffdf3082ffe03283ffde3383ffa6215fff7e3c1cffa55a1effa55b15ff586c60ff4aa5beff4cb9dbff51b9dcff2e9bc6ff258cbdff40b3d9ff42b4daff1274a8ff319ec9ff43b4daff44b5daff3f779bff3f0d2dff891455ff9d1962ff9d1962ff9d1b61ff933d24ff8a4114ff8a4115fe4a3523a2192b2a06132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000e18923ffe28924ffe28925ffc56c1bffaa5210ff768967ff4dc5baff4fc7bbff54c7baff2cb0a4ff006f65ff086c66ff105253ff1b4246ffd3791fffc56c1bffe38c28ffaf621cff923431ffdc2f80ffde3081ffbd2a6dff4a7296ff4bb9dcff50bbddff3eaad2ff1482b6ff45b6daff48b7dbff4ab8dbff4db9dbff396599ff542c67ff9e367bffd53f8cff815095ff219ab5ff219eadff3b6470ff325f68ff1f5059ff912e35ff963036ffb35d1affaa5316ffa95416ffaa5416ffaa5516ff413d2e3f122b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b300048292e3f6f2a2f7f712c327f68252b7fc5681cfee08723ffe18824ffe28925ffd77f22ff587b62ff46c4b8ff49c5b9ff4ec6baff29988eff2a998fff54c8bdff5ac9c0ff3eb6aaffa88435ffe18622ffdf8924ff7e684cff56818dff3c9ec0ff1e8cbcff056ea6ff43b7daff46b7daff49b7dbff4db9dbff2b9bc9ff42b6daff44b6daff46b7daff48b7dcff636595ffc42570ffe13787ffe23888ffe23989ffa64f85ff179a92ff59c8bcff5ac9bdff3eb9aeff539a85ffa65615ffe38c2cffb8601cffa95416ffa95417ffb9631dffb4742abf122b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b30009c2630bfc9272cffca282dffca282dffd23338ffb12229ffaa5017ffdf8822ffc27120ff8b431cff64201eff44757cff44c3b9ff2e8c88ff3caca3ff52c8baff53c9bbff54c8bbff57c7bcff41b4a9ff1b6b5aff12858aff47b7dbff48b7dbff4ab8daff4bb8daff208dbcff3fb4daff40b5dbff43b6d9ff46b7daff2482b6ff40b4daff42b4daff43b6daff44b6dbff696191ffdf3283ffdf3484ffe03585ffe23787ffe13888ff3db3abff53c6b9ff55c6baff58c9bcff5ac8bfffb6641cffe28b2affe28b29ffcd7521ffd37c25ffe28e2cffe48e2eff122b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0044282b3fc7242affc8252bffc9272cffca282dffc9282dffc6262dff86121aff77102bffa01565ff9f1763ffa11867ff941b5fff590e35ff424d5cff4cc6baff4fc7bbff52c7bcff52c8bbff55c8bbff56c7bbff078a7fff2192a9ff43b5daff44b6dbff45b7dcff46b7dcff017eb6ff2d9cc4ff3db2d9ff3eb4d9ff589aa6ffb75d31ff506a7fff3fb4d8ff3fb5d9ff457ca4ff790f40ffdc307dffdf3182ffe03383ffe03484ffd13983ff36ada5ff4ec5b9ff51c6b9ff53c6baff56c6baffb3631effe08b29ffe18b29ffe18b29ffe18b2bffe18c2cffe08d32fe132c2d00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f006b262a7fc52328ffc62429ffc7252affc8262bffc9272cffca272dff93102aff9d1463ff9e1564ff9e1564ff9f1663ffa01764ff93165eff4f6976ff4cc6baff4cc6baff4cc6baff4ec6baff51c6baff52c7bbff128f82ff2391afff40b5daff41b5dbff42b5dbff45b6daff0280b7ff027286ff137c96ff67685dffd27c20ffe38e2cffe4902effa93748ff95154fff6d2c65ff4d3b6eff712d6affde2f80ffde3182ffe03182ff4c7ba7ff1e8b90ff4bc4b9ff4dc6b9ff4ec6b9ff626244ff823b0effe08a29ffe18a28ffe18b28ffe18b2affe28b2aff5e796bbf18687f7f256c827f275f6f58112b2f00132b2f00132b2f00132b2f00132b2f00132b2f006b262b7fc52328ffc52329ffc62429ffc62429ffc9262cffca262bff830f3cff9d1463ff9d1463ff9d1463ff9e1564ff9f1663ffa01866ff4a4157ff49c5b9ff4ac5b9ff4cc6baff4cc6baff4cc6baff4fc7bbff016b63ff18849eff3db3d8ff3eb4d9ff3fb5daff41b6d9ff2293b6ff017084ff006a78ffa95b29ffe38b25ffe28c27ffe38e2bffe38f2bff9a1354ffb41e66ffc82874ffa1387fff545797ff4a4688ff1383bbff4cb9ddff51bbdeff50a2b5ff798965ff997f4eff8f6f46ff605552ff695946ffcb761effe08925ffe08b28ff587a7bff028ac0ff3db0d6ff4fb9dcff4fb9dcff55badbfb224e593f132b2f00132b2f00132b2f00132b2f00132a2f00c3222afec5232affc52329ffc62429ffc62429ffa81f24ff74103aff9c1362ff9c1362ff9d1463ff9d1463ff9e1563ff9f1563ff480d2cff449794ff49c5b9ff4bc5b9ff4bc5b9ff4cc6baff39aca9ff036e91ff0e82b6ff1f8fbeff3db3d6ff3eb4d7ff2fa2c2ff1994a5ff1f94a4ff097785ff9f5030ffe18923ffe28a24ffe28b27ffe28d27ffb81c64ffe13585ffe23687ffe33788ffe33888ffa44892ff228ec1ff45b6daff47b7dbff4bb9dcffd57d22ffe38d2bffe3902cffe29133ff0168a5ff0069a7ff0069a9ff006aa8ff016ca9ff2394c3ff49b7daff4ab8daff4bb8daff4eb8dbff3e96b1be132b2f00132b2f00132b2f00132b2f00122b2f003f292d3fae202ae9c5222affc42328ffa81d24ff37181c8e62183ebf9c1262ff9c1362ff9c1362ff9d1463ff9d1463ff881256ff30294bff155c8aff249dacff4bc4b7ff49c4b9ff2593a5ff2090bdff47b7dbff48b8daff4db9dcff1886b5ff01689eff22a3b3ff35b5c0ff38b6c2ff2baebaff413045ffd98324ffe08721ffe18924ffb95233ffe03384ffe13484ffe13585ffe23586ffe23687ffe33788ff396ba1ff3db2d8ff40b4dbff4f9aadffe28a26ffe28b28ffe28d2affe38e2bff547584ff01619eff0163a1ff0265a4ff0266a5ff44b5dbff44b6daff47b6dbff48b7dbff49b8daff49b8daff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f001c282a0d1b282b14132a2f00132b2f00132b2f00781854bf9b1160ff9b1261ff9c1362ff9c1363ff432c4aff3db5daff0b89bdff017eb6ff016ea4ff016294ff006b9fff38b0d6ff45b6dbff46b7dbff46b7dbff48b8dbff137da4ff2cb3beff2fb3bfff31b5c0ff32b4c0ff2d4765ff591037ff9f4830ff813644ff8b0c47ffdf3181ffe03283ffe03383ffe13484ffe13585ffe13586ff744a68ff0f7477ff1e8e97ff615331ffe08727ffdf8926ffe08a27ffe18b28ff442936be1b3e62bb005892fe005c99fe025f9dff31a1ccff42b5daff42b6daff45b6dbff47b6dbff42a4c3df132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b2f004c1e417c561e497f4f4c6cff166567ff1e9ba6ff3fb4d9ff3fb6daff229cc7ff1484b3ff01598eff2fa4cfff40b6dbff41b5daff43b6dbff45b6dcff46b7dbff1480abff28b1bdff29b1bdff2cb4beff2fb4c0ff4d5b7cffa01865ffa11b66ffa41e68ff702764ffdd3180ffdf3182ffdf3182ffe03283ffe13384ffe13484ff5d5968ff159d7bff1da281ff20a383ff6d6b46ffc26c1dffc9751eff90301eff77111bff77111bff64161ec33b2b45c8084870b30f6ea5fe3fb4d9ff41b4daff42b5daff44b5daff204d5940132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f002352523f4ec7bbfe53c8bcff53c9bdff20a29aff3bb2d6ff3bb3d7ff3db4d9ff208cbaff0273abff3baed6ff3eb5d9ff40b5d9ff41b5d9ff41b6daff44b7dbff276882ff419592ff24b1bbff26b1bcff1fa5acff51486aff9b1561ff9e1865ff9f1866ff4f4485ffb93680ffde3081ffde3081ffdf3182ffdf3182ffbc3474ff077960ff10a07eff14a080ff19a181ff1ba383ff315455ff6c131cff6d1118ff6f1018ff720f18ff750f18ff7e101aff84141eff5f1c22bf2b53689d27708580296f847f1f4d593f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00112b2f004cc6b9ff4cc6baff4ec7bbff51c8bbff45c3b6ff0f8988ff1d8d9eff2da1cbff2194c3ff1a90bfff2190c0ff3cb4d8ff3eb4d8ff3fb5d9ff40b5d9ff40b5d9ff715c4cff346c57ff048883ff1f9f99ff26a298ff4a4a69ff981360ff9b1562ff9d1664ff484588ff175893ffcd4469ffdc2f80ffdc2f7fffd2476bff7c633aff027560ff079e7cff0b9f7eff10a080ff15a181ff139f94ff4bc6bcff656c6aff6a1017ff6b0f15ff91171fff81131cff84141dff84141bff701921c6122b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f002f6a677e47c5b7ff4ac5b9ff4cc6baff4dc7bbff4fc8bcff00776eff33a2bdff44b7dcff45b8ddff48b9dfff289ec6ff2fa0cdff3bb4d9ff3db3d9ff3eb4d9ff54737cff8e4214ff27a99fff50c7bbff52c8bcff2fb1a7ff03938aff51467aff851965ff615493ff2a9fc9ff2594c1ff678f77ffa68b2affa88e28ffaa8d27ffa98b26ff7c8d3dff019b7aff049c7bff099e7eff1ba998ff55c8bdff56c8bcff57c9bcff5eb6adff703a3cffc1252dff83121bff83131cff83141cff85151dff1a292d04132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f000f2b2f0045c4b4ff46c5b8ff49c5b9ff4bc5b9ff39b0a5ff2c859eff41b5dbff43b6dcff44b7dcff44b6dbff46b8dbff1388b6ff0e5987ff81846bffb46721ffaa5411ff6f5129ff4cc5b8ff4ec7bbff4fc7bbff51c8bcff0c9c93ff008989ff117eb5ff44b7daff47b8dcff49b7dcff4ab9dcff949149ffae942cffd5bd4bffdfc95cffe2cb60ff9aa355ff018a78ff03867aff53c7bbff54c7bcff55c8bbff57c7bbff57c9bcff5a9a93ffc4282cffb72329ff971821ff8e141cffa72125ff18292c00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f001c51514044c3b4ff46c3b5ff48c6b8ff683d42ff3eb4d9ff40b5daff40b5dbff42b5dbff42b6daff43b7daff249cc8ff8f6939ffe48b24ffe58e26ffe28922ff7f9166ff4cc6baff4cc6baff4cc6baff4fc7bbff4ec6baff33b6a6ff1f90beff42b6d8ff43b7daff45b7daff47b7dbff729e81ffc7af42ffe0ca5cffe1cb5dffe1cb5fffe1cb5fffa9b767ff26a298ff4dc6baff4fc6bbff52c7baff53c9bbff53c8bbff57c7bcff9c242dc6c4272cffc5282cffc72a2eff922b30be132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00142b2f0073252cbea31e25ffa61820ff3cb5d8ff3db5d9ff3fb5d9ff3fb5d8ff41b5d9ff42b5d9ff258db6ffe18a23ffe08a23ffe28c24ffe48d25ff7b8860ff49c5b9ff4bc5b7ff4cc6baff4ec5baff4dc6baff3bb1b4ff1e90bdff3eb4d8ff3fb4d9ff40b5d8ff43b6d9ff719c7fffdfca5bffdfc95cffe0ca5dffe0ca5dffe0cb5dffe1cb5eff5eb393ff4bc5b9ff4cc6baff4fc7bbff51c6baff53c7bcff54c7bcff112b2f005d252c7f6b292e7f542b2e4e132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b2f0099252bbec9272cffca282dffc7272eff57637fff3cb3d8ff3cb4d9ff3db5daff3db5daff3eb5d8ff1e7693ffe08721ffe18922ffe28a23ffe28a23ff728069ff37afb3ff48c4b8ff49c5b9ff4bc5b7ff4bc6b8ff1386acff107eb3ff3ab2d9ff3bb3d8ff3db4d8ff41b4daff716c34c6dfc95affdfc95bffdfc95cffdfc95cffe0ca5dffe0ca5dff728a54bf4ac5baff4bc5b9ff4bc5b9ff4ec5baff51c6baff40948eb0132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2e00c5232afec52329ffc8262cffca272eff681119ff428aaeff3db3d9ff3db3d9ff3cb4d9ff197795ff10667affac7c31ffdf861fffe08721ffcc822cff148bbbff1a91beff2fa5b9ff2495a5ff2c95a2ff28a5c5ff3bb3d9ff2894c1ff0e7ab3ff1e93c3ff1e99c8ff2195c2ff276471c5dec859ffdec859ffdfc95affdfc95affdfc95cffdfc95cff42523f3f1e52533f49c6bbff4bc5baff4bc5baff3d9e96bf132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b2e00b62027ffc42129ffc5232affc3242aff781242ff9d1864ff6d1049ff372d50ff3a2c49ff3898a8ff48a9b8ff3f9cacff607864ff756c44ff148fbcff45b8dbff45b8dbff46b7dbff1988b6ff0a658fff42b5d8ff44b7daff48b8dcff2291c4ff1893c3ff2ea6d2ff45b7dcff017eb5ff948f49c9dec85affdec859ffdec859ffdfc95affaba150bf132b2f00132b2f00132b2f000d2c2f01132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f003e292e3f89232bb991242abf721e3d9b9f1363ffa11665ff9d1462ff630d3dff3c8c9dff43a4b4ff44a3b3ff45a3b2ff47a6b5ff0e6278ff3fb5daff41b5daff42b6d9ff44b7daff34b1d7ff166e8aff3bb3daff3eb4d8ff41b6d9ff30a2ccff3fb5dcff40b5d8ff43b6d9ff108cbfff0955707f62673b7fa39847bfa79b47c1787b487f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00591e487f9c1161ff9e1262ffa01363ff331c3b9041a1b1ff41a1b2ff42a3b3ff43a4b3ff43a4b4ff3f9cb4ff3cb4d8ff3db5d9ff3fb5daff41b5d8ff43b6dbff105e75ff2e9ec1ff38b2d9ff38aed2ff1d7995ff3cb4d8ff3db5d9ff3fb5d9ff37b1d7ff18627a7f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0038233e3f9a105fff9b1161ff881357eb0e2b300040a0b2ff41a1b2ff41a1b2ff42a2b3ff42a3b3ff6b7263ff3bb3d9ff3bb4d8ff3cb4d8ff3eb5d9ff4a86aeff116077ff207a8dff268295ff3490a0ff30889aff2f9cbdff3cb3daff3cb4daff3193b0bf132b2e00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00152a300033253b3f561d477e142a3000132b3000338390be3fa0b1ff40a0b1ff41a1b2ff429eaeff8d4112ff868150ff45adc5ff3db2d7ff62aeacff804f3bff20798dff43a4b4ff45a4b5ff45a4b3ff47a7b5ff378d9dfe1f4c593f1c505f44132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000132b3000132b2f00132b2f004736225f6d7561ff567b74ff697365ff834921ff8e4011ffac912bffb5982affb5982cffcbb144ff7f6748ff42a2b3ff43a4b4ff44a3b4ff44a4b3ff45a4b4ff45a4b5ff0e2c3100132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f009a5718c6ce7823ffc9711dffe28a28ffca721aff89430dffc9af42ffc7ae40ffcfb648ffe0cb5bff927f5bff40a1b1ff41a1b2ff42a2b3ff43a4b4ff43a3b4ff43a4b4ff26565f7f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f004b40283fe28a23ffe28a23ffe18b24ffe28b24ffe38c25ffaf6716ffe0c859ffdec859ffdfc95affdfc95affb2624aff3fa1b1ff41a1b2ff41a1b2ff41a1b2ff42a2b3ff43a4b4ff102b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f007b59257fe08a23ffe18a23ffe18a23ffe18b24ffe18b24ffc06b1affaba04dbedec858ffdec859ffdec859ffa02b4eff5d5679ff40a0b0ff40a0b1ff41a1b2ff41a1b2ff2f6f79a3132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f007c58247fe08821ffe18922ffe18a23ffe08a23ffe08a23ff9c6426bf132b2f007979477f7878437f69263e8fdb2e7fffdd3583ff843f6eff2666727f2666707f1c4c5346132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f004a40263fde871fffe08820ffe18821ffe08922ffdf8a23ff624b287b132b2f00132b2f00132b2f00762d587fe02f83ffe03284ffe03382ff132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b30007c5a2580e08620ffe08720ffdf8820ff966421ae132b2f00132b2f00132b2f00132b2f00752b557fdd2d81ffe02f83ffa9306cbf132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b3000132b2f003134242d142b2e00132b3000132b2f00132b2f00132b2f00132b2f00132b2f00722d567e792b597f122b2e00132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b3000132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0010333614048e71e0088065ff2e3c40ffc92e77ffbf2c6cffc6a452ffb4aa59ff293e44ff74282bff634438ffd7c156ffb07d3affc72d32ffaf4725ffe08b2affd3862fff4a3743ffc93436ffc73638ff962437ffa02167ff841d43ff9f2e27ff894719ffa68742ce1f353310132b2f00132b2f00132b2f00132b2f00122b2f0044a9a0ce3db0a5fa31423df1c62a2fff8b2229ff662834ffdec759ffddc75bff2b8463ff13938aff388f9eff6d4550ff871e51ff646e6eff6a6855ff7d603dff953228ff972a2effbe2b2effc73033ff6a192cff5e476bff625d6effa44b40ffc29d44ffe0ca64ff7a7b4b7f132b2f00132b2f00132b2f00132b2f00132b2f003baa9ed647beb3ff3f5351ffc6262bffb32e28ffb96c21ffa65f2bffa7445bff7b5659ff1d7b73ff359db6ff5b4f7fff93185cff306b77ff2c9b9aff529890ffb12429ffae2831ffb22e5cff9b2851ff2f5268ff51a6b5ff54a7b6ff5ea2a2ff937926ffa99c4cca30413525132b2f00132b2f00132b2f00132b2f006d2e546e7d194ecf4c3754d05c7e57f1c29950ff945b27ffe08924ffcb6f2fff9c1562ff851655ffc5ae56ffab997fffa03c7cff1c987bff3a94b0ff0f85b3ffaf3877ffd83b81ffb22764ffe03987ffe23c88ff4b708eff49a3b3ff4ca5b3ff57a4adffb15e1cff97622ab9132b2d00132b2e00132b2f00132b2f00332b3c2be02f83ffd32978ffd72d7cffd6b254ffdfc95bffc1954dffb64e46ff7c341cff6d2129ff641140ffaf894aff99823aff545173ff642552ff574b87ff265b89ffca2a75ffd8317fffad1f61ffde3383ffdc3582ff264764ff378999ff489ca8ff7b665dffda8428ffc07a2bd95d4f31552c38301f132b2f00132b2f00282b371fdc2e81ffdf2f82ffd92e7dff935142ffbb984aff9c3054ff9d1763ff77134bff6c0e42ff981760ff8f195dff59969bff407c98ff7c1951ff5e295cff90734cffd38033ffb5814affb89642ff803e72ff3e496cff2a3b4eff3c2442ff781a4affa2226aff9b2952ffb8651dffe28e30ffad7631bf132b2f00132b2f00132b2f004e2a464f92275fb66f1d48bf712730e0c26a27ff9d372dff8e2352ff4e364fff95155eff9c1662ff8d165aff4e8395ff933b81ffb11861ffc8337fffd68024ffe28b29ffaf8c36ff7f9d79ff45b4d9ff4badd1ff2c9fcaff2a82aeff881756ff9f1c65ff9c1f60ff9a4f15ffe08929ff87612c8f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f007a5a297fe18924ffb05813ff669e86ff54c8bbff38747dff543a5fff824631ffc66e1dffb2453bffde3081ffa23c79ff6f827cff537c7fff48b2d3ff45b1d6ff3c73a5ff7167a2ff458fbbff378ba4ff463350ff98244bffa3422dff994a15fe533c2479122b2f00132b2f00132b2f00132b2f00122b2f006f282e7f9d292ebfab3829ded2791fffc16f20ff51746dff42b6acff38a99eff55c8bcff5fad90ff7b7f4aff5895a3ff3ba6ccff2999c5ff44b6daff38a3cdff42b5daff45b6daff9b4786ffe03585ffd23d87ff40b6acff51c4b8ff82875dffd78026ffbc661cffcc7c28ef122b2e00132b2f00132b2f00132b2f0035282c2fc62329ffc8262bffc8272cff8b1134ff9e1564ff9c1763ff5f3659ff4cc6baff4fc6baff53c6baff178f96ff41b5daff44b6dbff0c83adff3d92a9ffb08048ff867973ff615c8cff842965ffde3181ffb7468bff3bb0a9ff4fc6b9ff7b714affe08a28ffe18b29ffc0873cee184a573f17383f16132b2f00132b2f0029292e1fc42229fec52329ffc02328ff8c114eff9c1362ff9d1463ff741e52ff47b9afff4bc5b9ff47bfb5ff0a7791ff35aad1ff3bb0d2ff168aa0ff546255ffe18a24ffe28d29ffb92068ffcb3380ff89478eff31a0ccff4cb3d2ffb2843fffac793dff4d676cff707967ff1f81a9ff47b5d9ff4fb8dafe214e5a3f132b2f00122b2f0044272d4a6f25298741222763621b489f9b1261ff9c1362ff4e4671ff117faaff2596aaff1f8fb5ff46b6daff3cabd1ff188eacff33b4c0ff327688ffac582affa94738ffdf3283ffe03484ffe13586ff3e7695ff438b94ffe08926ffe18b28ff2c4f6edd005f9bfe1e86baff43b5daff47b6daff2c6c7e77132b2f00132b2f00132b2f00132b2f00132b2f00122b2f004455658d429092ff2da8bbff36aed4ff0d76a9ff39afd6ff41b5d9ff43b6daff298b9fff27b1bcff3b7e94ff9e1764ff80286dffd43280ffde3081ffd7327fff228370ff1aa181ff5e734eff8c321cff731019ff641725e23e3955db348aa7c63389a4af16333910132b2f00132b2f00132b2f00132b2f00132b2f00193a3d1f4ac5b8ff4dc6baff28a29aff30a1c0ff31a5cfff2ca0caff3db3d8ff44a4c1ff566c55ff31ada4ff288c8cff822168ff5b5392ff5c6f8dffc15d54ffa8703cff218e64ff099e7dff26ac9aff57b0a7ff684345ff951820ff83131cff48202672132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b2f003aa79ccf48c4b7ff428997ff41b5daff43b5daff2fa4ccff807453ffc9741eff619b80ff4dc6baff3ebcb0ff1893a8ff43b6daff47b7dbff9e9c4dffddc657ffcfc15cff349a7cff50c6baff54c7baff56bcb1ffb6252bf0ac1f25ff58282b6f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0034292e2faa242aee805569ff3db4d8ff3eb5d9ff309bbeffe08922ffe28b23ff5b9e8dff49c4b8ff4cc5b8ff1e91b3ff3cb3d8ff40b4d8ffa8a65af0dfc95bffdfc95cffa4b468ef4ac5b9ff4ec5b9ff4dbab0eb25292e1f392a2e33132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0068262b7fc52329ff9b1b2cff62598cff3a6f92ff2a879bff8a8558ff8d8053ff2ea3cbff2c9ebbff2895b3ff3badd4ff198cbfff2ca2ceff668e72e3dec859ffdec85aff7779467f235b5b4f2d78747f1d47482f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f001d2a2e0f50272c5e811752c69f1362ff445571e342a2b2ff44a4b3ff3199b7ff3fb5d9ff3fb4d8ff2387a6ff3bb2d6ff31a0c5ff3fb5d8ff197c9fbf4a55384f515b3b50132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f004620415f631a4b9a255e686f40a0b1ff41a0b1ff6e7967ff3eb1d3ff5a8d9bff247d91ff3996a7ff3796aafe2c809ba01a454f2f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0041382549967645ffa66e32ffa37022ffc0a537ffaf9850ff41a2b2ff43a3b3ff44a3b4ff16353b1f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00a16b24afe18a23ffe18b24ffbe8e35eedec858ffc38752ff478ea2ff40a0b1ff3d95a4e8122b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00a16922afe08821ffdf8922ff48412a4e45513a3fa62c65c3c8367dff1c48503f15333811132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f002d362c20815a248a6650276b132b2f00132b2f00752c567f842d5d8f132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00122b2f0025867aaf4b4a44fb9e294fffcdb757ff365f56ff77765fff984d4aff9d6638ff924632ffc53133ff7f294dff8a3c46ffb48d40f22f413723132b2f00292b381b526e7cdc886348fbb85f24ffac4945ff78655dff76708bff466b7fff4f7b95ffba2b4fffc3326eff458297ff55a4aeffa1752ee01a302f09132b2f00852c5d92d82c7cffc0984effab4a52ff721d34ff8e3251ff617977ff652c61ff945d5fffbc595bff9e3b78ff304b63ff774f6effbb6330f58562308c132b2f00212a34134926415da35c28d7905445ff5b6179ff7f2b53ff965c5bffbe2d76ff9e8251ff6ea295ff4f8ebcff348eb5ff812255ff9c3e2dfe72542981132b2f001b2a2e0ba6262ccfb33a2af6934354ff499697ff55c0b0ff4a9697ff2d9dc6ff5a9aa5ff5b8facffb7357cff817a99ff67a085ffd47e24ff6d5d3a86142e3305182a2e078e242ab37b1c39c09b1261ff466686ff35aab3ff30a0c3ff269fb7ff846e4affc84952ffc53886ff3f94b1ffc78432ff3a6376f6319cc5ff388aa3ac132b2f00132b2f00142e3207479b9ae22ea6baff289ac5ff41b0d2ff359594ff60507bff824782ffc74b64ff199474ff59806aff742028f74f3d4fc41b444e2f132b2f00132b2f00122b2f00586d6aba4f91acff38aacfffc27f2dff54b09fff30a9b0ff41b4d9ffc0b456fba1b567fb4fc5b9ff5f706ebe54262b68132b2f00132b2f00132b2f00132b2f0066262b7a87275bf03a7b93f8629085ff36aacdff309ec0ff2da0caff698968bc6e7142731d4a4b331532350b132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0033243a3e4e6b60ad7d7d5bff819e7dff3895a7ff2f7b8caf1431370b132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00c07922d7b17829cea27252c05a6b87cf1d474e3e132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f0035392b2a27342d1a2b2b381f2f2b3a23132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f002c5257698a4d3ffd897153ff72676cff8d5453ff934361ff8d7858f31b31310a712a5380a76443f5763654ff864b6aff977668ff546892ff934448fc47422d4359272c65972a46ec46999fff339cb5ff80777bff8f5e92ff8e8154fc3a6c758d132b2f0031585968379ebeff639c8cff547ca1ff909165fd5e756eec34343d56132b2f0027292e1e504c62b465958aff3093afeb3f55444e1634370f132b2f00132b2f00132b2f0046422a40695237712e424f4b132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00132b2f00734b4bb67d565fff825d6bff604b3f8e4d343e6e449ba7ff7c7884fe56655cb2182a2e07585d53982b555c60132d3103132b2f00132b2f00132b2f00132b2f00605b63c86d6162cf2537372719363a18424a4d75
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-Transparent.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-Transparent.asset.meta
new file mode 100755
index 0000000..9ea66ee
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones-Transparent.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4844808027b36464d9a0540bf1de6663
+timeCreated: 1604318423
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: -1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones.asset
new file mode 100755
index 0000000..6909956
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Local-MP4-Cones
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/Cones-2D-1080p60-H264.mp4
+ _hints:
+ transparency: 0
+ alphaPacking: 1
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: 2fb2d8ff30b3d9ff32b2d9ff35b3daff35b3daff33b3daff35b4dbff38b4d9ff39b5daff37b5daff3ab6dcff3ab6dcff3ab6dcff3db7dbff3db7dbff3db7dbff259aaeff035c93ff00609cff32b2d7ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b4d8ff33b4d8ff33b4d8ff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff38b5daff39b5daff39b5daff3ab6dcff3cb5dcff3cb5dcff3cb6d9ff3cb6d9ff3cb6d9ff3db7dbff3db7dbff61c7e7ff26acd8ff02513fff00513fff025a4cff38c1b4ff3ac2b5ff3dc3b6ff40c3b7ff40c3b7ff43c4b6ff44c4b6ff46c5b7ff47c6b9ff47c6b9ff47c6b9ff4ac6baff4cc6baff4ac8b8ff006349ff005b41ff035a41ff025a42ff00547cff35b3daff36b2daff35b3daff36b3d8ff39b3d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3bb4daff3fb5d9ff3fb5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff40b6dbff40b6dbff40b6d8ff42b7daff42b7daff45b8dbff45b8dbff46b7dbff48b7dbff48b7dbff1ba1d0ff0180b9ff486777ff974106ff47c4b8ff4bc5b9ff4bc5b9ff4fc4b9ff50c5baff53c6b9ff53c6b9ff53c6b9ff57c6baff59c7bbff5ac8bcff5ac8bcff5bc8bcff5bc8bcff5ec8beff5ec8beff5dc9beff5dc9beff60c9bfff60c9bfff60c9bfff60c9bfff7d5d5eff930018ff9a0118ffa4041affa5051aff2eb0d7ff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff3ab6dcff3ab6dcff3ab6dcff3db7dbff0f7779ff025a95ff32b4dfff30b3d9ff31b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff39b5daff39b5daff39b5daff3ab6dcff3ab6dcff3cb5dcff3cb5dcff3cb6d9ff3cb6d9ff3db7dbff3fb6daff35b6dcff00523fff00523fff015340ff005341ff42beb1ff3bc3b6ff3dc3b7ff3ec4b9ff3fc4b7ff41c3b5ff42c3b5ff44c5b7ff44c5b7ff46c6b9ff45c5b9ff1d9f8aff028e6bff00916dff01644bff005c45ff025b41ff005850ff33b3dbff33b2d9ff35b3daff35b3d9ff36b3d8ff38b4d9ff38b4d9ff3bb4daff39b3d9ff3bb4daff3bb4daff3cb4d8ff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff40b6dbff40b6dbff40b6dbff40b6daff42b7daff43b7daff43b7daff45b8dbff46b7dbff47b8dcff41b8dcff0080b7ff8d3f0fff964106ff46c3b5ff4ac4b7ff4bc5b9ff4bc5b9ff4fc6bbff51c6b9ff54c7baff54c7baff56c6baff57c7bbff59c8bcff5ac8bcff5ac8bcff5bc8bcff5dc9beff5dc9beff5dc9beff5dc9beff60c9bfff60c9bfff60c9bfff60c9bfff7f0315ff930016ff9a0118ffa20319ffa8061aff2eb0d7ff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff3ab6dcff3ab6dcff3ab6dcff3db7ddff00594aff015890ff30b3daff30b3d9ff31b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff39b5daff39b5daff39b5daff39b5daff39b5daff3cb5dcff3cb5dcff3cb6d9ff3cb6d9ff3db7dbff3db7dbff3cb7e0ff00523fff00523fff015340ff015340ff005340ff025a45ff036a56ff3dbbacff41c5b7ff3ec3b6ff42c3b4ff44c6b6ff2baa96ff008267ff028668ff018b69ff028e6bff018f6cff00936fff006f52ff025b41ff005a3eff35b2dbff33b2d9ff35b3daff36b3d9ff36b3d8ff38b4d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3cb4d8ff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff40b6dbff40b6dbff40b6dbff40b6daff42b7daff43b7daff43b7daff45b8dbff46b7dbff46b7dbff48b7ddff1097ccff8f3c02ff964006ff64af9cff4ac4b7ff49c5b9ff4bc5b9ff51c6bbff51c6b9ff54c7baff54c7baff56c6baff57c7bbff59c8bcff5ac8bcff5bc8bcff5dc7bcff5ec8beff5ec8beff5ec8beff5ec8beff60c9bfff60c9bfff60c9bfff60c9beff8c0014ff930016ff9a0118ffa20319ffa80519ff2cb1d9ff2eb2d8ff2fb2d8ff2fb2d8ff30b3d9ff32b2d9ff33b3daff33b4d8ff33b4d8ff36b4d9ff36b4d9ff37b5daff37b5daff39b5dbff3ab6dcff39b8dbff025a40ff00567eff2fb2d8ff2fb2d8ff31b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff33b4d8ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff38b5daff39b5daff39b5daff3ab6dcff3ab6dcff3cb6d9ff3cb6d9ff3db7dbff3db7dbff44bdddff01503eff00523fff015340ff015340ff015340ff005942ff025f47ff01654cff016b50ff007056ff007557ff007b5cff017f60ff018463ff018867ff018b69ff008e6bff00906eff00936fff029571ff067e60ff005a41ff228aa3ff36b2daff35b3daff36b2daff36b2daff36b2d8ff38b4d9ff38b4d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff40b6dbff40b6daff42b6d9ff43b7daff43b7daff43b7daff46b7dbff46b7dbff47b7daff759499ff8f3d04ff954205ff9a4004ff49c3b5ff4bc5b9ff4dc4b9ff4fc7bbff51c6bbff54c7bcff56c6baff58c6baff59c7bbff5ac8bcff5bc8bcff5dc9beff5ec8beff5ec8beff5ec8beff60c9bfff60c9bfff60c9bfff60c9bfff5fc9bfff7c555dff8e0116ff930014ff9e0117ffa60419ffab051aff2cb1d9ff2eb1d9ff2fb1d8ff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff33b3d9ff33b3d9ff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff3ab6dcff11777aff025a42ff005863ff2fb2d9ff2fb2d8ff31b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff33b4d8ff35b3d8ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff38b5daff39b5daff39b5daff39b5daff3ab6dcff3ab6dcff3cb6d9ff3cb6d9ff3cb6d9ff3db7dbff40adc5ff01503eff00523fff015340ff015340ff015340ff005942ff025f47ff01654cff016b50ff007056ff017659ff007a5cff017f60ff008262ff018867ff018b69ff008e6bff00906eff019470ff019470ff009573ff048867ff015940ff35b3d9ff34b3dcff36b2daff36b2daff36b2d8ff38b4d9ff38b4d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff40b6dbff40b6daff42b6d9ff43b7daff43b7daff43b7daff46b7dbff46b7dbff46b7d9ff8e3c02ff923e05ff974003ff984206ff69633bff4bc5b9ff4dc4b9ff51c6bbff53c5bbff54c7baff56c6baff58c7bbff5ac8bcff5bc8bcff5dc7bcff5ec8beff5ec8beff60c9bfff60c9bfff60c9bfff60c9bfff60c9bfff60c9bfff76c6b8ff8f0012ff9a0116ffa5021affad061dffb6081fffba0d20ff29b0d8ff2bb1d9ff2cb1d9ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff33b3daff33b3daff34b5d9ff34b5d9ff36b4d9ff36b4d9ff37b5dbff31b5c8ff015c40ff035a41ff015945ff2fb1daff2fb2d8ff31b2d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff33b4d8ff33b4d8ff34b3d8ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff39b5daff3ab6dcff3ab6dcff3ab6dcff3ab6dcff3cb6d9ff3cb6d9ff004f49ff00503eff00523fff015340ff015340ff005340ff005942ff006047ff00664cff026b50ff007054ff017659ff007a5cff017f60ff008262ff018867ff018b69ff028e6bff018f6eff009371ff019472ff009573ff019774ff059672ff005948ff33b4d6ff33b2d9ff35b3daff36b3d8ff36b3d8ff38b4d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3cb4daff3cb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff40b6dbff40b6dbff43b7daff43b7daff43b7daff43b7daff45b6d9ff843b08ff8f3c03ff954005ffa54b08ffaf5208ffa0470aff6c633dff4dc4b9ff4fc5baff53c5bbff54c7baff57c6baff5ac8bcff5bc8bcff5ec8beff5ec8beff5ec8beff60c9bfff61c9bfff61c9bfff61c9bfff61c9bfff60c9bfff7ec5b9ff900015ffa90f1fffde484fffc63237ffc73235ffc73134ffc33335ff027a85ff29b0d8ff2eb0d9ff2eb1d8ff2fb2d8ff2fb2d8ff30b3d9ff32b2d9ff33b3daff33b4d8ff33b4d8ff33b3daff34b5d8ff0f9591ff02906eff02936dff005a40ff005940ff33b2dbff2fb2d8ff31b2d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b4d8ff33b4d8ff33b4d8ff34b3d8ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff39b5daff3ab6dcff3ab6dcff3ab6dcff3ab6dcff3cb6d9ff3bb6dcff024f3eff00523fff00523fff015340ff015340ff005340ff015a44ff005f47ff00654cff006c53ff007257ff02785dff017f60ff008463ff028766ff018b69ff028c6aff028e6cff00906cff00936fff019470ff009573ff029774ff029876ff039977ff005448ff31b2d8ff34b3daff36b3d9ff36b3d8ff38b4d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3cb4daff3cb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff40b6dbff40b6dbff40b6dbff43b7daff43b7daff43b7daff41b7daff833b0cff8b3b04ff8f3c03ff954005ffa44b05ffb15306ffbd5e0affc6650cffb25d0eff59c6bdff56c6bdff58c6bbff59c5bcff5bc8bcff5dc7bcff60c8beff60c8beff61c9bfff61c9bfff63c8bfff64c8bfff64c9c0ff64c8bfff6c212dffce2f3bffc72d30ffc82d30ffc92e31ffc92e31ffca2f33ffca2f33ffca2f33ff0d776cff004d3cff06606cff30b1d8ff2eb0daff2eb1dcff2eb1daff2fb1d9ff30b3dbff33b1dcff36b6d6ff0f918eff038a67ff028e6aff02926fff009470ff049773ff005c43ff005b59ff2fb0d9ff2fb1d8ff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff35b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff39b5daff39b5daff39b5daff39b5daff3ab6dcff3ab6dcff3bb6dbff3399abff024f3eff02513fff00523fff015340ff015340ff005340ff015b44ff01634bff036e55ff00765bff008062ff008766ff018b6aff009170ff009372ff009573ff019573ff029876ff009976ff019874ff009672ff009673ff009774ff019875ff019875ff009975ff006b4fff34b1d7ff34b2d7ff36b3d9ff37b3d8ff38b4d9ff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff40b6dbff40b6dbff40b6dbff43b7daff43b7d8ff3eb8d4ff633d16ff8a3a03ff8c3b02ff8f3c03ff954005ffa44b05ffb25504ffbf5e09ffc8670dffcf6c0cffd57511ffd47818ff81bb9cff58c7bcff5cc8bbff60c8bdff5fc9bfff62c9beff65c8bfff63c8beff64cac0ff74c6beff4d111effc62530ffc82a2effc62a2effc92b2fffca2c30ffcb2d31ffcb2d31ffc92e31ffc92e31ffca2f33ff0c776bff004d3bff01513fff015341ff015441ff005747ff006155ff006658ff016e59ff01755bff027d60ff008262ff028767ff018d6aff02926fff019570ff019774ff019774ff005942ff33b2d3ff2fb2d7ff2fb2d8ff2fb2d8ff30b1d8ff31b2d9ff31b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d9ff33b4d9ff33b4d8ff34b3d8ff34b4d9ff35b4d9ff36b4d9ff37b5daff37b5daff38b5daff38b5daff39b5daff39b5daff3ab6dcff3ab6dcff3bb5d9ff034a39ff024f3eff02513fff00523fff015340ff005340ff015a46ff00644bff027257ff007d60ff019372ff069e7cff049f7cff019c79ff049f7dff089f7fff0c9e7fff24b193ff1ca88aff04a381ff02a17cff00a07bff019c79ff019878ff019875ff019875ff019875ff009774ff039671ff00727aff39b2d9ff36b3d6ff37b4d9ff37b4d9ff37b4d9ff39b3d9ff39b3d9ff3ab4daff3ab4daff3cb4d9ff3db5d9ff3db5d9ff3db5d9ff40b6daff40b6dbff40b6dbff40b8d7ff038283ff00857bff673c15ff8b3903ff8c3b02ff8f3c03ff954005ffa44b05ffb25504ffbf5e09ffc7660dffd06d0dffd67411ffd97811ffdb7e15ffdd8115ffe18315ffe38218ffd28229ff005e47ff025d46ff431616ff60000aff64000affc7272fffc6292dffc72a2effc72a2effc72a2effc92b30ffc92c30ffc92c30ffc92e31ffc92e31ffca2f32ff0c786cff004d3bff01513fff015441ff015441ff025743ff02604aff00674fff007056ff00775cff007f60ff018665ff038a69ff008e6bff01916eff009470ff019773ff009875ff029875ff00543aff2fb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff39b5d9ff39b5d9ff39b6deff015871ff034b3aff024f3eff02513fff00523fff00523fff015743ff01674fff099373ff019e7bff029c7bff019e7cff029e7cff009e7cff009e7cff009e7cff009e7cff009e7cff01a07eff019f7dff00a07dff099d7bff50c5aaff03a782ff02a280ff009d79ff009a77ff019976ff009774ff029571ff00716eff017571ff007879ff2ba4beff39b3d9ff39b3d7ff39b3d9ff3ab3dbff39b3d9ff39b3d9ff3cb4daff3eb6daff3fb5d9ff40b6daff3fb6daff31abbfff038583ff01867dff01867bff00867cff683b14ff8b3904ff8c3b02ff8f3c03ff954005ffa44b05ffb35605ffbf5e09ffc8670dffd06d0dffd67412ffd87914ffdd7e15ffde8116ffe08319ffe08319ffdd7f14ff025d45ff035c43ff421415ff5f000dffc7262effc7272effc6282fffc6292fffc72a30ffc72a30ffc92b31ffc72b2fffc82d30ffc82d30ffc92e31ffc92e31ff0c786cff004f3cff00523fff015441ff015441ff005945ff02634dff026e55ff00755bff038061ff028867ff028d6dff049070ff029370ff009573ff009774ff009774ff009774ff019875ff019974ff015841ff31b3d5ff2fb1daff30b1d8ff30b3d9ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff34b5dbff34b5daff34b5d9ff35b4d9ff36b4d9ff37b5daff37b5daff37b5daff38b5d8ff3cb4d9ff015670ff00576fff024b3aff014e3dff024f3eff00503eff01523fff099474ff019d79ff019d79ff019d7aff019d7bff029e7cff029e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff01a07dff01a07dff00a17dff01a17eff59c8b0ff03a985ff01a37fff009a77ff009773ff029571ff00726fff017672ff017874ff007977ff007976ff017b75ff02827eff028485ff018285ff028386ff048285ff038485ff048682ff03857eff02877fff02877fff02877fff02877dff01867cff00867cff6a3d16ff8b3904ff8c3b02ff8f3c02ff954003ffa74c06ffb75808ffc16009ffc9690dffd16f0effd77511ffd97a11ffdb7d11ffdf8217ffe08319ffe08319ffde7f14ff025d46ff035c44ff401417ffa2121cffc6252dffc7272effc8282fffc6282fffc72a30ffc72a30ffc92b31ffc72b31ffc82d32ffc82d32ffc92e31ffc92e31ff0c786cff004f3cff00523fff015441ff035441ff015f49ff036b53ff008063ff069977ff05a07eff029f7dff05a280ff06a381ff10a986ff059e7bff029e7aff009e7aff009c78ff009875ff009974ff019571ff850144ff597aa7ff2eb2d6ff30b1d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff34b5dbff34b5d9ff35b4d9ff36b4d8ff36b4d9ff36b4d9ff38b3daff66a3c9ff005570ff00556fff00586eff014b3aff014e3cff014e3cff005440ff029b78ff029b78ff019d79ff019d79ff019d7aff019d7bff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff019f7dff00a07dff00a07dff00a07dff06a07fff06a986ff03a27eff009774ff029571ff00726fff017672ff017873ff007977ff007977ff027b76ff02827bff028a84ff038e87ff02857fff00847dff01867eff01867eff01867eff02877fff02877fff02877fff02877dff01867cff00867cff6a3d17ff8b3904ff8d3c03ff8f3c03ff9b4303ffac5105ffbe5c08ffc8680bffd1700dffd97810ffde7c11ffdc8012ffdf8214ffdf8216ffe08318ffe08317ffde7f15ff025d44ff035c45ff401417ffc7252dffc5272effc5272effc6282fffc6282fffc72a30ffc92b31ffc92b31ffc72b31ffc82c32ffc82c32ffc92e31ffc92e31ff0c786cff004d3bff00513fff00523fff015b46ff0a9676ff009c78ff019d79ff019d79ff029e7aff029e7aff029e7cff009e7cff019f7dff029f7dff039c7bff22b595ff03a17cff019e7aff009774ff019571ff880043ff890046ff96004fff5ba4d1ff2eb3daff2db2d8ff2fb3d9ff31b2d9ff31b2d9ff34b3daff33b2d9ff34b3daff34b3daff32b3daff32b4daff34b4d8ff36b4d9ff36b6d8ff37b6d8ff55b1d7ff870142ff83003dff00556fff00556dff015772ff034b3aff024c3bff00543eff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d7bff019d7bff019d7bff009e7cff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff00a07dff01a17fff01a17fff01a17fff0ea987ff009f7cff039672ff00726fff017672ff017875ff007977ff007977ff027b78ff00817aff008a83ff029189ff00958dff018882ff00847fff01867eff018580ff02877fff02877fff02877fff02877dff01867cff00857bff683c16ff8a3a04ff8b3a01ff933c04ffaa4c06ffd37a1fffe58d2cffe58d2affe58e2cffe58e2fffe09039fffeb358ffe28a1dffe5861affe2871affdf8518ffdf7f13ff045d46ff015c45ff3f2622ffc4262dffc5272effc6282fffc6282fffc6282fffc72a30ffc72b31ffc72b31ffc82c32ffc82c32ffc82c32ffc92e34ffc92e34ff0c786cff004d3bff01503eff037459ff019b78ff009c78ff009c78ff019d79ff019d79ff019d79ff019d79ff029e7cff009e7cff019f7dff019f7dff019f7dff029f7dff0a9f7dff05a27eff009c78ff019571ff860143ff93004affc91671ffdf2682ffe02680ffa93a88ff5da8d4ff31b2d9ff30b2dcff31b1d8ff31b4daff32b4daff33b4daff31b4daff30b4daff33b4d7ff57acd4ffab5098ffe52881ff8c0245ff8c003fff84003cff00556fff00556dff015772ff034b3aff014b3aff039b76ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d7bff019d7bff019d7bff009e7cff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff00a07dff01a17fff01a17fff01a17fff01a17fff05a681ff049874ff00726eff017672ff017875ff007977ff007977ff027b76ff00817aff008a83ff029189ff00978eff039d93ff02948cff028580ff018580ff01867eff02877fff02877fff02877dff01867cff00857bff653c16ff8a3a04ff8c3905ffdd8527ffe28a23ffe08a25ffe18b26ffe18b26ffe38c27ffe58e2bffe48f2dffe4902dffe2902effe59231ffe68f21ffe2891bffe08013ff035c45ff015c45ff304c3cffc4262dffc5272effc6282fffc6282fffc6282fffc62a30ffc72b31ffc82c32ffc82c32ffc82c32ffc82c32ffc92e34ffc92e34ff0c766aff004d3cff068164ff009a77ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff029e7aff029e7aff009f7aff009e7cff009e7cff009e7cff01a07dff00a07dff03a07dff09a37fff039874ffa10450ffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffde2782ffd42a83ffcd2c83ffd22d85ffe02a84ffe32984ffe22984ffe12a84ffd43281ffea2f84ff99004cff8a0041ff86003eff00556fff00556fff025874ff024636ff049a78ff029b78ff029b78ff029b78ff029b78ff019b78ff009c78ff009c78ff019d79ff019d79ff019d7bff019d7bff029e7cff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff01a17fff01a17fff01a17fff06a281ff049f7cff00716dff027672ff017873ff027974ff007a74ff027b76ff00817aff008a83ff009088ff00978eff019d93ff02a59aff07a098ff038582ff018580ff028781ff02877fff02877dff01867cff01867cff693d17ff8a3704ffdf8721ffe18822ffe18821ffe28925ffe38a26ffe18b26ffe38c27ffe38c27ffe48d2affe38f2cffe4902effe4902dffe6912effe79024ffe08116ff005b44ff005d43ff005d43ffc6262dffc3282effc6282fffc4292fffc62a30ffc72b31ffc72b31ffc82c32ffc82c32ffc92e34ffc92e34ffc92e34ffc92e34ff0b776bff00503dff009a74ff009a77ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d79ff029e7aff009f7aff009e7cff009e7cff009e7cff01a07dff00a07dff00a07cff039f7bff009c77ffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe32681ffe32681ffe12781ffe22882ffe22882ffe32984ffe22984ffe12a84ffe02a84ffde287fffdc2e7dff900042ff86003eff00556fff00556fff025874ff004635ff009c78ff029b78ff029b78ff029b78ff029b78ff019b78ff009c78ff009c78ff019d79ff019d79ff019d7bff019d7bff029e7cff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff01a17fff01a17fff01a17fff02a17fff09a481ff00716dff027672ff017873ff027974ff007a74ff027b76ff00817aff008a83ff009088ff00978eff019d93ff01a499ff00aa9eff06a99fff008881ff018781ff02867dff01867cff01867cff01867cff643b15ffdf8622ffe0851fffe18821ffe18821ffe18824ffe28925ffe18b26ffe38c27ffe38c29ffe48d2affe38f2cffe38f2dffe4902dffe4902dffe4922effe58619ff058464ff005e44ff005c3fffbf272effc5272cffc6282fffc4292fffc62a30ffc72b31ffc72b31ffc82c32ffc82c32ffc92e34ffc92e34ffc92e34ffc92e34ff0a776cff069775ff009a77ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d79ff009f7aff009f7aff009f7aff009e7cff019f7dff019f7dff019f7dff10a484ffdf247fffdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe12781ffe22882ffe22882ffe22882ffe32984ffe32984ffe12a84ffdf2a83ff9b004bff890040ff00556dff00556dff005775ff0a8064ff009a77ff029b78ff029b78ff029b78ff029b78ff019b78ff009c78ff009c78ff019d79ff019d79ff019d79ff019d7bff019d7bff019d7bff019d7bff029e7cff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff00a07dff01a17fff02a17dff0dab89ff00716eff027672ff017873ff007a74ff007a74ff027b76ff00817cff008a83ff009088ff01988eff019d93ff01a499ff00aa9eff00aea1ff02b1a4ff008a83ff01867eff01867cff01867cff03857cff61401effdf841effe0851fffe18620ffe08722ffe18824ffe28925ffe18b28ffe18b28ffe38c29ffe48d2affe28d2dffe38f2fffe4902fffe4902effe5912effea9026ff028768ff018d6aff006147ff135843ffc4282effc6282fffc4292fffc62a30ffc72b31ffc72b31ffc82c32ffc62d32ffc72e34ffc72e34ffc72e34ffc82e34ff088073ff009774ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d79ff009f7aff009f7aff029e7cff009e7cff019f7dff019f7dff019f7dff0ba383ffdf247fffdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe12781ffe22882ffe22882ffe12882ffe12a84ffe12a84ffe12a84ffe22b85ffb4075aff920043ff00556dff00556dff035773ff0a9877ff009a77ff029b78ff029b78ff029b78ff029b78ff019b78ff009c78ff009c78ff019d79ff019d79ff019d79ff019d7bff019d7bff019d7bff019d7bff029e7cff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff00a07dff01a17fff00a27dff02a17cff00716cff027672ff017873ff007a74ff007a74ff027b76ff02827eff008a83ff009088ff01988eff019d93ff01a499ff00aa9eff00aea1ff02b2a5ff0fb6aaff009188ff00867eff00867cff01867cff58633cffdf841effe0851fffe18620ffe08722ffe18824ffe28925ffe18b28ffe18b28ffe38c29ffe48d2affe28d2dffe38f2effe38f2effe4902effe4902dffe3922fff018865ff008d6aff00936fff067d5cff6e4039ffc4292fffc4292fffc62a30ffc72b31ffc72b31ffc82c32ffc62d32ffc72e34ffc72e34ffc82e34ffc92e34ff018b7fff009774ff009975ff009975ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff019d79ff019d79ff019d79ff019d79ff029e7cff009e7cff009e7cff019f7dff019f7dff199a82ffde237fffdf247fffdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe22882ffe22882ffe02982ffe02982ffe12a84ffe12a84ffe12a84ffd01972ff95004aff00556dff00556dff025972ff099777ff009a77ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d7bff019d7bff019d7bff029e7cff029e7cff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff00a07dff01a17eff03a280ff00716eff027672ff017873ff007a74ff007a74ff007a74ff03827bff038b83ff019088ff00988eff019d95ff02a59aff03a99eff02aea1ff04b2a3ff11b5a8ff1cb8abff059e91ff02877fff03857cff1f7c69ffdf831bffdf841effe0851fffe28622ffe08722ffe18826ffe18b28ffe18b28ffe38c2bffe38c2bffe28d2fffe38e2fffe4902fffe4902fffe4902fff9b9653ff028767ff008d6aff02926fff019571ff059672ff5c473fffc42a31ffc62a30ffc62a30ffc72b31ffc72b31ffc62d32ffc62d32ffc62d33ffc82e34ffc92e34ff009184ff029773ff019878ff009a77ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff019d79ff019d79ff019d79ff019d79ff029e7cff009e7cff009e7cff019f7dff029f7dffa45584ffdf237effdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe22882ffe02982ffe02982ffe12a84ffe12a84ffe12a84ffe02a84ffa90854ff00566dff00556dff015871ff057c6aff009a77ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d7bff019d7bff019d7bff029e7cff029e7cff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff00a07dff01a17eff2c9682ff00716eff027672ff017873ff007a74ff007a74ff007a74ff02827eff018c85ff01938dff009d94ff02a99eff02aea1ff06b1a5ff16b7adff1eb9adff27bdb1ff29bcb1ff2bbdb0ff27bbadff00857bff00857bffdf811cffdf841effdf841effe08521ffe08722ffe18826ffe18b28ffe18b28ffe18b2affe38c2bffe28d2fffe38e2fffe38f2effe4902fffe38f2cff068965ff00906cff02926fff019571ff009673ff039875ff009a77ff0f8567ffc0282effc62a30ffc72b31ffc72b31ffc62d32ffc62d32ffc62d32ffc82e34ffc92e34ff019289ff6e4e44ff039874ff009875ff009975ff009a77ff009a77ff009a77ff009a77ff029b78ff029b78ff039c79ff039c79ff019d79ff019d79ff019d79ff019d79ff009e7cff009e7dff00a080ffdf237bffdd237effdd237effdd237effdd237effdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe22882ffe22882ffe22882ffe22882ffe02982ffe12a84ffe12986ffde2a81ff00556fff00556fff005871ff045d70ff009a77ff009a74ff009a74ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d79ff019d7bff019d7bff019d7bff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff00a07dff00a17eff340a29ff00706eff027672ff017873ff007a74ff007a74ff017b78ff028b84ff00988eff00a097ff04aa9dff12b2a6ff30bbb2ff44c1b9ff46c3bbff45c2b5ff42c4b7ff41c6b8ff41c5b6ff41c4b8ff3dc4b9ff06978aff1f7e69ffdf811bffde851effe08521ffe08722ffe08725ffdf8826ffe08a27ffe08b28ffe18b2affe38c2bffe48e2fffe38f2effe78f2fff92a162ff39b192ff33af8fff0b9978ff019d79ff009d79ff009d79ff009c78ff009a77ff039672ff0c63a4ff9d3f58ffc22c33ffc72b31ffc82c32ffc92c32ffcb2c32ffc92c32ff3c9990ffc41222ff109573ff019875ff009a77ff019a76ff009a77ff009a77ff009a77ff029b78ff029b78ff039c79ff039c79ff019d79ff019d79ff019d79ff019d79ff039e7cff009e7dffb23b76ffdf237cffdd237effdd237effdd237effdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe22882ffe22882ffe22882ffe02982ffe12a84ffe12986ffce3483ff00556fff00556fff015871ff005972ff06977cff009a77ff009a77ff009b77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff019d79ff019d79ff019d79ff019d7bff019d7bff019d7bff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff00a07dff1a9883ff3c072dff00706eff027672ff017873ff007a74ff007973ff008680ff039990ff2ebfb5ff49c7baff50c6bdff4fc7bbff50c8bcff52c7bcff53c8bdff55c8bbff55cabcff59cabeff62c3bbff90e9e0ff55c9beff4ccabfff3cc6b9ff188d7bffde8422ffdf8420ffdf8521ffe08725ffe08826ffe18a27ffe18b2affe18b2affe18b2affe38d2effe38d2cff649d67ff13a17eff16a382ff18a483ff1aa383ff1aa384ff34a98eff05a17eff02a07bff029b78ff009771ff0364a5ff0166a6ff0367a7ff006eadff0578b4ff1a7cb1ff2282b6ff1d8abcffa41f2bffc41222ffc61322ff169370ff019876ff019874ff019a77ff019a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff039c79ff019d79ff019d79ff059d7aff9d4a75ffdc2179ffdc227dffde217fffdd237effdd237effdd237effdf247fffdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe22882ffe22882ffe22882ffe32984ffe32984ff284a6eff00556fff00556fff015871ff005972ff045c73ff009a77ff009a77ff009b77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d79ff019d7bff019d7bff019d7bff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff009e7cff009e7aff53012dff3e062dff00706eff027672ff017873ff017873ff00847bff3ec6b9ff4bc6baff4ac6baff4ac6baff4dc7bbff4dc7bbff4dc7bbff50c8bcff53c8bdff55c8bdff58c8beff5ac9beff5bc9beff5bcabfff5ac9bdff72cdc6ff56cabfff4fc8bcff3fc5b8ff79b38bffd8872bffe08521ffdf8622ffe18826ffe28927ffe28a27ffe38a2bff859a57ff05a07fff0fa080ff13a281ff16a382ff1aa383ff1aa383ff1ea586ff1ea586ff1ea586ff29af90ff02a17cff009973ff0164a5ff0166a7ff0267a9ff006dacff0377b5ff0280bcff018ac1ff0190c6ffc61122ffc41222ffc41323ffc81120ff803834ff009774ff029874ff019a75ff009a75ff009a77ff009a77ff009c78ff029b78ff009c78ff019d7aff019d79ff1d9571ff9c4308ffae3b25ffdc227cffde227dffde227dffdd237effdd237effdd237effdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe22882ffe22882ffe22882ffe12a84ffe32981ff00536eff00556fff00556fff015c75ff015e77ff025d77ff00606eff009975ff009975ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d79ff019d7bff019d7bff019d7bff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7fff5a0530ff580132ff40062dff00716eff007571ff007571ff1aa399ff45c4bcff46c5b7ff47c6b9ff4ac6baff4ac6baff4dc7bbff4dc7bbff4dc7bbff50c8bcff53c8bdff55c8bdff58c8beff5ac9beff5bc9beff5ecabfff60c9bfff61cbc0ff61cbc0ff6fd6ccff51cbbfff42c7bbff36c0b5ff026ea5ff02453eff024c39ff029b78ff009d7eff019e7fff049f7dff09a080ff0ea080ff13a281ff16a382ff1aa383ff1ca283ff1ea586ff1ea586ff1ea586ff21a587ff1da988ff039c77ff0164a5ff0166a7ff0267a9ff006dacff0377b5ff0280bcff018ac1ff0291c7ffc41222ffc31222ffc41323ffc31220ffc41220ffc61323ffa51a20ff4c8369ff079872ff009b77ff009b77ff009c77ff039a76ff1a9573ff805550ffc41923ff99430aff9c4303ff9e4206ffda2971ffdc227dffdc227bffdc227dffdd237effdd237effdd237effdf247fffdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe12781ffe02982ffe12781ff174b6aff01536eff00556fff00546eff005d76ff026c84ff07768eff097288ff01647aff019976ff009a77ff009b75ff009a77ff019a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d79ff019d7bff019d7bff019d7bff019d7bff009d7bff009d7bff039c7cff61073eff5f0539ff5f0539ff43062eff00716eff007470ff30b9adff44c5b7ff46c5b7ff46c5b7ff47c6b9ff4ac6baff4ac6baff4dc7bbff4dc7bbff4dc7bbff50c8bcff53c8bdff55c8bdff58c9bcff5ac9beff5bc9beff5bc9beff60c9bfff61cbc0ff64cbc1ff66cbc1ff69d0c6ff4cc8b9ff37c1b1ff026ea4ff01443eff009c7aff009b7aff019d7bff029e7cff039f7dff09a07eff0ea080ff12a180ff18a282ff1ca283ff1ca283ff1da485ff20a486ff20a486ff1fa687ff1fa687ff0aa380ff0065a7ff0166a7ff0067a9ff016eaeff017cb9ff0088beff0294c9ff009ccdffc31222ffc21120ffc31222ffc31222ffc31222ffc41321ffc41421ffc61321ffc41421ffc61522ffc31623ffc91525ffc41522ffc81523ffcb1625ffca301bffdb7912ffdf7c19ffe07f15ffe28011ffd62474ffde227dffdd227dffdd227dffdd237effdd237effdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe02882ffb1746fff015069ff02526eff01556fff025a71ff02687dff06748aff188599ff2f9aafff3da5bbff359aadff04897dff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d79ff019c7bff019c7bff009d7bff019d7cff009d7cff3b6460ff5f0338ff630238ff600539ff63053bff4e0d38ff006f6cff189b92ff41c4b8ff44c5b7ff46c5b7ff46c5b7ff47c6b9ff49c5b9ff4ac6baff4cc6baff4dc7bbff4dc7bbff51c8bcff54c8bdff55c8bdff58c9bcff5ac9beff5bc9beff5bc9beff60c9bfff61cbc0ff64cbc1ff66cbc1ff68cbc2ff67d1c6ff42c7b8ff016ca4ff004641ff029b7aff009b7aff019d7bff019d7bff029e7dff089f7fff0d9f7fff12a180ff17a181ff1ba383ff1ca283ff1da485ff1fa486ff1fa486ff1ea586ff1da586ff15a886ff0063a8ff0166a7ff0169aaff0079b5ff058cbdff35b1ddff51bbddff4db8d9ffc01123ffc21121ffc31222ffc31222ffc31222ffc41421ffc41421ffc41421ffc41421ffc51522ffc51522ffc51522ffc51522ffc71521ffbb2110ffd9770effdb7a10ffdc7d11ffdf8113ffe08212ff9a3f06ffcb2860ffdd227effdd227effdc227dffdc227dffdd237effdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe1277fffde2680ffb58731ff8f8943ff015069ff02536dff04546eff086c80ff38a1b3ff38a1b3ff3aa2b3ff3ca3b4ff3ca1b3ff3da2b4ff3ea2b4ff3e9fb4ff1a9e94ff019a77ff019b77ff009c77ff009c76ff029b75ff029b75ff009c75ff009c75ff009c75ff019d76ff019d78ff009d79ff039c7bff394d54ff630237ff5f0237ff5f0338ff5f0338ff600539ff63053bff4e0d39ff006d6aff42c4b8ff42c4b7ff43c4b7ff44c5b7ff46c5b7ff46c5b7ff49c5b9ff4ac6baff4cc6baff4dc7bbff4dc7bbff52c7bcff55c8bdff55c8bdff58c9bcff5ac9beff5cc9beff5dc9beff60c9bfff61cbc0ff64cbc1ff66cbc1ff67ccc0ff6accc1ff55cdbfff006ea6ff006772ff029979ff009b7aff009b7aff019d7bff039d7eff079f81ff0b9f81ff11a07fff15a181ff19a282ff1ca283ff1ca283ff1da485ff1ca485ff1ca485ff1ca586ff1aa687ff0264a3ff0166a4ff0880baff44b7daff47b6daff48b7dbff49b8dcff48b7dbff62475fffc81123ffc41222ffc11222ffc11222ffc11320ffc21421ffc21421ffc21421ffc21521ffc41421ffc41421ffc51522ffdd701cffd87810ffdc790fffdb7b10ffda7d11ffdf8113ffdf8112ff983f07ff953f04ff7a4226ffd82676ffde227effdc227bffdf237effde237effdd237effdf247fffdf247fffdf247fffdf257fffe0267fffdf2583ffdf257fffe12782ffc95c57ffa78b21ffa9891fff8f8942ff014f68ff005068ff399eb1ff379eafff389fb0ff39a0b2ff39a1b2ff3aa2b3ff3ba1b3ff3ca1b3ff3da2b4ff3ea2b4ff3ea4b2ff40a4b4ff49a4b5ff32a7a8ff129c8fff049b80ff10997bff089b7dff0c987bff2a9281ff526d78ff701752ff890152ff5d0238ff5f0237ff5e0237ff5e0237ff5f0338ff5f0338ff600539ff62053bff4c0d37ff2fb0a5ff41c5b6ff43c4b7ff43c4b7ff44c5b7ff45c5b7ff46c5b7ff48c5b9ff49c5b9ff4cc6baff4cc6baff4cc6baff50c6bbff53c7bcff55c8bdff57c8bcff5ac9bdff5dc9beff5ec8beff60c9bfff61cbc0ff63cac0ff66cbc1ff67ccc0ff69ccc0ff65cec3ff016ea6ff006fa3ff009879ff009a79ff009b7aff009c7aff029d7dff039e7eff0a9e80ff10a07fff15a181ff17a181ff1aa282ff1aa383ff1aa383ff1ba485ff1aa485ff19a585ff1ca18bff0364a3ff3bb3dcff44b6dcff45b6daff46b6d9ff48b7dbff48b7dbff48b7dbff145873ff005d71ff873313ffb81b1bffc51020ffc21120ffc21624ffc51524ffc31322ffc51325ffba290bffdd7917ffdf8414ffe28418ffe18419ffe28618ffe2871affe08516ffe08213ffde8112ff983f05ff953f06ff6d4625ff8f7520ff987d1cffbe694fffd42171ffe12181ffe0247fffdf257effdf237fffe12680ffe12582ffe02581ffc7395bffddab52ffa98c1cffab8c1fffaa8b1effaa8a20ff908941ff024d67ff359caeff369daeff379eafff379eafff389fb0ff39a0b2ff3aa2b3ff3aa2b3ff3aa2b3ff3da2b4ff3da2b3ff3ea4b3ff3fa4b3ff40a5b4ff46a5b4ff3fa3b1ff00837fff890555ff93015aff93015aff98015eff98015cff99015cff970359ff5c0139ff5d0237ff5e0237ff5e0237ff5f0338ff5f0338ff600539ff62053aff530c39ff40c2b7ff40c3b5ff43c4b6ff43c4b6ff43c4b6ff44c5b7ff46c5b7ff47c6b8ff49c5b9ff4cc6baff4cc6baff4dc7bbff50c8bcff52c7bcff55c8bdff57c7bdff5ac8bcff5dc9beff5ec8beff60c9bfff61cbc0ff63cac0ff66cbc1ff67ccc0ff68cbc0ff69ccc2ff006fa7ff016eafff009974ff009a79ff009b78ff009b7aff029c7cff019c7dff049d7eff099f7fff10a081ff129f81ff14a080ff17a282ff17a282ff17a282ff15a382ff16a382ff006399ff3eb5deff41b4d9ff42b5dbff45b6daff45b6daff47b6daff48b7dbff48b7dbff165874ff005d74ff7b370bff8b3b0aff8e3d09ff8d3d0bff9c4506ffd07311ffe28617ffe28616ffe38718ffe38718ffe38716ffe48817ffe48817ffe3891affe48a1afff69e3affe78c1cffe4881aff9b4004ff943d05ff6e4726ff917620ff987c1cff9b7f1cff9d811eff9d821bffa3891dffb7912dffc09e31ffc8a934ffceb337ffd3b83cffd7bc45ffdbbf48ffcdaf3effab8c1fffaa8b1dffa8891dff918940ff2f91a4ff359cadff349daeff369daeff379eafff389fb0ff39a0b2ff39a0b2ff39a0b2ff3aa2b3ff3ba1b3ff3ca3b4ff3da2b3ff3da2b3ff40a5b4ff42a4b4ff47aabaff048280ff447184ff95005aff96005bff97015cff97015cff99015dff98015cff760145ff5d0138ff5e0237ff5e0237ff5f0338ff5f0338ff5f0338ff60043aff61063dff40c4b8ff40c3b5ff43c4b6ff43c4b6ff43c4b6ff44c5b7ff46c5b7ff46c5b7ff48c6b9ff4ac5b9ff4cc6baff4cc6baff4fc7bbff52c7bcff52c7bcff56c8bdff58c8bcff5ac8bcff5ecabfff5ecabfff60c9bfff63cac0ff64c9c0ff66cbc1ff67cac0ff67ccc0ff0070adff016faeff0173a4ff009c77ff009a78ff009b7aff019b7aff019d7cff019d7cff049d7eff099f7fff0ba080ff0da180ff0da180ff11a181ff11a181ff11a180ff169a95ff2ba5cdff3fb5daff41b4d9ff42b5dbff44b5daff45b6daff47b6daff48b7dbff48b7dbff155874ff005d74ff7c380eff8b3b0aff8d3c08ffb5580cffe18516ffe18516ffe28617ffe28617ffe28617ffe38716ffe38716ffe48817ffe48817ffe38917ffe38917ffe38917ffe0891dffeb9b31ffa24407ff974006ff6e4726ff917620ff987c1cff9b7f1dff9c801bff9e831dffb09324ffbca02affc6ab32ffcfb63effd6bd47ffdec54effdfc550ffe0c653ffe1c853ffc3a837ffaf9121ffaa8b1dff97883dff349baeff359cadff369db0ff369daeff379eafff389fb0ff389fb0ff39a0b2ff39a0b2ff3aa2b3ff3aa2b3ff3ca3b4ff3da2b4ff3da2b3ff3ea4b3ff40a5b4ff42a6b5ff0b8f8fff00877fff8d0255ff96005bff96005bff97015cff99015cff99015cff99015bff62023dff5e0239ff5c0337ff5e0237ff5e0236ff5f0338ff5f043aff1f5d78ff42c3b7ff40c3b5ff43c4b6ff43c4b6ff43c4b6ff43c4b6ff46c5b7ff46c5b7ff46c5b7ff4ac6baff4cc6baff4cc6baff4fc7bbff51c6bbff52c7bcff55c8bdff58c8bcff59c8bcff5dc9beff5dc9beff60c9bfff60cbc0ff62cac0ff63cac0ff66cbc1ff67cac1ff0179b6ff037fbbff007ebaff0073abff00997cff019a7aff019b7aff009b7aff019d7cff019c7dff029e7eff039f7fff069f81ff07a182ff09a080ff0aa081ff0f9598ff005c9cff3cb3d6ff3eb3d8ff41b4d9ff42b5dbff44b5dbff45b6daff47b6daff47b6daff48b7dbff155774ff005d75ff7e380cff8a3907ffd27815ffe18515ffe18516ffe18516ffe28617ffe28617ffe28617ffe28617ffe38718ffe38718ffe38718ffe48819ffe48819ffe38917ffe38918ffe18716ffb15512ff9b4403ff6d4626ff8f761eff987c1cff9b801dff9d811dffa78c21ffcbaf3cffe3c752ffe2c956ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe1ca58ffe7ce5fffbfa233ffb09121ffa98e2aff329bacff339cadff339cafff349daeff369daeff379eafff389fb0ff389fb0ff389fb0ff39a1b2ff3aa2b3ff3aa1b3ff3da2b4ff3da2b4ff3ea3b5ff40a3b4ff42a4b4ff00a69dff01aca0ff00938aff8a0857ff97015aff97015cff96015cff99015cff99015cff99015aff690142ff5c0337ff5b0335ff5b0336ff620338ff2d4e6fff01657cff3dbfbcff42c3b7ff40c3b5ff40c3b5ff41c5b6ff43c4b6ff44c5b7ff44c5b7ff46c5b7ff49c5b9ff4ac6baff4ac6baff4cc6baff4fc7bbff52c7bcff54c7bcff55c8bdff57c9bdff59c8bcff5dc9beff5ec8beff61cbc0ff61cbc0ff63cac0ff63cac0ff5fcccbff0078b5ff007ebaff0286c1ff028bc4ff0391c9ff0295a5ff019c7aff009b7aff009b7cff029b7cff009b7cff029d80ff009e7fff029e7cff059f97ff016ea7ff016ea9ff03649fff3db2d8ff3eb3d8ff3fb5d9ff3fb5d9ff42b5dbff42b5dbff45b6daff45b6daff46b7dbff155774ff005d75ff7a390dffa55009ffdf8414ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe28617ffe28617ffe38718ffe38718ffe38718ffe48817ffe38917ffe3891affac5006ffaa4f07ffab500bff6e4725ff8e751dff987c1cff997e1bffae9329ffe0c852ffe0c852ffe0c852ffe1c956ffe1c956ffe1c956ffe1c956ffe2ca57ffe1ca57ffe0cb57ffe2ca57ffe0c753ffb69826ffb69626ff329baeff329baeff339cafff339cadff369daeff379eafff379eafff389fb0ff389fb0ff39a0b2ff39a0b2ff39a0b2ff3ca1b3ff3da2b4ff3ea3b5ff3ea3b4ff3fa4b0ff00a79dff00ada0ff05b3a6ff16b8abff459ba5ff980158ff96005cff97005bff97015cff97015cff9a025cff7b0249ff600139ff410c3cff016378ff01657cff01657cff00657bff3fc2b8ff40c3b5ff40c3b5ff41c5b6ff43c4b6ff43c4b6ff44c5b7ff46c5b7ff49c5b9ff49c5b9ff4ac6baff4cc6baff4ec5baff51c6bbff53c5bbff54c7bcff57c9bdff58c9bcff58c9bcff5cc9beff5dc9beff5ecabfff61cbc0ff61cbbdff0170a3ff007ab6ff0080bbff018ac1ff0091c8ff0097cbff019ccfff00a2d1ff06a3d0ff0da6c8ff0ea7b9ff0ea7baff12aac7ff1dacd3ff23add6ff28afd7ff149fcdff016ea9ff006ca3ff3db2d8ff3eb3d8ff3eb3d8ff3fb5d9ff41b4d9ff42b5dbff44b5dbff45b6dbff45b6daff145972ff005e75ff7a3612ffe08315ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe38718ffe38718ffe38718ffe38718ffe48818ffbe610bffa94e06ffa94e07ffaa4f08ff704b27ff8e751fff977b1bffd3b948ffdfc752ffdec751ffe0c852ffe0c852ffe0c854ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe2ca57ffe2ca57ffe3cb58ffcfb240ffb59628ff4b9996ff2f9aafff329baeff339cadff369daeff369daeff379eafff379eafff389fb0ff39a0b1ff39a0b2ff39a0b2ff3aa2b3ff3ca1b3ff3da2b4ff3da2b4ff32a6b0ff00a79aff00ada0ff05b3a6ff1bb7acff27baafff2ebeb1ff31c1b2ff53bfb9ff76a9b6ff4d657bff3b6d77ff9f8f4dff015e76ff026279ff01647bff01657cff01657dff00677dff3fbbb7ff40c3b5ff40c3b5ff41c5b6ff43c4b6ff43c4b6ff43c4b6ff44c5b7ff46c5b7ff49c5b9ff49c5b9ff4ac6baff4cc6baff4fc6bbff51c6bbff53c6bcff56c7bdff57c7bdff5ac8bcff5ac8bcff5dc9beff5dc9beff5ec8beff5fccd0ff0077b4ff0083bdff018dc3ff0196caff039fd4ff0ca4d4ff1ca9d7ff22afdaff28b0daff2db2dbff30b1daff2fb2d9ff2fb2d8ff2ab0d6ff27afd8ff26afd9ff2ab0daff0788b9ff006ea7ff3cb1daff3ab1d8ff3bb3d7ff3cb4d8ff3fb5d9ff41b4d9ff44b5dbff45b6dcff43b6dcff165872ff005d74ff763509ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe38718ffe6891affad4f04ffa94e05ffaa4f08ffaa4f08ff6f5030ff8e751fffb1962dffdec750ffdec751ffdec751ffe0c852ffe0c852ffe0c854ffe1c956ffe1c956ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe2ca57ffe3ca57ffd2b542ffb59825ff309aaeff329bb0ff309baeff359cadff359cadff369daeff369daeff379eafff389fb0ff389fb0ff39a0b2ff3aa2b3ff3ba1b3ff3da2b4ff3ea3b4ff019d96ff01a69cff00ada0ff05b3a6ff1bb7acff27baafff2ebeb1ff33bfb1ff39c2b5ff37c3b5ff017d74ff087767ff949248ff005e76ff026279ff01647bff01657cff00657dff00687eff006c81ff44c4b7ff42c3b5ff40c3b5ff43c4b6ff43c4b6ff43c4b6ff44c5b7ff46c5b7ff49c5b9ff49c5b9ff4ac6baff4cc6baff4cc6baff4fc6bbff51c6bcff53c7bcff56c6bcff57c7bbff58c9bcff5ac8bcff5bc9beff5bc8caff0078b5ff0187c1ff0a96caff30b3d9ff46b6dcff44b7daff46b7d9ff45b8dbff45b8daff49b7d9ff4cb6daff5ab9dbff77cfebff49b8daff3dbbdbff3bb7ddff35b5dcff2eb0d6ff2cb1d9ff057aaeff2fa5d1ff3bb3d7ff3bb3d9ff3bb3d9ff3eb3d8ff3fb5d9ff41b4d9ff42b5dbff42b5dbff0d5971ff005d73ff614729ffdf8214ffdf8213ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe28617ffe38718ffe38718ffe4881cffac4d05ffac4e06ffa94e05ffac4e06ff455d56ff8c731cffdec650ffddc650ffdec751ffdec751ffe0c852ffe0c852ffe0c852ffe0c852ffe0c854ffe1c956ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe0cb57ffe0cb57ffe1c956ffc3a531ff339aa9ff309cacff359cadff339cadff369daeff369daeff369daeff379eafff389fb0ff389fb0ff389fb0ff3aa2b3ff3ca3b3ff00958eff009f96ff01a69cff00ada0ff05b3a6ff19b8acff25baafff2cbfb1ff33bfb1ff37c1b4ff39c2b5ff007e70ff097968ff909248ff005e76ff03637bff01647bff01657cff016880ff03778cff077d92ff00738bff42c4bfff41c5b5ff40c5b4ff43c4b6ff43c4b6ff43c4b6ff45c3b6ff46c5b7ff46c5b7ff49c5b9ff4cc6baff4cc6baff4dc6baff4fc7bbff52c7bbff54c7bcff55c8bdff57c7bdff59c7bbff56c6c9ff0278b6ff2baed9ff3fb6dbff40b6dbff40b6dbff40b6dbff42b7daff43b7daff45b6daff46b7dbff46b7dbff48b8dcff4ab9ddff4ab9dcff4ab9dbff4bbbdaff6fcbecff47bcdcff3fb9dbff37b5dcff2cb2d9ff0074a9ff38b0d8ff38b2d8ff3bb2dbff3cb4daff3cb4daff3eb3d8ff3fb5d9ff3fb5d9ff0b7485ff015c73ff185762ffdf8214ffdf8213ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffad4e05ffa94e07ffa94e07ffab4e0bff08677fff887018ffddc651ffdec751ffdec751ffdec751ffdec751ffe0c852ffe0c852ffe0c852ffe0c854ffe1c956ffe1c956ffe1c956ffe1c956ffe1c956ffe2ca57ffe0cb57ffe0cb57ffe0cb57ffe0ca5bff93b778ff0e888bff2f9badff339cadff359cadff369daeff369daeff379eafff389fb0ff389fb0ff399fb1ff0f8588ff008c83ff00958cff009f96ff01a69cff00ada0ff05b3a6ff19b8acff25baafff2cbfb1ff33bfb1ff37c1b4ff39c2b5ff007f74ff097867ff8e9147ff015f78ff026279ff006279ff01657cff00778bff15abb9ff1cb3beff1db3beff1eb2beff0d9ea5ff3ec4b8ff43c4b8ff45c3b8ff43c4b8ff45c3b6ff46c5b7ff46c5b7ff48c4b7ff49c5b7ff4bc5b9ff4cc6baff4cc6baff4fc7bbff51c6bbff52c7baff54c7baff036797ff21a2d4ff3db5d9ff3fb5d7ff3db5d9ff40b6dbff40b6dbff40b6dbff42b7daff43b7daff45b6daff46b7dbff46b7dbff48b8dcff49b8dcff49b8daff49b8daff4ab9dbff4ab9dbff51b9dcff61c6e8ff46bcdeff3bb7dcff2bb0d5ff0680b1ff38b3d8ff39b3d9ff39b3d9ff39b3d9ff3cb4daff3cb4daff3cb4d8ff2b97a9ff228799ff005b70ffde7f11ffdf8213ffdf8213ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38716ffc2630cffab4d0affa94d07ffab4d08ff006a81ff8a883bffddc650ffddc650ffdec751ffdec751ffdec751ffdec751ffe0c852ffe0c852ffe0c852ffe0c852ffe1c956ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe2ca57ffe2ca57ffe0cb57ff459273ff01867eff01867eff02867aff04847fff138c8dff1e8e96ff158089ff037576ff007b78ff027976ff00817aff008c85ff00958cff009f96ff01a69cff00ada0ff05b3a6ff19b8acff25baafff2cbfb1ff31c0b1ff36c2b4ff39c2b5ff15a596ff097968ff8f9248ff015f75ff03607aff02627aff14abb7ff18b1beff1bb2bdff1db3beff1fb2beff20b3bfff22b3bfff25b5c1ff27b2bbff3ec4baff42c4b8ff44c4b6ff43c4b4ff47c5b5ff47c4b7ff49c5b9ff4bc5b9ff4cc6b9ff4cc6b9ff4dc6b9ff52c4c1ff01669aff0061a2ff37b5dcff3cb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff40b6dbff40b6dbff40b6d8ff42b7daff42b7d8ff45b8dbff46b7dbff46b7dbff46b7dbff49b8dcff49b8dcff4ab9dbff4ab9dbff4ab9dbff4ab9dbff4cb9d9ff49bddcff3ab8daff28afd6ff44a2aaff788054ff39b4deff3bb4dcff3bb3d9ff3cb4daff3cb4daff2a95a8ff2e97acff2090a2ff265350ffde8112ffdf8213ffdf8213ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe3861cffaf5007ffa84d05ff0a657aff006a81ff29675dffddc650ffddc650ffddc650ffdec751ffdec751ffdec751ffdec751ffe0c852ffe0c852ffe0c852ffe0c854ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe2ca57ffe4ca57ffe1ca59ff08857bff01867eff01867eff01867eff01867cff01847bff057f78ff007470ff017873ff007974ff027976ff00817aff008c85ff00958cff009f96ff01a69cff00ada0ff05b3a6ff19b8acff25baafff2cbfb1ff31c0b1ff36c2b4ff39c2b5ff3bc5b7ff077867ff8f9248ff005e74ff016079ff15b0bdff16b0bdff18b1beff1bb2bdff1bb2bdff1db3beff1fb2beff22b3bfff22b3bfff25b4beff26b5bfff29b5bfff2ab4c0ff2fb7c0ff35bbbdff3abebcff3cbebcff34bcbaff036e75ff03867dff00618dff015ea0ff01609fff38b3ddff3bb4daff3bb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff40b6dbff40b6dbff40b6dbff42b7dcff43b7daff43b6daff46b7dbff46b7dbff46b7dbff49b8dcff49b8dcff49b8daff49b8daff4ab9dbff4ab9dbff4cb9d9ff4dbadaff48bde0ff2fafd4ff43a1adffc7ad43ffdec95bffd7c962ff91c3a6ff4ab2caff3fb3daff2a96a8ff2e98aaff309aabff329bacff666241ffdd8112ffdf8213ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe28617ffe38417ff2c6066ff00657cff026b82ff006b87ffddc650ffddc650ffddc650ffddc650ffdec751ffdec751ffdec751ffdec751ffdec751ffe0c852ffe0c854ffe0c854ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe2ca57ffdeca55ff00847dff00867eff01867eff01867eff01867cff01847bff018178ff017370ff037773ff017875ff027976ff008079ff008c85ff00958cff009f96ff00a79cff00aea0ff05b1a5ff19b8acff23bbafff2ebeb1ff33bfb1ff37c1b4ff39c2b5ff39c2b5ff0b7767ff928e48ff005c75ff11b0bdff11b2bdff14b1bdff16b2beff18b1beff1bb2bfff1cb3beff1db3beff20b3bfff20b3bfff23b4c0ff23b4c0ff26b5bfff28b4bfff29b6c1ff2ab7c2ff2cb6c2ff2db7c3ff31b8c2ff006e7dff01857eff005d8cff015e9fff38b4daff39b3d9ff3bb4daff3bb4daff3cb4daff3db5dcff3db5d9ff3db5d9ff3db5d9ff3fb6dbff40b6dbff40b6dbff43b7daff43b7daff43b7daff45b6daff46b7dbff46b7dbff46b7dbff47b8dcff47b8dcff4ab9dbff4ab9dbff4ab9dbff4ab9dbff4ab9dbff40b7dbff40a2adffdec859ffdec85bffdec85bffdfc95cffdfc95cffdfc95aff2a96a8ff2e98aaff309aabff329bacff319ca9ff246e75ffe08416ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe18516ffe18516ffe28617ffe1881dff0a6374ff00657cff00677fff006980ff006b82ff5e845dffdec552ffddc650ffddc650ffddc650ffddc650ffdec751ffdec751ffdec751ffe0c852ffe0c854ffe0c854ffe1c956ffe1c956ffe1c956ffe2ca57ffe2ca57ffe4c853ff0e7e6aff01867eff00877fff02877fff02877fff01867cff018478ff018178ff017370ff037773ff017875ff027976ff008079ff028d86ff00958cff009f96ff00a79cff00aea0ff06b2a6ff19b8acff23bbafff2ebeb1ff33bfb1ff37c1b4ff39c2b5ff39c2b5ff097868ff8f9048ff078799ff0eb1bdff10b0bbff13b0bbff15b1bdff18b1beff19b1beff1bb2bdff1cb2bdff20b3bfff20b3bfff22b3bfff23b4c0ff26b5bfff28b4bfff28b4bfff29b6c1ff2cb6c2ff2cb6c2ff2fb7c1ff0d909fff02877fff005b8aff0169a1ff38b4d9ff39b3d9ff3bb4daff3bb4daff3cb4daff3db5dcff3db5d9ff3db5d9ff3fb6dbff3fb6dbff40b6dbff40b6dbff42b5d8ff43b7daff43b7daff45b6daff46b7dbff46b7dbff46b7dbff47b8dcff47b8dcff49b8dcff49b8dcff49b8dcff49b8dcff49b8dcff4ec1e4ff47a6acffe0c859ffdec85bffdec85bffdec85bffdfc95cffdfc95cff2a96a8ff2e98aaff309aabff329bacff329bacff309cacff208db1ff25668effd18633ffdf8211ffe08314ffde8414ffdf8515ffdf8516ffe08415ffe28514ffce8841ff145863ff00617aff00657cff01657cff006880ff007489ff04788fff007087ffb2b76cffdfc550ffddc650ffddc652ffddc650ffdec751ffdec751ffdec751ffdec751ffe0c852ffe0c852ffe0c853ffe1c956ffe1c956ffe0c956ffe1c956ff4e9165ff008680ff008982ff008a83ff008b81ff008a81ff008980ff01867cff018178ff027370ff037773ff027977ff027976ff008079ff028d86ff00958dff01a097ff00a89dff00aea0ff06b2a4ff1ab8aaff25baafff2fbfb2ff31c0b1ff36c2b4ff39c2b5ff39c2b5ff28a292ff9a8f42ff0bafbbff0db0bcff0fb1beff10afbcff12b0bbff15b2beff18b1beff1bb2bfff1cb1bfff1db3beff1db3beff20b3bfff22b5c0ff23b4c0ff25b4c0ff26b5bfff28b6c1ff29b6c1ff2cb6c2ff2eb6c2ff0493a4ff028780ff005b8fff35b3dcff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3fb5d9ff40b6dbff40b6dbff40b6daff42b7daff42b7daff43b7daff45b8dbff45b8dbff47b8dcff46b7dbff47b8dcff47b8dcff49b8dcff48b7dbff49b8dcff49b8dcff4ca8a9ffddc758ffdec859ffdec859ffdec85bffdec85bffdfc95cff2a96a8ff2e98aaff309aabff329bacff329bacff2f9aabff208cb3ff016dadff026facff036fb2ff0070b2ff0970a9ff0c6fa6ff0972aaff0272adff0072b2ff0271afff005e74ff016279ff01657cff01657cff006880ff01748aff027f95ff03889cff048fa1ff357563ffddc64fffddc650ffddc64effdec751ffdec751ffdec751ffdec751ffe0c852ffe0c852ffe0c854ffe1c954ffe2c954ffdfc959ff147e6cff018d86ff028e83ff038f86ff029086ff029088ff039189ff179f96ff048a82ff01857cff027370ff037773ff027977ff027976ff01837cff02938aff029d94ff00a69bff03afa3ff10b7acff22bbafff2dbeb1ff32c1b5ff33c0b1ff36c0b3ff37c1b4ff39c2b5ff39c2b5ff3ebba9ffa48d28ff08afbeff0cafbbff0db0bcff10afbbff12b0bbff14b1bdff18b1beff1bb2bfff1cb1bfff1db3beff1db3beff20b3bfff20b3bfff23b4c0ff25b4c0ff25b4beff26b5bfff29b6c1ff29b6c1ff2cb8c3ff018899ff00867eff005c8cff36b2ddff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3cb4d8ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff3fb6dbff3fb6dbff40b6dbff42b7dcff43b6dcff43b7daff43b7daff46b7dbff46b7dbff46b7dbff45b8dbff47b8dcff47b8dcff47b8dcff47b8dcff5eafb2ffddc758ffdec859ffdec859ffdec85bffdec85bffdec85bff2a96a8ff2e98aaff309aabff329bacff329bacff2f99a9ff228cb0ff016dadff006faeff0270afff0270afff0270afff0172b1ff0172afff0172afff0172afff0172afff005e73ff00647aff01657cff01657cff006880ff01768bff028196ff00899cff0192a3ff0098a8ff019eaaff5da47effd8c857ffdfc751ffdfc751ffdec752ffddc751ffe0c651ffdfc752ffdec751ffd6ca65ff2c795aff038c86ff018d84ff018f85ff018f85ff018f85ff029086ff009086ff009086ff019287ff009287ff11958dff017370ff027773ff027976ff007b76ff008b83ff009b8fff0eaca1ff3ac5bbff4ecbc2ff57ccc2ff5fd0c4ff5fd0c4ff44c3b6ff40c5b6ff3fc5b8ff3dc4b7ff3ac2b4ff3ac2b4ff39bca9ffa88b1eff05afb9ff0aafbbff0aafbbff0eafbcff10b0beff12b1bdff15b1bdff18b1beff1bb2bfff1bb2bdff1bb2bdff1db3beff1db3beff20b3bfff23b4c0ff25b4c0ff26b5c1ff26b5bfff28b6c1ff2ab7c2ff00889aff01867fff0c6e95ff35b3dbff36b3d8ff36b2daff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff40b6dbff41b6daff42b7daff43b7daff43b7daff43b7daff45b8dbff45b8dbff45b8dbff45b8dbff45b8dbff46b9dcff46b9dcffa1c094ffe0c859ffdec859ffdec859ffdec859ffdec859ffdec859ff2a96a8ff2d98aaff309aabff329bacff329bacff2f99a9ff228cafff016dadff006faeff0270afff0270afff0270afff0172b1ff0172afff0172afff0172afff0172afff015e72ff00637aff01657cff01657cff016880ff01768bff028196ff00899bff0192a3ff0098aaff009fafff03a5b3ff02a8b7ff01abbbff07acb7ff1ca8a4ff21a59cff167672ffac8f1fff9f9030ff00736dff069d93ff018d84ff018d84ff018f85ff018f85ff018f85ff029086ff009086ff009086ff009086ff019287ff069187ff017370ff017673ff007873ff078981ff3ec5baff43c6b9ff44c5baff47c6b9ff47c6baff48c7b9ff4ac7baff4bc8bbff4ec6b8ff4fc9bbff7eddd7ff46c9bbff41c6b8ff3bc2b3ff39bca9ffaa8d20ff0aaeb8ff07adbbff08afbdff0bafbbff0eafbcff12b1bdff14b1bdff17b1beff19b1beff1ab2bdff1ab2bdff1db3beff1db3beff20b4bfff22b3bfff23b4c0ff23b4c0ff25b4bfff26b5c0ff29b6c1ff0797a0ff01867fff078186ff34b3daff36b3d8ff36b2daff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3cb4d9ff3db5daff3db5d9ff3db5d9ff3fb6dbff3fb6dbff40b6dbff40b6daff40b6d9ff42b7daff43b7daff43b7daff43b7daff43b7daff44b8dbff45b8dbff45b8dbff45b8dbff45b8dbff538655ffdcc759ffdec859ffdec859ffdec859ffdec859ffdec859ff2a96a8ff2d98aaff309aacff329bacff329bacff2f99a9ff228cadff016dadff006faeff0270afff0270afff0270afff0271b0ff0172afff0172afff0172afff0371afff025e71ff01637aff01657cff01657cff016880ff00758aff018095ff00899aff0192a3ff0299abff019fafff01a4b3ff03a8b6ff02acb7ff01adb8ff01adbaff02afb9ff0ea6b0ffaa8c1eff9f8f31ff39c2b4ff009488ff028d84ff018d84ff018d84ff028e85ff018f85ff018f85ff009086ff009086ff009086ff019287ff069187ff017370ff017572ff31bbb1ff40c4b8ff41c4b7ff41c5b6ff44c5b7ff46c6b9ff46c6b9ff47c8baff48c7baff4ac8bbff4bc8bbff4cc9bcff50c9bdff57c7bdff55c9beff3fc3b5ff38bca9ffac8f20ff9c943fff04aebbff07afbcff09afbcff0bafbbff0eb1bbff11b0bbff14b1bdff16b2beff18b1beff19b2bfff1bb2bdff1bb2bdff1db3beff1db3beff20b3bfff22b4c0ff24b4c0ff25b5c1ff25b5bfff00887fff01867eff02877eff35b3dcff35b3d9ff35b3daff36b3d8ff36b3d8ff38b4d9ff38b4d9ff39b3d9ff3ab4daff3bb4daff3bb4daff3db5daff3db5daff3db5daff3db5daff3db5d9ff3fb6dbff3fb6dbff40b6dbff40b6dbff41b7d9ff42b7daff42b7daff42b7daff43b7daff43b7daff43b7daff46b7ddff018177ffdec755ffe0c759ffe0c858ffe0c858ffdfc858ffdec859ff2a95a8ff2e98a9ff309aabff329bacff329bacff2f99abff218cafff016dadff0270afff0270afff0270afff0371afff0172afff0172afff0172afff0172afff0371afff025e71ff01637aff01657cff01657cff016880ff03748cff018095ff00899aff0192a3ff0198a8ff009fafff01a4b3ff03a8b6ff01aab8ff01adbaff01adbaff00aeb8ff06a8b2ffab8c1fffa88d26ff37c1b6ff039c90ff008c82ff018d84ff018d84ff018d84ff028e85ff028e85ff019086ff019086ff009086ff009086ff089088ff00726cff3bc2b8ff3cc3b7ff3dc4b7ff40c4b7ff41c5b6ff42c4b6ff43c6b7ff46c6baff46c6baff48c7baff48c7baff4bc8bbff4bc8bbff4dc9bcff50c9bdff52c9bdff4ec7bbff3dbda9ffc6ac3cffb5982bff3fa99aff04afbcff07aebbff0aafbbff0db0bcff10b0bdff10b0beff13b1bdff15b1bdff15b1bdff18b1bdff19b2beff1bb2beff1cb3c0ff1eb3beff1fb3beff21b3bfff21b3bfff099291ff01867eff01867eff03867eff2aa9c8ff32b2d9ff35b3daff35b3daff35b3daff36b3d8ff38b4d9ff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3cb4daff3db5dbff3db5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff3fb6daff3fb6daff42b7dbff42b7dbff42b7dbff42b7dbff43b7daff3fbcd4ff028d80ff17785cffdfc657ffdec754ffdec755ffdec756ffdec859ff2a95a8ff2e98a9ff309aabff329bacff329bacff2f99acff208cb0ff026eaeff006faeff0070afff006faeff0373b0ff0072afff0172afff0172afff0172afff0172afff025e71ff01637aff01657cff01657cff006880ff03748cff018095ff00899aff0192a3ff0198a9ff00a0afff00a4b3ff00a7b5ff01aab8ff01adbaff01adbaff00aeb8ff05a9b3ffad8c22ffac8d1fff35c2b3ff1db7aaff018d84ff018d84ff018d84ff018d84ff028e85ff018f85ff018f85ff029086ff009086ff009086ff089088ff0d8880ff3bc3b6ff3bc3b6ff3dc4b7ff3fc4b7ff41c5b6ff41c5b6ff43c6b7ff46c6bbff46c6bbff47c6b9ff48c7baff4ac6baff4bc8bbff4dc7bbff4ec8bcff4fc8bcff54c8bdff45c2acffe0cb57ffe0c957ffbaa230ff4da78dff05adbaff08afbcff0aafbbff0eafbcff10b0beff12b0bbff13b1bdff15b1bbff18b1beff18b1beff19b1beff1bb2bfff1db3beff1db3beff1fb2bfff089c9cff039f95ff07a299ff008681ff02877fff028681ff32b2d7ff35b3daff35b3daff35b3daff36b2daff38b4dbff38b4d9ff38b4d9ff39b3d9ff39b3d9ff3bb4daff3bb4daff3bb4daff3cb5dbff3cb6d9ff3cb5d9ff3db5d9ff3fb6dbff3fb6dbff3fb6dbff3fb6dbff40b6dbff42b7dcff42b7dcff42b7dcff43b7d9ff39c1b0ff3ac2b5ff16a999ff2c7856ffdac755ffdec756ffdfc857ffdec859ff3198a9ff3099a9ff309aabff329bacff329bacff3299abff208eafff0270afff0172b1ff0073b2ff0175b3ff0276b3ff0278b5ff0278b4ff0278b3ff0376b2ff0174b0ff005d71ff006279ff00647bff01657cff00687fff01748cff018296ff008b9fff0095a7ff039daeff00a2b1ff01a6b4ff01aab8ff00acb9ff01adbaff00afbbff00aeb8ff05a8b4ffad8d1effa98c20ff40bdacff38c1b3ff049b90ff008c82ff018d86ff018d84ff008e84ff018f85ff018f85ff029086ff029086ff029086ff048e83ff3bc2b5ff3bc3b6ff3bc3b6ff3dc4b7ff3ec4b7ff40c3b7ff41c4b7ff41c5b6ff44c5b7ff44c5b7ff46c6b9ff46c6b9ff48c7baff48c7baff4dc7bbff4dc7bbff4ec8bcff4fc8bcff51c3adffe4ca56ffe0cb59ffdfca57ffe2cb59ffd2ca67ff0daeb9ff08b0bcff09afbbff0cb0bcff0fb0baff10b1baff12b0baff15b2bdff15b2bdff19b1beff19b1beff1bb2bfff1fb3bfff018f89ff00978fff029f96ff02a89dff03ada1ff00998fff02877fff088994ff32b1d9ff32b2d9ff33b3daff35b3daff36b2daff36b3d8ff36b3d8ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff3bb4daff3cb5dcff3bb4daff3cb4daff3db5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff3fb6dbff3fb6dbff40b6dbff3fb6daff38bfb8ff37c1b4ff3ac2b3ff3bc3b4ff31c0b3ff2296a0ffe2c85fffe1c756ffe0c856ff3ca1b1ff3ba2b1ff389fb0ff339cadff329bacff309aabff1e8eaeff0074b2ff0278b5ff0379b6ff037ab6ff037cb7ff027cb7ff0580baff0380baff017fb9ff017db7ff015e71ff006279ff00647bff00657dff026f88ff027d95ff038a9fff0094a6ff01a0adff04a5b5ff06a9b9ff03aebcff03aebcff04b1bbff04afbaff01adbaff00afb9ff08a9b2ffb89a27ffab8e1dffa68b21ff37c0b4ff35c1b4ff019b8fff038c84ff038d84ff018d84ff028e85ff018f85ff029086ff029086ff029086ff029085ff38c3b5ff39c2b5ff3ac2b5ff3dc4b7ff3ec4b7ff40c3b7ff41c4b7ff41c5b6ff43c4b6ff44c5b7ff46c6b9ff46c6b9ff48c7baff48c7baff4bc8bbff4bc8bbff4dc9bcff4dc9bcff74c49fffe3c955ffdfc958ffe0cb59ffe0cb59ffe0cb59ffe0cb59ffdfcc61ff64bb9dff10adb8ff0cb0bdff0eb1bcff12b3bcff16b0bfff14b1bdff1bb1bdff11999eff007a74ff00827aff018e87ff009890ff02a198ff01aa9cff02b1a2ff0fb3a5ff19b8aaff008e84ff0f91a2ff32b2d9ff35b3daff35b3daff36b2daff36b2daff36b3d8ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3cb4daff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3db5d9ff3fb6dbff3fb6dbff40b6daff36bbc6ff35c0b3ff37c1b4ff3ac2b3ff3ac2b3ff37c2b4ff33b4c5ff0061a1ff235e78ffdcc657ff3da2b4ff41a5b5ff4fabbcff40a3b1ff359eadff2f99a9ff1f8fafff0179b3ff0179b4ff0179b4ff0179b4ff007ab4ff007ab4ff017bb6ff017bb6ff017bb6ff017bb6ff015e71ff006279ff01647bff01677fff007f93ff13adbcff14b2c0ff17b3c0ff18b4c0ff1cb3c0ff20b3c1ff25b4c0ff3fc4d2ff2bb7bfff19b4c1ff0bb2beff00adb8ff05a8b3ffd6b83cffd8be45ffd9c048ffd6c556ff33c1baff36c0b3ff21bbafff019084ff028d82ff018f83ff018f81ff018f81ff018f83ff018f83ff038e8eff37c2b2ff39c2b5ff39c2b5ff3bc3b6ff3bc3b6ff3ec4b7ff3ec4b7ff3ec4b7ff41c5b6ff43c6b7ff44c5baff44c5baff46c6b9ff47c8baff48c7baff48c7baff4bc8bbff4bc8bbffbacb77ffe1c956ffe1c956ffe0c956ffe0cb59ffe0cb59ffe0cb59ffe0cb59ffe2cc5bffe1cc5affccb342ff75000fff77000fff39272cff017470ff007773ff027974ff007a77ff028781ff05958dff03a299ff00ab9dff0bb4a6ff1fb9afff2bbeb2ff32bfb3ff34c1b5ff2abdafff02878aff36b4deff35b1d9ff35b1d9ff35b3dcff35b3d8ff35b3d8ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff3bb4daff3bb4daff3bb4daff3cb6daff3bb5d8ff3db5d9ff3db5d9ff40b6ddff3fb5d8ff39bfbbff36c0b3ff34c1b3ff37c1b4ff3ac2b5ff3ac2b5ff37c1b2ff32b4c2ff0061a1ff0263a3ff0064a5ff3ca3b4ff3ba3b4ff3ca3b4ff53aabcff40a6b6ff339cadff1e8fafff0179b4ff0179b4ff0179b4ff0179b4ff007ab4ff007ab4ff017bb6ff017bb6ff017bb6ff007bb6ff015e71ff006178ff00647bff0dadbaff0fb2c1ff10b2bfff12b1bdff17b3bfff17b3bfff19b2bfff1cb3c0ff1fb4bfff1fb4bdff20b5c0ff34b4c1ff28b7c1ff0bb0baff03aab4ffdbc044ffdbc44cffddc650ffddc650ffdbc54cffaac97eff3ac2b4ff3ac2b7ff35c5b9ff13aba2ff02958eff009086ff00928fff0083b6ff0272afff36beb6ff37c1b4ff39c2b5ff3bc3b8ff3bc3b6ff3dc3b6ff3ec4b7ff3ec4b7ff41c5b6ff41c5b6ff44c5baff44c5baff46c6bcff46c6bbff47c6b9ff48c7baff4bc8bbff4bc8bbffe5c853ffe0c854ffe1c956ffe0c956ffe0cb59ffe0cb59ffe0cb59ffe0cb59ffe1cc5affe2c958ffb19925ff75000fff77000fff39272cff017470ff007772ff027974ff03807aff009187ff1bada4ff4cccc4ff4fc8beff53c8bfff57c7beff5fc5bdff6ac9c1ff7ad5ceff4ac7b8ff43c6b7ff34c2b7ff27b1c8ff32b2dcff35b3daff35b3daff36b3d8ff36b3d8ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff3bb4daff3bb4daff3bb4daff3bb4d9ff3bb5d8ff3ab6d9ff3cb6d9ff5cbed5ff51c6bbff48c9b9ff45c7b9ff3cc5b5ff39c3b3ff3cc2b3ff3bc3b4ff37c1b2ff32b3c2ff0061a1ff0163a3ff0165a6ff3ba3b4ff3ca3b4ff3ca3b4ff3ca3b4ff44a3b6ff3da4b3ff1d90b2ff007ab4ff0179b4ff0179b4ff0179b4ff017ab4ff007ab4ff007ab4ff007ab4ff017bb6ff017bb6ff005e73ff00617aff05b0bbff09b1bbff0eb1beff10b0beff11b2bfff14b2beff15b4bfff17b3bfff1ab4c0ff1cb5c1ff1db4bfff20b5c0ff20b5c0ff27b6c1ff27b6c0ff02abb3ffe6cd5affe3ce5effe2cc5effdfca53ffdec953ffddc650ffa08216ff471a5fff0065a1ff0068a4ff0070abff0385c0ff0194c9ff04a1cdff16a8d9ff0077aaff38c0b3ff39c2b7ff3ac3b8ff3bc3b6ff3bc3b6ff3dc4b7ff3dc4b7ff3ec4b7ff40c5b8ff41c5b6ff43c6b7ff44c5b8ff46c6b9ff46c6b9ff47c8baff48c7b8ff81c697ffe0c854ffe0c854ffe0c854ffdfc854ffdfca56ffe0cb57ffe0cb59ffe0cb59ffe2cc5affb69929ffbb9830ff73000fff75000fff352329ff017470ff027674ff027874ff34bdb3ff45c5b8ff49c5b9ff4bc6baff4ec7bbff50c8bcff50c9bdff56c9beff57c9beff5bc9beff5ccbbfff70cec6ff52c9bcff45c8baff38c1b4ff2fb3beff36b4d9ff36b2d9ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff38b4d9ff38b4daff3ab4daff3ab5daff3ab4dbff52c2ccff5ecac0ff60c9bfff61cbc0ff62cbc0ff77d7cfff53cabcff4ac8b9ff41c4b5ff3cc2b3ff37c1b2ff32b3c2ff0061a1ff0263a3ff0164a4ff3aa2b3ff3ca3b4ff3ca3b4ff3ca3b4ff3ca3b4ff4fb2c2ff1e8fb2ff0179b4ff0179b4ff0179b4ff0179b4ff0179b4ff0179b4ff0179b4ff007ab4ff017bb6ff017bb6ff025b6fff03aebbff02aebbff06b0bcff09b1bcff0eb1beff10b0beff13b1bdff14b2beff15b4bfff1ab4c0ff1ab4c0ff1db4bfff20b5c0ff20b5c1ff21b5c1ff29b6c1ff05b0b6ffe4cb56ffe0cb57ffe1cc5affe1cc5effe8d169ffe1c953ffa2841bff471a5fff0265a5ff0067a7ff0076b3ff27aedcff38b8deff40b7dcff4bbbe1ff4cbee3ff0792b4ff39c1b2ff39c2b5ff3ac2b5ff3bc3b6ff3bc3b6ff3bc3b6ff3ec4b7ff40c5b8ff41c5b6ff41c5b6ff44c5b7ff44c5b7ff46c6b9ff46c6b9ff5ac5aeffdfc74fffe0c854ffe0c854ffe0c854ffdfc854ffdfca56ffe0cb57ffe0cb59ffe1ca57ffc1a636ffb59828ff8b391bff74000fff75000fff352329ff017470ff007570ff43c5baff44c5b7ff45c5b7ff49c5b9ff4ac6baff4ec7bbff4fc7bbff50c8bcff53c8bdff56c9beff58c9bcff59cabeff5ccabfff61ccc1ff57cfc1ff40c6b7ff2bb0a4ff00716dff027674ff00797aff32b9baff45c0c7ff40bbc9ff41bbc9ff49c2cfff51c7cdff55c9bfff5ac9baff5bc9beff5dc9beff5dc9beff5ecabfff5ecabfff60c9bfff61cbc0ff62cac0ff69d1c7ff51c9bdff41c4b6ff37c1b2ff33b4c0ff0061a1ff0263a3ff0164a4ff3aa2b3ff3aa2b3ff3ca3b4ff3ca3b4ff3ca3b4ff3da2b4ff2293b4ff007ab4ff0179b4ff0179b4ff0179b4ff017ab4ff007ab4ff007ab4ff007ab4ff017bb6ff017bb6ff016e82ff02aebbff00afbbff03afbcff06b0bdff0bb0bcff0eb1bdff11b2bfff12b3c0ff15b4bfff18b3bfff18b4c0ff1cb3c0ff1db4bfff1eb6c0ff21b6c1ff21b6c1ff23b9c2ffe2ca55ffe2ca57ffe2cc58ffe1cc58ffe1cc5affe7d160ffa78a1bff471a5cff0363a1ff2eb2e0ff32b3d7ff36b4d9ff39b5daff3ab6dcff3bb7dbff3eb8dcff42b8dbff4abfdfff3ac2b7ff3ac2b6ff3ac2b5ff3bc3b6ff3bc3b6ff3ec4b7ff3ec4b7ff41c4b8ff41c4b8ff41c5b6ff41c5b6ff44c5baff9dca87ffe1c650ffdec751ffdec751ffe0c852ffe0c854ffe1c956ffe1c956ffe1c956ffe1c956ffe1c954ffb59826ffb89729ff73000fff73000fff75000fff38252bff00726bff41c4b6ff40c4b5ff44c5b7ff44c5b7ff47c6b9ff47c6b9ff4bc6baff4dc7bbff4ec8bcff50c8bcff51c9bdff56c9beff58c8beff59cabeff59cabeff5ccbbdff50cbbcff2cb0a8ff03716fff007671ff42c7bbff4cc6baff4cc6baff4dc7bbff4fc6bbff51c6bbff53c7bcff56c7bdff57c7bdff58c8beff5bc9bdff5bc9beff5bc9beff5bc9beff5ecabfff5ecabfff60c9bfff60c9bfff60ccc1ff53ccbeff3ec1b3ff36b4c3ff0061a1ff0163a3ff0165a6ff3aa2b3ff3aa2b3ff3ca3b4ff3ca3b4ff3ca3b4ff3ca3b4ff2da7c8ff0591c6ff017bb6ff0179b4ff0179b4ff017ab4ff007ab4ff007ab4ff007ab4ff007ab4ff017bb6ff15a8b9ff00afbcff00afbbff03afbcff06b0bdff08b0bbff0bb0bcff0eb1beff11b2bfff14b2beff18b3bfff17b3bfff19b2bfff1cb5c1ff1db4c1ff20b5c0ff1eb6c0ff2fb6baffe2c956ffe2ca57ffe1cb57ffe0cb57ffe0cb59ffe0cb59ffcbae41ff471a5fff2eaedaff2eb0d7ff31b1d7ff36b4d9ff38b4d9ff39b5daff3ab6d9ff3eb8dcff41b9ddff44b9dbff38b8d9ff5e0e3eff4ebeb8ff38c4b6ff3ec2b5ff3ec4b7ff3ec4b7ff40c3b7ff3dc5b7ff3fc4b5ffa7c882ffe0c551ffddc64effddc650ffdec751ffdec751ffe0c852ffe0c854ffe0c854ffe0c854ffe1c956ffe1c956ffe1c752ffb39924ff6a020aff73000fff73000fff75000fff36252aff3ec4baff40c3b5ff40c3b5ff43c4b6ff43c4b6ff46c5b7ff47c6b9ff47c6b9ff4ac6baff4cc6bbff50c8bcff50c8bcff53c8bdff56c9beff56c9beff56c9beff59cabeff58c9bcff30b4abff01706eff42c6baff47c5b7ff4bc5b9ff4cc6baff4cc6baff4dc6baff4fc7bbff50c6bbff53c7bcff55c8bdff55c8bdff58c9bcff58c9bcff5bc9beff5bc9beff5bc9beff5bc9beff5dc9beff5ecabfff5ecabfff5ecdc0ff49c9bcff38b4c5ff0061a1ff0163a3ff0165a6ff37a1b2ff3aa2b3ff3aa2b3ff3ca3b4ff3ca3b4ff3ca3b4ff33b1d6ff33b3d9ff30b2dcff0b95c7ff007eb9ff027ab7ff0179b6ff007ab6ff0179b4ff037bb3ff007bb4ff0aa8bcff01adbaff00afbbff02aebbff05afbcff06b0bbff09b1bcff0bb0bcff0eb1beff11b2bdff14b2beff16b2beff17b3bfff1ab4c0ff1db4c1ff1db4bfff1eb5c2ff61b698ffe1c854ffe1c956ffe2ca57ffe2ca57ffe0cb59ffe0cb59ffd9bf4aff5e0f53ff27afd6ff2cb1d9ff2db2d8ff33b3daff35b3d8ff37b5daff3ab6dcff3bb7ddff3eb8dcff3fb9ddff43bce0ff80003fff80003fff880245ffcb196fffdc277dffdc297fffe0287effe32982ffe12a85ffbd1161ffdec652ffdbc651ffdbc651ffdbc651ffdec751ffe0c852ffe0c852ffe0c853ffe0c854ffe1c854ffe1c956ffdec856ff6a0207ff70010dff73000fff73000fff75000fff411e25ff3cc3b4ff3dc3b6ff3ec4b7ff41c5b6ff43c4b6ff43c4b6ff44c5b7ff47c6b9ff49c7baff4cc7bbff4fc7bbff4fc7bbff50c8bcff52c7bcff53c8bdff54cabeff56c9beff56c9beff32ada4ff108e86ff44c5b7ff46c5b7ff49c5b9ff49c5b9ff4cc6baff4cc6baff4cc6baff4ec7bbff50c8bcff52c7bcff52c7bcff55c8bdff55c8bdff58c9bcff58c9bcff58c9bcff58c9bcff5bc9beff5bc9beff5bc9beff5bc9beff59cfc1ff35b5c1ff0061a1ff0163a3ff0165a6ff37a1b2ff3aa2b3ff3aa2b3ff3aa2b3ff3ca3b4ff3da1afff34b5dbff33b3daff33b3daff33b3dcff33b4dbff33b4dbff30b5deff2fb4dcff33b5daff35b4daff37b4d9ff2eb6d4ff01adbbff01afbbff00afbbff02b0bcff03afbbff06b0bcff08b0bbff0bb0bcff0fb2bdff13b1bdff14b2beff15b4bfff18b3bfff1ab4c0ff1cb3beff1db4bfffd8ca62ffe3ca56ffe1c956ffe2ca57ffe2ca57ffe0cb59ffe0cb59ffdac24eff7f0446ff27afd6ff29aed6ff2cb1d7ff30b1d8ff33b2d7ff36b4daff3ab6dcff3bb7ddff3db7dbff3eb8dcff46b7dbff7f0041ff8b0045ffdf2680ffe0267effe02680ffe12781ffe02982ffe02982ffe12a81ffe12a81ffe22b84ffd23370ffe8c25effe0c74fffe0c653ffdec751ffdec751ffdec752ffdec954ffe7c762ff5e0a00ff6b0010ff730011ff72000fff73000fff75000fff75000fff610616ff3bc2b7ff3dc3b6ff3dc3b6ff40c3b5ff43c4b6ff43c4b6ff44c5b7ff47c6b8ff47c6b9ff48c6baff4dc7bbff4dc7bbff4ec8bcff50c8bcff50c8bcff51c9bdff53c8bdff54cabeff1d847fff43c4bbff43c4b6ff46c5b7ff48c4b7ff48c4b7ff4bc5b9ff4cc6baff4cc6baff4ec6baff4fc7bbff50c6bbff52c7bcff53c8bdff53c8bdff55c8bdff55c8bdff55c8bdff56c9beff58c9bcff58c9bcff59cabeff58c9bcff58cabeff40b7c4ff0160a1ff0163a3ff0165a6ff37a1b2ff37a1b2ff37a1b2ff3aa2b3ff3aa2b3ff37a8c0ff33b3daff33b3daff33b3daff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4dbff04abbdff01adbaff00adbaff00afbbff03afbcff05b0bdff07afbaff0bb0bcff0db1beff11b2bfff13b1bdff14b2beff17b3bfff1ab4c0ff1cb3beff2fafadffe0c652ffe0c854ffe1c956ffe1c956ffe2ca57ffe2ca57ffe0cb57ffecbc79ff8c0044ff1faed4ff28add5ff2bb0d8ff2cb1d9ff2fb2d8ff32b2dbff34b5dbff38b6dbff3ab6dcff3cb7ddff606394ff860044ffde237effdf247fffe02680ffe02680ffe02680ffdf2781ffe02982ffe12a84ffe12a84ffe22b83ffe42c84ffe42c84ffe52d82ffeb378eff8c0245ff008280ff01857fff610009ff67000dff68000dff6a000dff770010ff880011ff830214ff76000fff76000fff750011ff39c2b5ff3cc1b5ff3bc3b6ff3ec4b7ff3ec4b7ff41c5b6ff41c5b6ff44c5b7ff45c5b7ff46c5b8ff4ac7baff4ac6baff4dc7bbff4dc7bbff50c8bcff50c8bcff50c8bcff50c8bcff445740ff43c4b8ff43c4b6ff46c5b7ff46c5b7ff46c5b7ff46c5b7ff4ac5b9ff4cc6baff4dc6baff4fc7bbff4fc7bbff4fc7bbff51c6bbff52c7bcff53c8bdff52c7bcff55c8bdff55c8bdff55c8bdff55c8bdff58c8beff58c8beff57c9bdff32a6bdff0160a1ff0163a3ff0164a6ff37a1b2ff37a1b2ff37a1b2ff3aa2b3ff3aa3b7ff32b2d7ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff35b4d9ff37b5daff03a8b9ff00adbaff00afbbff02aebbff03afbcff04aebaff08afbdff09b1bcff0eb1beff11b2beff13b1beff14b2beff17b3bfff2eb0acffdfc752ffe0c751ffe0c853ffe1c956ffe1c956ffe1c956ffe2cb55ffdfcc55ff830040ff920147ff890551ff28b1dbff29b0daff2cb1d9ff2eb0d9ff30b1daff32b2d9ff37b5daff39b5daff3cb4d7ff47365fffe0227cffdd237effdf247fffe02680ffe02680ffe02680ffdf2781ffdf2781ffe12a84ffe12a84ffe12a81ffe22b83ffe32c84ffe22d84ffa60152ff99014aff00837eff00847eff63000aff66000dff68000dff6a000dff7a0010ff8d0013ff9f0119ffa4051dff7e0010ff770011ff48beafff3ac2b5ff3bc3b6ff3dc3b6ff3ec4b7ff40c4b5ff41c5b6ff43c4b6ff45c5b7ff46c5b8ff49c5b9ff4ac6baff4ac6baff4bc8bbff4dc7bbff4ec8bcff4ec8bcff4fc8b8ff764e20ff40c3b6ff43c4b8ff45c3b6ff46c5b7ff46c5b7ff46c5b7ff46c5b7ff49c5b9ff4bc6baff4cc6baff4cc6baff4dc7bbff4fc7bbff4fc7bbff50c8bcff50c8bcff52c7bcff53c8bdff53c8bdff53c8bdff55c8bdff55c8bdff55c8bdff046794ff0361a2ff0163a3ff0164a6ff36a0b0ff37a1b2ff38a1b2ff37a2b7ff32b4daff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff39b5dbff1ab4cdff00abbcff02aebdff00afbcff02aebbff06b0bdff05b0bbff0bb0bcff0cb1beff11b3c0ff13b3bfff9ec489ffe0c552ffdec751ffdfc852ffe0c852ffe0c852ffe0c854ffe1c956ffe2ca58ff780231ff870040ff9a004effb0005cffbd0865ff8069abff25b0d0ff29b0d4ff2db1d5ff31b2d9ff33b1d6ff006682ff016b83ff4c4871ffde227dffdc227dffdd237effdf247fffdf247fffe02680ffe02680ffe12781ffe12781ffe22882ffe12a84ffe42a85ffde2680ff9f0051ffa30053ffa1014eff00827aff01857eff61010bff67000dff68000dff6e000eff860012ffa10418ffc31d2cffd32c38ffd63640ffa41422ff760413ff39c2b6ff3ac2b5ff3bc3b6ff3bc3b6ff3ec4b7ff40c3b6ff41c5b6ff42c4b6ff44c5b7ff46c6b9ff46c6b9ff47c6b9ff48c7baff4ac6baff4ac6baff4ac6bbff9a480bffa14305ff3ec4b5ff42c3b7ff43c4b6ff43c4b6ff44c5b7ff44c5b7ff44c5b7ff46c5b7ff48c6b9ff4ac6baff4ac6baff4ac6baff4dc7bbff4dc7bbff4fc7bbff4fc7bbff50c8bcff50c8bcff52c7bcff52c7bcff53c8bdff53c8bdff51c9beff005c9dff0361a2ff0163a3ff0164a5ff37a0b0ff37a1b2ff35a7c9ff2eb2d7ff30b3dbff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff37b5daff36b4d9ff36b4d9ff2bb5d3ff0eafc8ff03adbcff05aebeff06b0beff08afbeff0faac6ff02709cffdbc562ffdec64fffdec552ffdec751ffdec751ffe0c852ffe0c852ffe1c854ffc5c273ff71063dff840040ff860040ff9a004effb00059ffc10766ffcf126bffd61974ffdf1e7affde2079ff73407dff04647bff026880ff006b82ff276382ffde217cffdc227dffdd237effdd237effdf247fffe02680ffe02680ffe12781ffe12781ffe02982ffe02982ffe12a84ffa40054ff9e0050ffa10151ff9f014cff00827bff01857eff61010bff67000eff6b010cffbe1727ffc61b25ffc61b26ffc81c28ffc91d27ffca1e28ffcc1f2bffc41e2aff7b121fff3bc3b6ff3bc2b5ff3bc3b6ff3ec4b7ff3fc4b7ff40c3b5ff42c4b6ff43c4b6ff44c5b7ff44c5b7ff47c6b9ff47c6b9ff48c7baff47c7baffa96824ff9e4403ffa04304ff43c2b6ff41c3b7ff43c4b6ff43c4b6ff43c4b6ff43c4b6ff44c5b7ff46c5b7ff47c5b7ff49c5b9ff49c5b9ff4ac6baff4cc6baff4cc6baff4cc6baff4dc7bbff4dc7bbff4dc7bbff4fc7bbff50c8bcff50c8bcff50c8bcff50c8bfff045a9fff0160a1ff0263a2ff0064a3ff30b1d0ff2eb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff34b5d9ff35b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff0180b7ff028fc6ff019dcdff06a5d4ff0692c7ff006facff016ca7ff0369a3ff770c34ff436a4bff587a4eff366b58ff0a6b7eff006e84ff026e85ff6c033fff820042ff870040ff9a004effad005cffc10766ffcf126effd71b76ffdc1f7affdd2179ff704077ff01637dff016880ff006b82ff046f84ffda217bffdc227dffdc227dffdd237effdf247fffdf247fffdf247fffe02680ffdf2781ffdf2781ffe22882ffd52079ff9e0253ff9e0050ffa00050ff584268ff00837cff00857dff5f000aff77000cffc11825ffc61824ffc71925ffc61b24ffc81c26ffc91d27ffca1e28ffcb1f29ffcb1f29ffcc222bffc41e25ff59b6a7ff3bc3b6ff3cc3b6ff3dc2b8ff3ec4b7ff3fc4b7ff40c4b5ff41c5b6ff42c6b7ff45c5b9ff44c5baff59c0adffd3710dffd5730cffd27011ffa14200ff8a4711ff40c3b6ff40c3b5ff40c3b5ff41c5b6ff43c4b6ff43c4b6ff44c5b7ff45c5b7ff46c5b7ff48c6b9ff49c5b9ff49c5b9ff4ac7baff4cc6baff4cc6baff4cc6baff4dc7bbff4dc7bbff4dc7bbff4dc7bbff4ec7bbff016874ff055c9eff0060a1ff00619dff3cb5dbff30b3d7ff2fb2d7ff2fb2d8ff2eb2d8ff2fb2d8ff30b3d9ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d9ff33b4d9ff34b5daff34b5d9ff34b5d9ff35b4d9ff36b4d9ff36b4d9ff37b5dcff2ca4d8ff0081bcff018fc6ff029ccdff08a5d2ff0690c4ff006facff036ca7ff0168a2ff7f064bff01617aff00647bff006882ff016c84ff016e85ff006f86ff6c033fff820042ff870042ff9b004effad005cffc10766ffce136effd71b76ffdc1f7affdd2179ff704077ff01637dff026e85ff02778dff017086ffa23c82ffdb207affdd227dffdc227dffdd237effdd237effdf247fffe02680ffde2680ffdf2781ffe12781ffd51d77ff9c0152ff9e0050ff9e004fff007e78ff01837cff00857dff610008ffc41524ffc41521ffc51623ffc61824ffc61924ffc71b25ffc81c26ffc81c26ffca1e28ffcb1f29ffcb2028ffcb2129ffc92428ffd4232bff636244ff53bbaaff40c3b7ff3dc4b7ff3ec3b7ff41c3b6ff5abfacff8d8e5cffc66407ffd06a0cffd26e0bffd4730cffd97710ffdc7b10ffa64a01ff5e9578ff43c4b6ff40c3b6ff41c4b7ff42c4b6ff42c4b6ff43c4b6ff44c5b8ff44c5b8ff45c5b7ff46c5b7ff47c6b9ff47c6b9ff49c7baff49c7baff4ac6baff4bc8bbff4dc7bbff4dc7bbff4dc7bcff40b6b3ff006877ff045a9bff005f9eff3bb6e2ff3bb4daff008275ff2fb0d6ff30b1d6ff2eb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff33b3daff34b5d9ff34b5d9ff34b5d9ff35b4d9ff37b5daff2fa3d4ff0170aeff0081bcff0090c6ff029ccdff08a5d2ff058fc3ff006facff006ca8ff0168a2ff7c0648ff026279ff00647bff01687fff016c84ff026f86ff007088ff6c033fff820042ff870043ff9b004effaf005cffc30867ffcd136effd71b76ffdc1f7affdd2179ff704077ff01637dff016e85ff038395ff0493a4ff018397ffc92679ffdb207cffdb217cffdc227dffdd237effde237effdf257fffdf257fffdf257fffe12781ffe02680ffa00052ffa10050ff107676ff007d78ff01837cff00867effb01221ffc21423ffc41522ffc51623ffc61824ffc71925ffc81a27ffc61b24ffc81c26ffc91d27ffca1e28ffca1e28ffcb1f29ffcc212affcb2029ff8f3a03ff8e3c05ff8f3d04ff9c4203ffa64b05ffb15307ffb95908ffc05f07ffc56409ffcc6a08ffd16f0affd5740dffd8780fffdc7b0fffdc7d0fffd47214ff659275ff3fc4b7ff3fc4b7ff3fc4b5ff40c3b4ff43c4b6ff43c4b8ff44c5b8ff44c5b7ff44c5b7ff46c5b8ff46c5b8ff46c5b8ff46c5b8ff48c6b9ff49c7baff4bc6baff4cc6bdff33a8a7ff006a7bff016779ff04599bff0f80b4ff3bb4daff3ab3d9ff36c4b5ff08998bff23adc6ff2eb2d6ff2fb2d7ff2fb2d8ff30b3d9ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff34b5daff33b5dbff34b5d9ff026ea5ff0068a8ff0170afff0081bcff0090c6ff029ccdff08a5d2ff0690c4ff006facff006ca8ff0168a0ff7c0648ff026279ff00647bff01687fff006b83ff026f86ff007088ff6d0340ff830042ff870042ff9c014fffad005cffc10766ffcd136effd71b76ffdc1f7affdd2179ff704075ff01637dff006d84ff028295ff0091a2ff029dadff03a5b4ff716b9dffdc217affdc227dffdd227effdc227bffdf257dffdf247fffdf247fffdf2680ffdc257dffaf0f5fff007672ff027974ff017d77ff01837cff00847dffc71121ffc11322ffc31523ffc51623ffc51623ffc61824ffc71925ffc51925ffc61b26ffc81c26ffc91d27ffc91d27ffca1e28ffcb1f29ffcb1f29ff8c3b02ff8f3c03ff913b03ff9a4204ffa74c06ffb45606ffbc5d09ffc7660effcd6c10ffd2710fffd57510ffd77810ffd8790fffdc7b10ffdc7d11ffde7f11ffdf8015ffb2681bff40c4b9ff3ec2b6ff40c3b5ff42c4b6ff42c4b7ff42c4b6ff43c4b6ff44c5b7ff45c5b7ff45c5b7ff45c5b7ff45c5b8ff47c6b7ff46c6b9ff47c7bbff006e7aff016b7eff006a7dff016779ff025899ff39b3daff39b3d8ff39b3d8ff39c2b5ff37c3b5ff36c0b2ff32c0b3ff31b0d1ff31b1daff31b1d8ff2db2d8ff2fb1daff30b3d9ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff32b3daff31b4daff32b4d9ff6b8e91ff25577fff0266a5ff0067a9ff0170afff0081bcff0090c6ff029ccdff08a5d2ff0591c4ff016eabff006ca8ff01699fff7c0648ff026279ff00647bff01687fff006b83ff026f86ff007088ff6c033fff830042ff870042ff9c014fffad005cffc10766ffcd136effd81c77ffdc1f7affdd2179ff704175ff01637dff006d84ff028295ff0091a2ff029dadff02a7b5ff02abb9ff00afb9ff2ca1b8ffab388dffd4247affdb2480ffd7257fffc42f86ff655ba3ff0771aeff026e83ff017674ff007a74ff017c77ff02827aff00847dffa91928ffc01220ffc11322ffc21421ffc41522ffc51623ffc61824ffc51925ffc61b27ffc71b26ffc81c26ffc81c26ffc91d27ffca1e28ffcb1e2cff8d3c04ff8f3c03ff953d04ffa54907ffb55607ffc0600bffcb6b0dffd17315ffd97c19ffd97f18ffdf821bffe08213ffe08317ffdf8414ffe08414ffdf8213ffdf8213ffdf8215ffde8114ffcd8424ff46c1b8ff41c5b7ff3fc3b6ff40c3b5ff43c4b8ff44c4b8ff44c4b8ff44c4b7ff44c5b7ff46c6b9ff40c5bbff05a4afff00a9b8ff03abb9ff016c7fff006a7bff016779ff005792ff35b3d6ff38b2d6ff39b3d9ff39c2b5ff38c3b5ff37c1b4ff33c1b1ff037777ff0367a9ff594e47ff42aeceff31b2dbff2eb3dbff2eb1daff33b2dcff32b3dcff31b2dbff2fb3dcff38b2ddff61abc2ff88491eff9e4304ff9d4104ff275781ff0266a5ff0068a6ff0170afff0081bcff0090c6ff029ccdff08a5d2ff0fa1d2ff026facff006ca8ff0168a0ff7c0648ff026279ff00647bff01687fff006b83ff026f86ff007088ff6d0340ff830042ff860143ff9b014fffad005cffc30867ffcd136effd71b76ffdc1f7affdd2179ff704074ff01637dff016e85ff008295ff0392a3ff009dacff04a6b5ff02abb7ff00afb9ff01acb8ff016aabff016dadff006faeff0270aeff0072b1ff0172afff0172afff006e7eff007774ff027974ff02847fff008c83ff00847eff237d77ffc01220ffc01220ffc21423ffc41524ffc51623ffc61824ffc61824ffc71925ffc61824ffc71925ffc91b26ffc91b26ffc91b26ffa92c14ff8d3b04ff903d05ffa14606ffb95c08ffe3881fffe3881effe3881effe48920ffe4891effe48a1effe4891effe38b20ffe18e2dfffcae55ffe79022ffe38a16ffe08715ffdf8213ffdf8215ffde8116ff065870ff025c75ff026279ff006575ff006c7aff067a87ff05818eff008292ff008ea1ff0296a9ff009eafff01a4b3ff01a9b4ff02acb7ff07a4b2ff006b7bff006878ff00538bff37b2d8ff36b3d8ff38b4d9ff39c2b5ff38c1b4ff36c2b4ff31c0b1ff037777ff0267a7ff883806ff8d3d09ff8f3d07ff8f3d02ff9d4604ffaf5004ffbb5a09ffc46107ffcd6b0dffa64a05ff9f4506ff9e4406ff9b4305ff9a4204ff275680ff0266a5ff0068a6ff0170afff0081bcff0090c6ff029ccdff08a5d2ff1cacdaff036faaff006ca8ff0168a2ff7c0648ff026279ff00647bff01687fff006b83ff026f86ff007086ff6c033fff830042ff850042ff9a014fffad005cffc30867ffce146fffd71b76ffdd207bffdd2179ff714074ff01637dff016e85ff008295ff0392a3ff019dacff01a7b5ff02abb7ff00afb9ff00acb9ff016aa9ff006eadff006faeff0270afff0172b1ff0172afff0172afff006d7dff007774ff027974ff00837eff01998fff03a89cff059e94ff84535dffbf1120ffc11322ffc21423ffc31421ffc41522ffc41522ffc51723ffc61824ffc61924ffc81a23ffc91b25ffbf211fff8b3904ff8e3a05ffa44c00ffe28519ffe3871cffe2871cffe3881dffe3881dffe3881dffe4891effe4891effe4891effe4891effe38b20ffe38b20ffe28b21ffe69228ffe68e1affe38915ffde8414ffde8116ff055872ff035d76ff026279ff00647bff00667aff006e83ff00798eff02869aff008ea1ff0097a9ff009eaeff01a4b3ff01a9b4ff02acb7ff01adb8ff048899ff026778ff005482ff36b3d8ff36b3d8ff38b4d9ff39c2b5ff39c2b5ff36c2b4ff33c1b3ff037777ff0666a5ff8a3a07ff8f3d07ff8f3d07ff903d02ff9e4705ffae5104ffba5b07ffc36207ffcd6b0cffa64a04ff9f4505ff9e4406ff9b4305ff9a4204ff275680ff0266a5ff0068a6ff0170afff0081bcff0090c6ff029ccdff07a4d2ff1eabd7ff0076acff006da6ff0168a0ff7f064aff016279ff00647bff01687fff006b83ff026f86ff007088ff6a043eff830042ff830042ff9b0151ffb1005bffc10965ffcd1370ffd61977ffdc1f7affdd2179ff714276ff01637dff036f86ff018599ff0495a8ff02a1b1ff01a8b6ff01adbaff01adbaff02adbaff006aa9ff006dadff006faeff0270afff0172afff0172afff0172afff006d7dff007774ff007977ff008a82ff05a096ff2cbaafff46c5bcff3fbfb6ff489c92ffc51221ffc1111fffc31421ffc11521ffc31421ffc51623ffc31723ffc61623ffc81925ff9f2a18ff893705ff8c3905ffda7f1cffe08619ffe08619ffe08619ffe2871affe2871cffe3881dffe3881dffe3881dffe4891effe4891effe4891effe58b20ffe38b20ffe38b20ffe38b20ffe38b20ffed9523ffe28919ffde8114ff055973ff055e75ff026279ff01647bff03657dff006e87ff007b90ff01869aff0090a1ff0099a8ff009faeff00a3b2ff00a7b5ff01aab8ff01adb8ff02aeb9ff02697cff005c6fff35b3daff36b3d8ff36b3d8ff39c2b5ff39c2b5ff36c2b4ff33c1b3ff037777ff0467a5ff8a3a07ff8f3d07ff8f3d07ff903d02ff9e4705ffad5204ffb95b07ffc26207ffcc6a0affa54902ff9f4505ff9e4406ff9b4305ff9a4204ff275680ff0066a5ff0068a6ff0170afff0081bcff0090c6ff029ccdff07a4d2ff1eabd6ff24aed8ff006fa7ff0467a0ff7f064aff016279ff00647bff00677dff006b82ff026f86ff007086ff69043fff830042ff840042ff9e0252ffb4005cffc60c69ffd21671ffd91d78ffdc1f7affdb2179ff704278ff02657eff03778cff038d9eff10a2b2ff12acbaff08abb7ff08b0bbff06b0bbff02adb9ff026cabff006eadff006faeff0071afff0172afff0172afff0172afff006d7dff007573ff199e96ff42c4bbff45c5baff47c7baff4bc8bbff4fc9bdff53cabeff6ad1c9ff54c2b2ff946469ffb51915ffbb161bffb8191affb63719ffb87b2aff02627aff6f3812ff883705ffd98019ffe08619ffe08619ffe08619ffe08619ffe2871affe2871cffe3881dffe3881dffe3881dffe4891effe4891effe4891effe4891effe28a1effe38b20ffe38b20ffe38b20ffe38b20ffed9424ffe08416ff06576eff055e75ff026279ff00647bff00657dff00738aff008196ff018da1ff0099aaff019fafff02a6b7ff02a9baff01aab8ff01adb8ff01adbaff04aeb9ff09abb5ff005b70ff35b3daff36b3d8ff36b3d8ff39c2b5ff39c2b5ff37c1b4ff33bfb4ff03787bff0467a5ff8a3a07ff8f3d07ff8f3d07ff903d03ff9e4705ffac5104ffb95b07ffc26207ffcc6a0affa64a03ff9f4505ff9c4504ff9b4305ff9a4204ff275680ff0266a5ff0068a6ff0170afff0081bcff008fc5ff029ccdff08a5d2ff1eabd6ff26b0d7ff047eb3ff05679fff86064bff006278ff00657cff016a7fff016e83ff007187ff007287ff6a0640ff830042ff890045ffa90055ffd41e78ffea328cffea388fffda217affdf267effdd247cff6a4476ff068a9bff12b1bdff18b1beff1db4bfff23b6c1ff26b6c1ff36b7c3ff24b5bfff04aebaff026dacff067bb9ff017ab5ff0071afff0172b0ff0172afff0172afff006d7dff2fb7b0ff3bc3b6ff3ec4b7ff41c4b8ff46c6baff49c7baff4ec8bcff50c9bdff54cabeff57c9bfff3dc4b8ffaa8d20ffab8c1fffa8891cffa7881dffa38419ff04617bff703714ff9c4500ffdf8518ffe18418ffdf8518ffe08619ffe08619ffe1861affe2871affe2871affe3881dffe3881dffe3881dffe3881dffe4891effe4891effe4891effe4891effe58b20ffe58b20ffe38b20ffe48c21ffe58b1cff05586fff055e75ff006178ff00647bff026981ff007e90ff0d9aa7ff2ab5c3ff33b7c4ff37b7c5ff48b7c7ff62d2dfff1eb4beff16b4bfff0eb1bdff02b0bbff02aeb7ff005e73ff086783ff32b2d9ff35b3daff39c2b5ff39c2b5ff37c1b4ff33bfb4ff03787bff0467a5ff8a3a07ff8f3d07ff8f3d07ff903d03ff9e4707ffab5003ffb95b07ffc26207ffcd6b0cffa64a03ff9f4505ff9c4504ff9b4305ff9a4204ff275680ff0266a5ff0068a6ff0170afff0081bcff008fc5ff039dceff08a5d2ff1eabd6ff26afd6ff26b1d9ff0469a3ff8c074dff006278ff01647bff006c81ff02768cff047b8fff047b8fff6c0540ff850042ffdc277effdf2680ffe12781ffe32984ffe22b85ffe52d87ffe13486ffe32980ff766997ff04aebdff0bb0bcff14b2bfff1ab4beff20b5c0ff25b5c0ff29b7c2ff2ab8c3ff12b3bfff006faeff027fbbff018cc5ff0795caff0075b1ff0175b1ff0275b1ff026d84ff35c0b6ff3bc3b6ff3dc4b7ff3ec4b7ff43c5b9ff46c6b9ff4ac7baff4dc9bcff50c8bcff52cabeff53cbbfffac8f21ffaa8b1effa8891cffa7881dffa38419ff04617bff6f3716ffe18616ffdf8518ffe18418ffdf8518ffe08619ffe08619ffe1861affe2871affe2871affe3881bffe3881bffe3881dffe3881dffe4891effe4891effe4891effe4891effe4891effe58b20ffe38b20ffe48c21ffe99123ff06576dff055e75ff006178ff006379ff1dafbbff22b3bfff23b4beff25b4beff26b5bfff29b6c1ff2eb6c2ff2eb6c2ff2eb6c0ff34b8c0ff34bcc6ff1bb5bfff03afb8ff0b7d8eff005668ff32b0d6ff35b3d9ff39c2b5ff39c2b5ff37c1b4ff34c1b3ff04787cff0467a5ff8a3a07ff8f3d09ff8f3d09ff8f3d05ff9d4604ffad5205ffba5b09ffc8670cffd06d10ffa74b06ffa04606ff9e4405ff9d4406ff9a4205ff25557fff0266a5ff0068a6ff0170afff0081bcff008fc5ff029ccbff08a5d0ff1eabd6ff26afd6ff29b0d8ff0073a4ff8c054cff006278ff027489ff02778cff01778cff00798dff00798dff670742ffde217effdd227dffde237effe02680ffe22882ffe42a85ffe52c86ffe52d87ffe73089ff6f709cff01adbaff05afbaff0cb0bcff17b3bfff1db3c0ff21b6c1ff22b6c0ff28b9c3ff28b9c5ff0079b8ff068dc2ff2db0dbff3ab9e0ff3cb8e2ff0482bbff0982bdff00799dff33bfb4ff39c2b5ff3bc3b6ff3ec4b7ff40c3b7ff44c5b7ff48c7baff4ac8bbff4bc8bbff4dc9bcff5ec8b3ffd7bb44ffab8c1effa8891cffa7881dffa38419ff02607aff683b1dffdf8215ffe18418ffe18418ffe18418ffe28619ffe08619ffe08619ffe08619ffe08619ffe2871affe2871affe2871cffe3881dffe3881dffe4891effe4891effe4891effe4891effe4891effe4891effe4891effe68c21ff055870ff055e75ff006379ff18b1bcff1eb1bdff1fb2beff21b2beff22b3bfff25b4c0ff27b5c2ff29b6c1ff29b6c1ff2cb6c2ff2db7c3ff2fb7c1ff35bec8ff1ab3beff087e8fff025567ff3f5c2aff31b3dbff39c2b5ff39c2b5ff37c1b4ff34c1b3ff03787cff0467a5ff8a3a07ff8d3c08ff8f3d07ff923e06ffa84c07ffba5b07ffc76508ffd3710effd77813ffa84c0affa44a0affa14807ff9d4404ff9a4202ff275680ff0266a5ff0068a6ff0170afff0081bcff008fc5ff029ccbff08a5d0ff1eabd6ff26afd6ff2ab1d9ff26a9d7ff90034fff01abb6ff008296ff02778cff01778cff02778cff01778cff7b2862ffdb1e7bffda207affdc227dffdf247fffe02680ffe22883ffe42a85ffe52d87ffe62e88ff5694b2ff01adbaff01adbaff05afbaff0eb1beff17b2bfff1cb3bfff20b5bfff24b7c1ff2cb7c9ff33b3d9ff36b4d9ff37b5daff39b5daff3ab6dcff27add8ff007db7ff007eb8ff30bfb2ff33bfb4ff39c2b5ff3bc2b5ff3dc3b6ff41c5b6ff44c7b9ff46c8baff48c7baff4ac8bbff95bc77ffd5ba3effd9c049ffa98c1cffa5891dffa1841bff02607aff474d44ffe08316ffe18418ffe18418ffe18418ffe18518ffe08619ffe08619ffe08619ffe08619ffe2871affe2871affe3881bffe2871affe3881dffe3881dffe4891effe4891effe4891effe4891effe4891effe4891effe58b20ff005971ff045d76ff15b0bdff18b1bcff1bb1bcff1cb2bdff1fb2beff20b3bfff22b3bfff25b4c0ff28b4bfff28b4bfff2bb5c1ff2cb6c2ff2cb6c2ff2eb7c3ff35becaff097f90ff025567ff405c29ff977b17ff39c2b5ff39c2b5ff37c1b4ff34c1b3ff01777aff0267a5ff883a07ff8d3d09ff903e08ff9f4604ffcd720fffe28618ffe48817ffe38718ffc0630affa84d04ffa94e08ffb15610ffa34905ff9f4505ff29557aff0266a5ff0068a6ff0170afff0081bcff008fc5ff029ccdff08a5d2ff1eabd6ff26afd6ff29b0d8ff23add2ffe32780ff00acb9ff00acb9ff069bacff01778eff02778cff03768cff60628effd81c77ffd91f79ffdb217bffdd237effe02680ffe12781ffe22883ffe42a85ffe52c86ff259eadff00aab8ff00acbbff01adbaff08afbdff0eb1bfff15b2beff1bb3c0ff1fb4bfff2db4d5ff33b3daff36b4daff36b4d9ff37b5daff37b5daff39b5dbff32b5dbff0488c1ff1da4b5ff31c0b2ff35c0b5ff38c1b4ff3ac3b6ff3dc4b7ff41c6b8ff45c6b9ff46c6baff4fc5b7ffcdb238ffd6bb41ffd9c048ffdec34dffa88c1effa3861eff03617bff0d5e75ffe08317ffe08316ffe08316ffe08316ffdf8518ffdf8518ffdf8519ffe08619ffe08619ffe08619ffe08619ffe2871affe2871affe3881bffe3881bffe3881bffe3881bffe48a1cffe48a1cffe4891effe4891effe18a1eff025972ff0f94a6ff0faebbff15b0bdff18b0bdff19b1beff1cb2bdff1db3beff1fb2beff22b3bfff25b4c0ff26b5c1ff28b4bfff29b6c1ff29b6c1ff29b6c1ff2db7c5ff087b8cff025568ff3e5b25ff957a19ff3ac2b3ff3ac2b4ff37c1b4ff34c1b3ff01787aff0267a5ff883a07ff8c3c08ffc66d18ffe18514ffdf8518ffe28617ffd97c17ffab4d07ffa84c06ffa94e07ffa94e07ffaa4f08ffa94f06ffb65d18ff2b567cff0066a5ff0068a6ff006faeff0081bcff0090c6ff029ccdff08a5d2ff1eabd6ff26b0d7ff29b0d8ff25add2ffe0257eff00abb7ff00acb8ff00aeb8ff00afbbff09b1bdff10b2bfff18b4c0ffd71975ffd71e78ffda207affdb217bffdd237effdf247fffe12781ffe22882ffe32c84ff6a013eff2aa2b5ff00abb7ff01adbaff03adbaff08b0bdff0eb1bcff17b1c0ff27b4d0ff30b3d7ff33b3daff35b3d9ff36b4d9ff37b5daff37b5daff3ab6dcff3bb7ddff3bb7dbff3eb8dcff3cbad1ff36bfb3ff36c0b3ff39c2b4ff3bc3b6ff3ec5b7ff3fc5b7ff6bb988ffc3a731ffcdb239ffd6bb41ffd9c048ffdec44dffe1c54fffa3861aff03617bff006a81ffe08317ffe08316ffe08316ffe08316ffdf8518ffdf8518ffdf8519ffe08619ffe08619ffe08619ffe08619ffe2871affe2871affe3881bffe2871affe3881bffe3881bffe3881bffe48a1cffe4891effe5891eff8d815bff025b70ff09aeb9ff0cafbbff10b1bcff14b1bdff17b0bdff1ab1bdff1cb2bdff1eb1bdff21b2beff22b3bfff23b4c0ff25b4beff26b5bfff27b6c0ff28b6c1ff28b5c3ff016074ff025568ff3e5b25ff957a19ff44c6b6ff3bc3b6ff38c1b4ff34c1b3ff03807eff0068a5ff893808ffd98122ffe18516ffe18516ffe18516ffd87c15ffa94c07ffa84c06ffa84c06ffa94e07ffa94e07ffa94e05ffaa4f06ffaa4f07ff30597dff0065a4ff0068a6ff016faeff0286bfff0093c8ff039fceff17a8d5ff20acd7ff27afd7ff27b0d8ff23add3ffdf267eff547ea2ff01aab8ff01adbaff00adbaff02aeb9ff0db0bdff13b1bdff16b4bcffc22474ffdc1e79ffdc1f7affdd207bffde237effe02680ffce2a7cff64003cff720044ff80014cff8e014fff5c2c69ff4f6f9cff526091ff65513eff2cb0d8ff2eb2d9ff2fb2d6ff32b2d9ff33b3daff33b3daff36b4d9ff37b5daff39b5daff3ab6dcff3ab7dbff3db7dbff3bb7dbff159acaff077bafff6c0933ff857e2bff97801fffa2851dffb49724ffc4a831ffcdb238ffd5ba40ffd8bf47ffdec44dffdfc64effe0c64fff00687fff00778cff406e61ffe28117ffe28316ffe08316ffdf8316ffdf8518ffdf8518ffe08518ffe18518ffe08619ffe08619ffe08619ffe08619ffe2871affe2871affe2871affe3881bffe3881bffe3881bffe48a1cffe48a1dff005974ff015d75ff0aadb7ff08aebaff0bafbbff10b0bbff13b0bbff17b0bdff18b1beff1cb2bdff1db3beff1fb2beff20b3bfff22b3bfff23b4c0ff26b5bfff26b5bfff29b6c1ff00576cff005568ff3d5c25ff947a18ff5bcdc2ff46c7bbff39c1b2ff33c0b1ff1ca5a1ff0167a6ff9c4706ffdf8213ffe08314ffe18516ffe18516ffb55606ffa74b07ffa84c06ffa84c06ffa94e07ffa94e07ffa94e05ffaa4f06ffaa4f07ff30597dff0065a4ff0267a6ff0477b6ff048bbfff19a5d5ff2db3dbff32afd8ff31b1d6ff30b4daff2eb3d9ff24aed2ffb6085eff9d0150ff622d65ff00adb7ff00acb9ff00afbbff05afbcff0db0bcff2eaec0ff9c004eff9e0051ffa60053ffa80153ff520032ff4a012fff530134ff63003aff740044ff83004cff8c0051ff920056ff950059ff96025aff98440dff29b0d8ff2cb1d9ff2eb0d7ff2fb2d8ff30b3d9ff33b3daff35b3d8ff36b4d9ff39b5daff3ab6ddff37b7deff088abcff007eb7ff037db8ff1778b3ff87043bff997d1aff9c801cff9f821cffb49724ffc4a830ffcdb238ffd5ba40ffd8bf47ffdec44dffdfc550ffe0c44dff04a9b6ff069dabff0394a4ffc08b42ffe08316ffe08316ffdf8316ffdf8518ffe18418ffe18418ffe18418ffe08619ffe08619ffe08619ffe08619ffe2871affe3881bffe2871affe3881bffe3881bffe3881bffe4881dff13566bff016078ff04667dff007588ff06adb9ff08aebaff0bafbaff0fafbaff12b0bbff15b1bdff19b1bcff1bb2bdff1db3beff1fb4bfff20b3bfff23b4c0ff25b4beff26b5bfff26b5beff03586bff005568ff3d5c25ff947a18ff50c6b9ff5accc0ff46c7bbff33c0b1ff2db8b3ff0267a6ffdd8113ffdf8213ffe08314ffe18516ffe18516ffb35407ffa74b05ffa74b05ffa84c06ffa84c06ffa94e07ffa94e07ffaa4f07ffaa4f07ff285781ff0065a4ff168ec1ff2fb3daff37b5dcff3ab6dcff3ab6dbff3db7ddff3fb9ddff5ac3e7ff36b6d9ff25afd3ffa00050ff9b004cff9e014eff9d014dff9d004cff8d054cff91034cff9f004fffa00050ffa00050ffa00052ff9d0150ff9c014eff46032dff4a012fff500133ff63003dff750046ff84014eff8c0051ff940056ff960059ff96025aff9f4401ff29b0d8ff2bb0d8ff2eb0d9ff2fb1daff30b3d9ff32b2d9ff33b3daff33b3daff34b5daff088dc2ff007cb6ff007cb6ff007db7ff007db7ff664387ff88043aff957d1bff9c801cff9f8319ffb29622ffc4a82fffcdb238ffd5ba40ffd9c048ffdfc34dffdfc550ffdfc44cff05b0bdff09afbbff0cafbbff10b0beffa79257ffe08318ffde8418ffe08316ffe18418ffe18418ffe18418ffe18418ffe08619ffe08619ffe08619ffe08619ffe2871affe2871affe2871affe2871cffe4881eff176a78ff3a9eb3ff278b9fff086d82ff036780ff07adb9ff04aebbff07aebcff0cafbcff0fafbcff13b0bbff16b0bdff18b1beff1bb2bdff1cb3beff1cb3beff20b3bfff20b3bfff22b5c0ff005a6eff01586bff025568ff3d5a23ff94791aff46c6baff4bc6baff59cec3ff3cc3b6ff2dbbb8ff0167a8ffde7f10ffdf8114ffe08314ffe18516ffe18516ffd07213ffa94b04ffa74b05ffa84c06ffa74c06ffa94e07ffa94e07ffa94e07ffaa4f08ff2d577cff28a9d8ff2db2daff31b2d9ff35b3daff36b5dcff38b7dcff39b6dcff3eb8dcff3fb9ddff46badfff30b0d4ffa70156ff9c014eff9d014eff9d014eff9d014eff9e004fff9e0050ff9e0050ff9e0050ff9e0050ff9e0052ff9e0052ffb40d62ff46032dff4a012fff540133ff670040ff770049ff890151ff930157ff98015aff970059ff98015bffa04505ff5796a6ff29b0d8ff2db0d9ff2db0d9ff2fb2d8ff32b2d9ff31b2d9ff33b3dcff007eb5ff017bb7ff007bb6ff007bb6ff027cb7ff017db6ff8c0047ff880439ff967d1bff9c801cffa3861dffb59925ffc5a930ffd1b53cffd9bd44ffdcc24bffddc44dffdfc550ffe0c44bff01afbbff05afbbff0aafbbff0fafbeff10b0bfff2aadb2ffdd8321ffe18316ffe18418ffe18418ffe18418ffe18418ffdf8518ffe18619ffe18619ffe18619ffe2871affe1871bffe1871bffb78440ff359aaeff3ba0b2ff3ba0b2ff3ba0b2ff3ca0b2ff3da2b6ff3ba1b5ff0eacb9ff04aeb9ff08aebbff0db0bcff10b0bbff13b0bcff15b1bdff18b1beff19b2bfff19b2bfff1db3beff1fb4bfff44acbfff006073ff01586bff025568ff3d5a23ff94791aff46c6bbff47c7bcff55c8beff4bcbbdff2ebbbbff0067a9ffdf8016ffde8114ffde8213ffdd8313ffe08314ffe18516ffc86b0fffa94d07ffa84c07ffa74d07ffa84c06ffa94e07ffa94e07ffaa4f07ff3a5770ff29b0d8ff2cb1d7ff30b3d9ff33b3daff34b5dbff37b5daff38b7dcff3bb7dbff3eb8dcff42badeff4dbde2ffd11d75ff9e0050ff9d014eff9d014eff9c014eff9d004fff9e0050ff9f0050ff9d0150ffa10051ffc41169ffe02982ffe22882ff46032dff4b0130ff840551ff9e0260ff9f005fff9d0260ff9b045bffca3b8fff9c015cff9a005dffd1700effa74801ff3ba8caff2cb1daff2bb1d8ff2cb1d7ff2fb2d8ff30b3daff0790c5ff007ab4ff017bb6ff017bb6ff017bb6ff017cb6ff7d074cff8e0047ff88043aff967d1bff9c801dffa88d21ffbc9f2cffccb13cffd5b945ffdac14affdcc54fffdec751ffe0c651ffe0c44dff00adbbff03aebbff07afbaff0aafbbff0db0bcff11b1bfff12b1bdff1bb1baffa49358ffdd8520ffe28419ffe2851bffe1861bffe28619ffe28617ffe18418ffd98b2fff4b513dff00536fff37a0adff3a9fb0ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff31a4b8ff0cadb9ff09b0b9ff0db0baff0fb1bbff14b1bdff15b0bdff18b1beff1bb2bcff2aaebbff42a4b6ff42a2b5ff07687eff035c70ff015367ff3d5a23ff947918ff44c7bbff46c6bbff46c6b9ff5bcfc4ff2ebcbcff026baaff616b73ffe08013ffde8214ffde8213ffe08213ffe18516ffe18516ffde8318ffc96b10ffaf5105ffab4d04ffad4e05ffb95b08ffde811cffa08f6aff26afd9ff29afd6ff2cb1d9ff30b2d9ff32b4daff34b4dbff37b6dcff39b6ddff3cb7dcff3eb8ddff5cb2daffdd257effda237cffaf0158ff9e0051ff9c0150ff9c014eff9d014effaf0256ffda247dffe02781ffe12781ffe12781ffe22882ff480131ff97005cff98015cff99005dff9c0160ff9d0160ff9f0161ffa20363ffa30564ff9d005fffd3710dffd57510ffce6d11ff6c675cff2ab1d9ff2db0daff2fb1daff2fb1d8ff0082bdff007ab4ff027bb7ff037ab6ff2373b0ff850044ff8b0045ff900047ff88043aff947c19ff997e16ffdec653ffe1c955ffe1c956ffe2cc5bffe1cb5cffe2cd5effe8d167ffe4cb5bffe2c651ff0baab7ff01aebbff02aebaff06afbcff0aafbbff0fb1beff0fb1bdff13b1bfff14b2c0ff18b1bcff17b2bfff18b4c2ff1cb3c0ff10b1beff027a90ff910143ff004a60ff024d66ff3a9db2ff3b9eb0ff3a9fb0ff3a9fb0ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ea2b4ff3ea2b4ff3ca1b5ff39a3b6ff30a6b6ff34a6b7ff38a7b7ff3ea3b6ff40a3b4ff40a4b6ff3d9fb3ff096b81ff086a80ff06637aff025468ff3c5a23ff947919ff44c7bbff45c6bbff46c6bbff4bc8bcff3dc0c0ff0072aeff0078b1ffd08525ffe37f13ffde8112ffe08213ffe08314ffe08314ffe08315ffe18419ffe18517ffe28617ffe28616ffe38716ffe38717ffdb8d36ff23afd7ff25aed5ff29b0d8ff2cb1d8ff30b3d9ff32b3daff34b5dbff37b5dcff3ab6dcff3eb8deffb173b7ffde257fffdf247fffde257fffdd237effdf247fffe12580ffe12580ffe02680ffe02680ffe12781ffe12781ffe12781ffe02780ff920259ff96005bff99015cff99015cff9b0160ff9d0160ff9f0060ffa00161ffa30365ffa70869ffd3710effd5750effd97911ff9e4207ff9b4306ff8a4214ff67726fff5da5b8ff3c8abcff485f9bff5f1354ff860040ff850143ff890145ff8e0147ff8f0049ff89053cff927814ffdec652ffdec753ffe0c854ffe1c956ffe0cb59ffe1cc5affe1cc5bffe3ce5dffe2cd5effe2ca55ff870043ff06afbcff01adb8ff02aebbff07afbaff0bb0bcff0cb0bcff0fb1bdff12b1bdff16b2bfff16b2beff19b2bfff1bb3c0ff008c9aff910045ff910144ff004a5eff218093ff399eafff3a9fb0ff3a9fb0ff3a9fb0ff3a9fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3ea4b3ff3ea4b3ff3ea4b3ff40a4b8ff076980ff076980ff076980ff076980ff005a6eff3d5a23ff94791aff44c7b9ff44c7b9ff44c7b9ff45c6b9ff3ec3c1ff32b3dbff32b3dbff31b4daffa39971ffdb8214ffe28010ffdf8213ffdf8314ffe08513ffdf8513ffe18516ffe18516ffe18514ffe28514ffa99a69ff63bbd4ff32b1d6ff23add6ff28afd8ff29b0daff2cb1d7ff30b3d9ff31b4daff36b4dbff35b6daff4ab5dbffe0227effdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12783ffdd287dff8f0059ff930057ff97005bff99015cff99005dff9a005dff9e005eff9e0060ffa10264ffa20366ffd3710dffd6750effda790fffb75607ff9c4106ff9c4205ff9a4005ff963e03ff78013cff810142ff850042ff830040ff860043ff8d0046ff95004bff9a014fff920544ffdec654ffdfc551ffe0c651ffdec753ffe0c854ffe0c956ffe1ca57ffe0cb59ffe1cc5affe1cc5bffe3ce5cff860045ff8f0048ff4486a4ff00aeb7ff01afb9ff07afbcff0aafbdff0fb1bfff12b1c0ff14b1bfff15b1bdff1ab2bfff519ab2ff910047ff910046ff910045ff00475dff389fb0ff379eafff399eafff399fafff3a9fb0ff3a9fb0ff3b9fb1ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3ea4b3ff3ea4b3ff3ea2b3ff167a8fff06687fff076980ff076980ff076980ff016276ff3e5c26ff94791aff44c7b9ff44c7b9ff44c7b9ff44c7b9ff40c0caff33b3daff33b3daff33b3daff33b3d8ff38b3daffa0a07dffdb8317ffe3810fffdd8313ffdf8416ffe28417ffdf851dffa59c72ff3cb5dbff39b6dbff3ab6ddff3cb6d9ff4ac4e8ff26add3ff25aed8ff29b0d8ff2cb1d9ff2eb3dbff35b4dcff8e93cdffe12480ffe0247fffdd237effdf257dffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe02781ffe1297fff883904ff8d0056ff910057ff940159ff95005bff97015cff9a005cff9d015eff9d0060ff9d0160ff9e143bffd4710effd7750effd8790fffdc7d15ff9d4106ff9a4204ff994105ff953f02ff78003bff7f0140ff810042ff830042ff95004aff9d014eff9d0050ff9d0050ff9a0248ffe0c34fffdec44fffdec650ffddc652ffdec753ffe1c956ffe1c956ffe0cb59ffe0cb59ffe1cc5affe1ce59ff840043ff8e0148ff98014bffa30151ff72175bff3da2b8ff14aeb9ff0db0bbff1badbdff4aa6c1ff962e75ff9e014eff920046ff910046ff910044ff910046ff00485cff369daeff379eafff379eafff379eafff379eafff379eafff3a9fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3da2b4ff04697fff04697fff06687fff076980ff076980ff05697cff405c25ff937819ff43c6b7ff43c6b9ff44c7bbff46c6b9ff38b8d2ff33b3daff33b3daff33b3daff33b3daff34b3daff35b4daff34b5daff36b4dbff3ab3dbff3cb4d9ff38b5dcff37b5dbff38b5ddff38b6dbff38b7dcff38b7dcff3ab6dcff3ab6dcff5bcaecff37b7daff1fabd2ff0765a1ffcf2580ffdf217dffdc227effdd227dffde227dffdf237effdf237effdf247fffdf247fffdf247fffdf247fffdf247fffdf247fffe22381ffe4267fff665097ff335e75ff873905ff8b3b08ff920055ff93015bff930159ff96015cff98015cff9a005cff9a0060ff99015bffce6b0bffd2700cffd7750effd8790fffd97c11ffa54801ff9b4305ff994105ff953f04ff780039ff800140ff880046ffde2680ffd51d77ffa50156ff9e0054ff9c0152ff9d0051ffdec34effe0c44dffdec44effddc650ffdec751ffe0c854ffe1c956ffe1c956ffe2ca57ffe2ca59ffe3cc5aff870042ff910048ff98014dffa10054ffaa0057ffb0005cffb80260ffbe0564ffc50b68ffcb0f6cffce1370ffd11570ffa40153ff900048ff910044ff8f0146ff0c435bff369daeff369daeff379eafff379eafff379eafff379eafff3a9fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3ca1b3ff056a80ff04697fff056a80ff056a80ff056a80ff096a7cff405c24ffb1962dff43c6b7ff43c6b9ff44c7bbff46c6baff31b3daff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff38b7dcff38b7dcff38b7dcff39b6dcff3cb6dbff4dbfe1ff22add2ff0263a3ff0166a5ff14619fffc22f88ffdb227affd9227effdc247effde237effdd237effdf247fffdd257fffdd257fffe1247effe22380ff605aa0ff006faaff016ca8ff335e75ff873905ff8c3b04ff8d3c03ff952535ff940159ff9a005fff99005cff940256ffc35131ffc8670cffd06d0dffd2710fffd67710ffd77a0fffdc7d11ffdd7f14ff9c4202ff994107ff953f04ff780039ff840042ffdd257dffdf247fffdf247fffdf2680ffe02680ffde2680ffdd277fffd06757ffdec34cffdec44effdcc54fffddc650ffdec753ffe0c854ffe1c956ffe2ca57ffdfcb5aff7d0b2aff880041ff910048ff98014dffa10054ffaa0057ffb0005bffb80260ffbf0665ffc40a68ffca0f6cffcd1370ffd11570ffd81975ffa40353ff930046ff900046ff4e2251ff369dadff379caeff379eafff379eafff379eafff379eafff399fb0ff3a9fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3ca1b3ff066b81ff04697fff04697fff04697fff04697fff056469ff3f5c2affddc451ff43c6b7ff44c7baff44c7bbff44c6c0ff32b2daff33b3daff33b3daff33b3daff33b3daff33b3daff33b3daff34b5dbff36b4dbff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff38b7dcff38b7dcff38b7dcff38b7dcff3ab6dcff40b6dbff2eb2d7ff0063a3ff0166a5ff0267a7ff0068a9ff006faeff0677b5ff327ab5ff6371b7ff7c64aaff756bafff4a74b2ff166cacff0071aeff0071adff006facff026faaff016ea9ff345f76ff873905ff8c3b04ff8d3c06ff8d3c03ff984102ffa54c02ffb55807ffc16006ffcc6b0dffd27113ffd87917ffd87b14ffdb7e14ffde8114ffde7f11ffdc8011ffb35507ff973f04ff953f04ff77003cffdc257effdd237effdf247fffdf247fffe02680ffe02680ffe02680ffe02781ffde2781ffc54d57ffdbc54fffdcc64effdcc650ffddc64fffddc64fffe1c853ffe2c859ffda3577ff830043ff860141ff900148ff98014cffa30053ffaa0057ffb0005bffb80260ffbe0665ffc40b6affca0f6dffcd1370ffd01771ffd51873ffd81c77ffb0065dff8f0146ff8c0244ff379daeff379caeff369daeff369daeff379eafff379eafff379eafff389fb0ff389fb0ff3a9fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ea3b5ff14788dff04697fff04697fff04697fff036981ff005145ff224f28ffdec752ff43c6b7ff43c6b9ff44c7b9ff33b5cfff30b3d9ff31b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff34b5dbff34b5dbff34b5d9ff34b5d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff37b5daff37b6dbff38b7dcff38b7dcff3ab6dcff40b9ddff0063a3ff0166a5ff0267a6ff0067a9ff006faeff017ab7ff0084beff028bc2ff0193c6ff0299cbff059fcfff0172acff0172afff0270adff006facff026faaff016ea9ff345f76ff873905ff8c3b04ff8d3c06ff8f3c04ffa24805ffb35604ffd37510ffe4871bffe38919ffe38919ffe38a1bffe0891fffed9b36ffe18e28ffe5881cffe58817ffe18514ff9a4002ff953f04ff7c003affdc227dffdd237effdf247fffdf247fffe02680ffe02680ffe02680ffe12781ffe02781ffe02782ffe12783ffd32e72ffd26a5effdf8c67ffce6260ffdd2e7cffe42c86ffe42c84ff830041ff860141ff8f0047ff98014bffa30052ffaa0057ffb0005bffb80260ffbf0665ffc40a68ffca0f6cffcd1370ffd01771ffd51873ffd81c77ffd91d78ffbe0d63ff900144ff4399acff369daeff369daeff369daeff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff3ba0b2ff39a0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff389db0ff046a80ff04697fff04697eff076882ff015340ff085338ffdfc751ff43c6b7ff44c7bbff40c3c5ff30b3dbff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff33b3daff34b5dbff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff37b5daff38b7dcff38b7dcff38b7dbff46bfe3ff0063a3ff0166a5ff0267a6ff0067a9ff006faeff017ab7ff0084beff008cc2ff0293c8ff0299cbff01a0cfff0895c8ff0070acff0270adff006facff026faaff006ca8ff345f76ff873905ff8c3b04ff8d3c06ffa24704ffe28618ffe28617ffe28617ffe38718ffe28818ffe28818ffe38919ffe38919ffe48a1affe48a1affe38b17fff4a545ffe38b1dffd57c1bff933e03ff9a0946ffdc227dffdd237effdd237effdd237effdf247fffe02680ffe02680ffe02680ffe02680ffe12882ffdf2781ffe02982ffe02982ffe12a84ffe12a84ffe22b85ffe22b85ffe12c83ff860045ff840143ff8f0045ff97004bffa20153ffaa0157ffb0005bffb80260ffbe0563ffc40a66ffca0f6cffcd1370ffd01771ffd31973ffd71b76ffd91d78ffdc2078ffc9186eff850243ff349cadff369daeff369daeff369daeff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3499adff076b81ff04677eff005246ff00523fff005d4affdec64fff43c6b7ff42c7b8ff2fb2d6ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff34b5daff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff37b5daff37b5daff38b6ddff42bbe2ff0063a3ff0166a5ff0267a6ff0067a9ff006faeff017ab7ff0084beff008cc2ff0293c8ff0299cbff01a0cfff04a3d2ff0075b1ff0270adff006facff026faaff006ca8ff345f76ff873905ff8b3b0bffd77d1effe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe48819ffe38919ffe48a1affe48a1affe48a1affe48a1affe4891effe7911eff9f4201ffaa2a3dffdb217bffdd237effdd237effdd237effdf247fffdf247fffe02680ffe02680ffe02680ffdf2781ffdf2781ffe02982ffe02982ffe12a84ffe12a84ffe22b85ffe22b85ffe22b83ff860141ff860043ff8f0047ff9a004fffa60257ffb3015bffbb0664ffc5116cffca146fffcf1771ffd31a73ffd41b75ffd51c76ffd51c76ffd71b76ffd91d78ffdc2078ffdb2179ffd41e72ff59144aff389dacff369daeff369daeff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b1ff379cb1ff025859ff015340ff01644eff01654eff8b9849ff41c5c0ff2eb0d7ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff3ab6dcff33a3d1ff0063a3ff0166a5ff0267a6ff0067a9ff006faeff017ab7ff0184beff028bc2ff0193c8ff029bccff00a0cfff05a4d2ff13a8d6ff0173aeff006facff026faaff006ca8ff325f77ff853907ffdb8419ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe38718ffe38718ffe38718ffe48819ffe38919ffe48a1affe48a1affe48a1affe48a1affe48a1affe68b20ff943c0bffdb217bffdc227dffdc227dffdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe12781ffe12781ffe12781ffe02982ffe02982ffe12a84ffe12a84ffdd2b7fff860142ff880043ff9a004effaa0156ffb8035effc4116cffd32279ffd83181ffe03787ffde3485ffd82b7fffe02b81ffe22881ffe22882ffe12783ffdf237effda2078ffdd2179ffde227bffdb237cff640b46ff339cabff359cadff369daeff369daeff379eafff379eafff379eafff379eafff379eafff389fb0ff389fb0ff3aa0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b5ff014f4bff005540ff099476ff027a61ff006852ff016651ff2cb1d7ff2eb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff36b4d9ff36b4d9ff36b4d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff38b5daff005e9aff0063a3ff0166a5ff0267a6ff0067a9ff006faeff017ab7ff0184beff028bc2ff0193c8ff029bccff019fcfff06a4d2ff13a8d4ff1ca9d7ff016facff026faaff006ca8ff335f78ff944000ffe08314ffe08314ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe38718ffe38718ffe48819ffe38919ffe48a1affe48a1affe48a1affe48a1affe48a1affe48a1affaf520bffcb2d67ffda227fffdc227dffdc227dffdd237effdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe12781ffe12781ffe02982ffe02982ffe12a84ffe12a83ff860044ff890041ff9a004effae0055ffda237dffe22880ffdf297fffe32981ffe12a81ffe12a81ffe12a81ffe32b81ffe22b82ffe02c83ffd8327efff56ab2ffe53087ffe32b85ffe12781ffdc227dffdc227bffdc2378ffc20e60ff379cadff369daeff369daeff379eafff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ea2b4ff006072ff004835ff029a75ff029b7aff029b7aff019d7bff019f7dff2aa1c7ff2eb2daff2fb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff34b5d9ff35b4d9ff37b5daff37b5daff37b5daff34b5dcff118cbaff005f9fff0063a3ff0166a5ff0267a6ff0067a9ff006faeff007ab7ff0184beff028bc2ff0193c8ff039accff00a0cdff06a4d0ff14a8d4ff1eabd6ff0c90c3ff016ea7ff006ca8ff2e6180ffde8516ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe38919ffe38919ffe38919ffe38919ffe48a1affe48a1affe48a1afff09023ffa18219ffd82379ffdb217bffdc227dffdc227cffdf247fffdd237effdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe22882ffe12a83ff9a044dff840144ffa40253ffe0277fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe12c83ffe52c86fff74c9effe73087ffe32a82ffdd247cffdc227bffda2076ff00556cff01556dff3391a6ff389cb0ff369daeff369daeff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff389fb0ff39a0b2ff389fb0ff3ea0b2ff005f74ff005e74ff005e74ff056c57ff009a77ff009a77ff029b7aff019b7aff019d7bff03647bff30b1d9ff2fb1daff2fb1daff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff34b5d9ff35b4dbff34b4dbff30b5deff0185baff017bb7ff903f0aff005ea1ff0063a3ff0066a5ff0267a6ff0067a9ff006faeff007ab7ff0184beff028bc2ff0193c8ff0299cbff00a0cdff07a4d0ff16a7d4ff1fabd6ff25acd8ff017db3ff006da8ff1d6695ffdc8317ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe38718ffe38919ffe38919ffe38919ffe38919ffe48a1affe48a1affe48a1affe48e1cffe0c751ffdbc655ffd35066ffdf2380ffde227dffde237effdd237effdf247fffdf2480ffe02580ffe02680ffe02680ffe02680ffe12781ffe22680ff870043ff800344ffd92279ffe02680ffdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe22b83ffe22d84ffe53185ffef3a90ffe42b83ffdd247cffdc2378ff00556cff02546fff01556fff005871ff005e74ff01657bff22899eff3199afff339db2ff339db0ff2b94a8ff1c8599ff1d8699ff198496ff006075ff005e74ff005e74ff005e74ff0e9977ff009a77ff009a77ff029b78ff019b78ff019d7bff01657cff00677eff2cafd5ff2cb1d9ff2fb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff34b5d9ff34b5d9ff34b6dbff119dcfff007ab6ff007db8ff7d401bff8f3d05ff005e9fff0364a2ff0166a5ff0068a6ff0067a8ff006faeff037dbaff0288c2ff0091c9ff039ccdff04a0ceff10a7d3ff1aa9d5ff1fabd4ff21acd5ff25aed7ff25afdbff026eaaff046aa5ffe08212ffe08213ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe38919ffe38919ffe38919ffe38919ffe38917ffdb8f1dffdec751ffe0c852ffe0c853ffe0c756ffdf6770ffdf217effe0227effe0227effe1247fffe0247fffe22580ffe12582ffd42875ff841c5fff7c0040ff7f0241ffde257cffe0267effe0267effde267effdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe22b83ffe42c84ffe42c84ffe42c84ffef3890ffe42b83ffda2078ff00566eff00546eff00556fff015871ff025d76ff00647dff006a81ff007088ff04748dff0b798fff117e95ff148296ff19879bff1d8a9fff228ca1ff006278ff015c73ff015e74ff059078ff009a77ff009a77ff009a77ff029b78ff029b78ff00667cff01657cff006982ff2cacd2ff2fb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff33b3daff33b3daff33b5dfff0587bcff007ab6ff037bb5ff833c10ff8e3c04ff8f3d05ff005e9fff0364a2ff0166a5ff0068a6ff036cadff017bb6ff0085bdff0194c8ff099fd1ff1eaad6ff38b1daff3ab0d9ff39b2d7ff38b4d7ff35b3d9ff32b3d7ff2cb2d8ff27b0daff016ba3ffe08317ffdf8215ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe38718ffe38718ffe38718ffe38919ffe38919ffe38919ffe38919ffe28919ffe2bc45ffddc650ffdec751ffe0c854ffe0c854ffdfc855ffe2c956ffe1c956ffe3c85cffecc760ffc09832ffb7962effb4982aff9f8d36ff4d1e59ff7b003effdf257dffe02680ffe0267effe0267effde2680ffdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe22b83ffe42c84ffe42c84ffef358dffde257dff00556eff00546eff00556fff015871ff025d76ff00647dff006a81ff007088ff04748dff0b798fff117e95ff148296ff19879bff1d8a9fff238ea3ff2490a4ff0b7084ff005e74ff005f6eff029978ff009a77ff009a77ff009a77ff029b78ff01657cff02667eff026e85ff02758dff0781a0ff31b2d8ff2cb1d6ff2fb2d6ff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b3daff34b4dbff048ec2ff007bb6ff314c82ff843605ff893a07ff8d3c06ff8f3d05ff005e9fff0163a1ff0166a5ff0067a9ff0075aeff1ea2d2ff35b4dbff37b4daff36b4d9ff37b5daff36b6daff39b6dcff3ab6daff3bb6dbff52badbff53b9dcff3bb9ddff36b6dbff25adddff51656bffde8215ffdf8213ffe08314ffdf8316ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe38718ffe38718ffe38718ffe38718ffe38919ffe38919ffe3881cffdbc74fffddc650ffdec751ffdec751ffe0c852ffe0c852ffe1c956ffe1c956ffe1c956ffe2c853ffb49828ffb59828ffb5982affa19a50ff501d59ff92014bffdf247fffdf247fffe0267effe02680ffe02680ffdf267effdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe42c84ffe42c84ffe22a81ff00546dff00556fff00556fff015871ff025d76ff01647dff006a81ff016f88ff04748dff0b798fff117e95ff148296ff19879bff1d8a9fff228da2ff2591a6ff2893a6ff228fa1ff005e73ff049679ff039978ff019a77ff009a77ff009a77ff01657cff02667eff036f86ff02788fff018095ff02879bff028ca3ff2db4d5ff2eb2d7ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff32b2daff33b3dbff33b3daff33b3daff24aed2ff2d1850ff540133ff510032ff853606ff893a05ff8d3c06ff8f3d05ff005e9fff0163a1ff0166a5ff199fceff32b2daff31b4dcff34b5dbff35b4d9ff35b4d9ff37b5daff37b5daff38b6dcff3ab6dcff3ab6dcff3ab6daff3cb7dbff42b5d7ff48badeff38b6d9ff1297c8ffd7852bffde8215ffe08315ffde8415ffdf8414ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe28617ffe38718ffe38718ffe38919ffe28717ffe1c34cffddc650ffddc650ffdec751ffdec751ffdec751ffe0c852ffe0c854ffe1c956ffe1c956ffd9c04affb39727ffb59828ffb69828ff517e7eff4c1f5affe12580ffdf247fffdf257effdf257dffe02680ffe02680ffdf267effde267effde267effdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe42c84ffe42c84ffec328bff00566eff01536eff00556fff015871ff025d76ff01647dff006a81ff016f88ff04748dff0b798fff117e95ff148296ff19879bff1d8a9fff228da2ff2591a6ff2893a6ff2a96a8ff2b97a9ff0b7489ff09987fff029979ff009a77ff009a77ff01657cff01677eff016f86ff00778eff018095ff00889bff008fa0ff0296a8ff019badff039fb1ff05a2b6ff06a6b8ff0ba8bcff0aa9bdff048ca1ff006a7dff026877ff026574ff540030ff550131ff540030ff843706ff893a05ff8d3c06ff8f3d05ff005e9fff0261a2ff2db0ddff30b3d9ff32b2d9ff33b3daff33b3daff34b5d9ff34b5d9ff37b5daff37b5daff38b7dcff38b6dcff39b6dcff3bb7ddff3bb7ddff3cb7ddff3cb7d9ff4ec0e3ff30b1d7ff00534fffcd8529ffde8115ffe08315ffdd8312ffe08314ffe08314ffe08314ffe18516ffe18516ffe28617ffe28617ffe28617ffe28618ffe28714ffe58616ff145a37ffdec450ffddc650ffddc650ffddc650ffddc650ffdec751ffdec751ffe0c854ffe0c854ffe1c956ffdbc14bffb39727ffb39727ffb79627ff0371b1ff522c64ffdf2380ffdf247fffdf257dffdf257dffdf257dffe02680ffe0267effde267effde267effdf277fffdf287fffdf287fffdf287fffdf297fffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe42c84ff00546fff01536fff00546eff015871ff025d76ff00647dff006a81ff007088ff04748dff0b798fff117e95ff148296ff19879bff1d8a9fff228da2ff2591a6ff2893a6ff2a96a8ff2b97a9ff2f98adff2c98acff0c8986ff01987bff009977ff01657cff01677eff006f85ff01788fff018095ff01889bff018fa0ff0095a7ff009bacff01a1b1ff02a4b3ff01a8b6ff01aab8ff02abb9ff01adbaff006d82ff00697bff016677ff530030ff540030ff540032ff843706ff893a05ff8d3c06ff903d05ff005f9dff33b0dfff2fb2d8ff30b3d9ff30b3d9ff33b3daff33b3daff34b5dbff34b5dbff37b5daff37b5daff37b5daff38b7dcff38b7dcff3bb7ddff3bb7ddff3bb7ddff3bb7dcff41b6daff42b8dfff00685cff009b79ff219365ffe58011ffdf8216ffde8417ffdd8414ffdf8413ffe18516ffe08516ffe08516ffe38416ffe28618ffe28617ffa6913cff01a17fff26af8eff135d35ffdec650ffdfc550ffdfc550ffddc650ffdec751ffdec751ffe0c853ffe0c853ffe1c954ffe0c853ffb59927ffb49726ff48848aff0172afff425891ffdf2380ffdd237cffdf257dffdf257dffdf257dffdd257dffdd257dffdf267effdf267effdf267effdf287fffdf277fffe0277fffdf287fffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffe52c84ff00536eff00546eff00556fff015871ff015e76ff01657eff006a81ff007088ff04748dff0b798fff117f95ff168398ff19879bff1d8a9fff228da2ff2591a6ff2893a6ff2a96a8ff2b97a9ff2d98aaff309aadff329bacff339cadff2d9da7ff01657cff01677eff006f85ff01788fff018095ff00889bff018fa0ff0095a7ff009bacff01a1b1ff00a4b3ff01a8b6ff01aab8ff02abb9ff01adbaff04aeb9ff00697bff016677ff530130ff540030ff540032ff843706ff893a05ff8d3c06ff8f3d05ff005c97ff2eb0d7ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3daff33b3daff36b4d9ff37b5daff37b5daff37b5daff37b5daff3ab6dcff3ab6dcff3bb7ddff3bb7ddff3db7dbff40b9ddff009a83ff029b7aff009c78ff039c7bff0a9b73ff759251ffd18624ffde8415ffe18515ffe28417ffe08417ffb3903dff23986cff009f7cff029f7cff019f7dff00a07dff079d7bff137749ffdec651ffddc652ffddc650ffdcc650ffdec751ffdec751ffe0c852ffe0c852ffe1c955ffc6a833ff337284ff0172afff0172afff0a6fadffde227dffdd247cffdf257dffdf257dffdf257dffdd257dffdd257dffe0267effe0267effe0267effde267effde267effe0277fffdf287fffe02980ffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe22b83ffe22b83ffe22b83ffd82f83ff01536eff00546eff00556fff015871ff005e76ff02657eff006a81ff007088ff04748dff0b798fff127f96ff168398ff18869aff1d8a9fff228da2ff2490a4ff2893a6ff2a96a8ff2b97a9ff2e98aaff309aabff329bacff329bacff339cadff01657cff01677eff006e85ff00778eff008095ff00889aff0290a2ff0296a8ff019dadff02a0b1ff01a4b3ff00a8b5ff00a9b6ff03adbaff01adbaff00afb9ff079fabff006675ff530030ff550131ff540030ff843706ff893a05ff8d3c06ff903d07ff1f94c7ff2eb0d9ff2fb1daff30b3d9ff30b3d9ff30b3d9ff30b3d9ff32b2d9ff33b3daff34b5d9ff34b5d9ff37b5daff37b5daff37b5daff38b7dcff38b7dcff3ab6dcff3ab6dcff3ab6dcff3bb7ddff019982ff029b78ff029b78ff029b78ff019d79ff019d79ff019d79ff019d79ff019d79ff009d7aff009e7dff009e7dff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff039f7dff01a17eff39874cffe5c462ffdcc54dffe1c652ffdfc550ffe0c852ffdac95fff558f8cff047ab7ff0170b1ff0172afff0072afff0072b1ffe0227effdc247cffdd237effdd237effdf257dffdf257dffdf247fffdf247fffe02680ffe02680ffde267effde267effe0277fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12a81ffe12a81ffe42b83ff5d477aff01536eff01536eff00556fff015871ff025d76ff01647dff006a81ff007088ff03738cff0b798fff117e95ff168398ff18869aff1d8a9fff228da2ff2591a6ff2893a8ff2a96a8ff2d96a9ff2f98abff309aadff329bacff329bacff329bacff01657cff01677eff006e85ff00778eff008095ff00899bff008f9fff0095a9ff009babff019fafff00a5b3ff00a7b5ff01aab8ff02abb9ff01adbaff00afb9ff01afb9ff007587ff53002fff550131ff540030ff843706ff893a05ff8d3c06ff8f3d09ff2dafdaff2cb1d9ff2db2daff2fb2d8ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b4d8ff34b5d9ff36b4d9ff37b5daff37b5daff37b5daff37b5daff3ab6dcff3ab6dcff3ab6dcff3bb7ddff029a76ff029b78ff029b78ff029b78ff019d79ff009c78ff019d79ff019d79ff019d79ff009d7aff009e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff019f7dff019f7dff0ead8cff108968ff730750ff00629fff0166a7ff0166a7ff0167a9ff0072b1ff0380bbff038dc5ff0397cdff0682bfff0176b3ff0074b1ff884b99ffdd237effdd237effdd237effdf257dffdf257dffdf247fffdf247fffe02680ffe02680ffde267effde267effdf267effdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ffe12b82ff01536cff01536eff01536eff00556fff015871ff025d76ff02657eff006a81ff007088ff03738cff0b798fff117e95ff168398ff18869aff1e8a9fff228da2ff2591a6ff2893a6ff2a96a8ff2d96a9ff2f98abff309aadff309aabff329bacff339cadff01657cff02667eff016f87ff027b91ff02879bff008fa3ff0298aaff019fb1ff01a5b2ff00a8b6ff03a9b7ff01aab7ff00abb8ff00acb9ff03adbaff00aeb8ff01afb9ff00aeb8ff55012fff540030ff540030ff843706ff893a05ff8d3c06ff8f3d05ff4b8ea3ff2bb0d8ff2cb1d9ff2eb1d7ff2fb2d8ff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff34b5d9ff34b5d9ff37b5daff37b5daff37b5daff38b7dcff3ab6dcff3eb6dcff019a76ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d79ff019d79ff019d79ff029e7cff029e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff128768ff73074eff01629eff0065a4ff0166a5ff026bacff007bb8ff008cc2ff12a0d2ff38b7ddff43bbe3ff42b9e6ff0882bbff0079b5ffdb227dffdc247fffdd237effdd237effdd247cffdf257dffdf257dffdf257dffdf257dffdf257dffde267effdf267effde267effdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe12a81ffe12a81ff404771ff02536cff01536eff02546fff00556fff015871ff025d76ff01647dff006a81ff007088ff05748dff0b798fff117e95ff158397ff19879bff1e8a9fff228da2ff2591a3ff2893a6ff2a95a8ff2e97aaff2f98abff2f99acff319aabff339cadff339cadff01657cff026b84ff037992ff02879bff0196a3ff049fadff13afbeff23b7c5ff2cb7c5ff35b8c6ff24b4bfff1db5c0ff14b3bbff0ab0bcff02afb9ff01adbaff01afb9ff00acb6ff530131ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d05ff893e10ff2bb0d5ff2cb1d9ff2cb1d7ff2db2d8ff2fb2d8ff2fb2d8ff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff33b4d8ff34b5d9ff37b5daff37b5daff37b5daff37b5daff38b6dbff33b6cbff009a77ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff019d79ff019d79ff019d79ff019d79ff029e7cff029e7cff009e7cff009e7cff009e7cff009e7cff019f7dff019f7dff01a07dff06684eff74074eff01629eff0166a5ff0166a5ff0686bcff34b5dbff36b4d9ff37b5daff3ab6dcff3ab6dcff3ab6dcff30b4e0ff018cc0ff027eb4ffde217affdd237effdd237effdd247cffdf257dffdf257dffdf257dffdf257dffdf257dffe02680ffdf267effde267effdf287fffdf287fffdf287fffdf287fffe02980ffe02980ffe02980ffe02980ffe02980ff9b3c7fff015069ff01536cff01536eff02546fff00556fff015871ff025d76ff01647dff006a81ff007088ff04748dff0c7a90ff138197ff168398ff1b889dff208ba0ff238ea3ff2591a3ff2893a6ff2b94a7ff2e97aaff2f99acff309aadff329bacff339cadff339cadff00667dff007b90ff0fafbcff11b2bdff13b2bdff14b2beff15b2beff17b3bfff17b3bfff1ab4c0ff1ab4c0ff1eb3beff55c1cfff31b9c3ff21b5c1ff08b0b9ff02aeb9ff02adb6ff530131ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d07ff903d05ff52a6c1ff2cb1d9ff2cb1d7ff2eb0d9ff2fb1daff2fb1daff2fb2d8ff30b3d9ff33b3daff33b3daff33b3daff33b3daff34b5d9ff36b4d9ff35b4d9ff37b5daff37b5daff35b6dfff019979ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff019b78ff019d79ff019d79ff019d79ff019d79ff029e7cff029e7cff029e7cff009e7cff009e7cff009e7cff019f7dff059979ff325750ff73074eff01629eff0465a4ff31b2ddff33b3daff33b3daff36b4d9ff36b4d9ff37b5daff39b5daff3ab6dcff3ab6dcff3eb6deff1aa6d2ff0280b8ffdb237effdd237effdc247cffdd237effdf247fffdf247fffdf257dffdf257dffdf257effdf267effde267effde267effde267effdf287fffdf287fffdf287fffe02980ffe22882ffe12a81ff743d78ff004f68ff015069ff01536cff01536eff01536eff00556fff015871ff025e77ff036880ff057087ff10798fff1b8296ff25889dff2b8ea1ff2c91a5ff2c92a6ff2d94a8ff3096aaff2e96aaff2e96aaff2d96a9ff2e97aaff2d99acff309aabff329bacff329bacff329bacff0cadbaff0eb1beff0fb2bfff11b2bdff12b2bdff14b2beff14b2beff17b3bfff17b3bfff19b2bfff1ab4c0ff19b4beff1db4bfff1db5bfff4ebfcdff27b8c0ff0db0bcff03abb5ff530131ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d07ff903d05ff923c04ff3faecfff2ab1d9ff2cb1d9ff2cb1d9ff2db2daff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b3daff34b5d9ff36b4d9ff36b4d9ff39b5daff36b6dbff079880ff029b78ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff019b78ff019d79ff019d79ff019d79ff019d79ff029e7cff029e7cff019d7bff009e7cff009e7cff009e7cff019f7dff006b52ff781545ff74074eff01609fff2db1dcff30b1d8ff32b2d9ff33b3daff36b4d9ff36b4d9ff37b5daff39b5daff3ab6dcff3ab6dcff3ab6dcff3db7dbff40b9dfff29b1dcff8a6eb1ffe12381ffe0247fffdf247fffdf247fffdf257dffdf257dffdf257effde257dffde267effde267effde267effdf287fffdf287fffdf287fffdf287fffdc2a82ff520336ff004b67ff024e68ff015069ff01536cff01536eff01536eff00556fff025e79ff006882ff07748cff168097ff25889fff3192a4ff3f9daeff54acbfff5cb4c4ff67b9c8ff5eb1c0ff48a2b4ff43a5b9ff41a6b5ff3ca1b2ff3ba0b1ff349daeff309aabff329bacff329bacff329bacff0ab0bcff0cb1beff0cb1beff11b2bfff11b2bfff14b2beff14b2beff17b3bfff17b3bfff17b3bfff19b4c0ff1ab4c0ff1bb5c1ff1db4bfff1db6c0ff27b4beff28b9c3ff05abb4ff550233ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d07ff903d05ff964202ff9f4403ff637e7cff2db0d9ff2cb1daff2db0daff2db2d9ff2db2d7ff2fb3d7ff30b3d9ff32b2d9ff33b3daff34b5d9ff34b5d9ff34b3d8ff47afd6ff199279ff019875ff009975ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff019b78ff009c78ff009c78ff019d79ff019d79ff019d79ff029e7cff029e7cff029e7cff029e7cff009e7cff049877ff02674dff930149ff75074dff29a2cfff2fb2d8ff32b2d9ff32b2d9ff33b3daff33b4d8ff35b4d9ff37b5daff37b5daff37b5daff3ab6dcff3ab6dcff3ab6dcff3bb7ddff3db7dbff3eb8dcff42b7d8ff7a6babffd8257effdf2580ffdf247fffdf247effe0247dffe0247dffe1257effe0267effe1257effdf267effe12780ffbf266fff4d002fff4a012fff48002eff004965ff004f66ff015069ff01536cff01536cff01536eff025e78ff036a85ff18839bff3aa0b5ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3ea3b2ff45a3b7ff6abac7ff4aa8b7ff40a6b5ff3ca3b2ff369fadff339cabff339cabff08b1bcff0cb2beff0cb1bdff11b2bfff11b2bfff14b2beff14b2beff16b2beff17b3bfff17b3bfff19b4c0ff1ab4c0ff1ab4c0ff1cb3beff1db4bfff1eb4c0ff26b2bdff14b4bbff540131ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d07ff903d05ff9a4205ffa34a02ffaf5206ffbb5b0dff7d887bff2fb1dcff2db1d5ff30b1d7ff30b3d9ff30b3d9ff32b2d9ff32b2d9ff2fb4deff5eadbeffd58426ffc95442ff900348ff019875ff009975ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff019b78ff009c78ff009c78ff019d79ff019d79ff019d79ff029e7cff029e7cff029e7cff029e7cff009e7cff029373ff504e5aff910249ff7d074cff2db1d8ff2fb2d8ff32b2d9ff32b2d9ff33b3daff33b4d8ff35b4d9ff36b4d9ff37b5daff37b5daff3ab6dcff3ab6dcff3ab6dcff3ab6dcff3db7dbff3db7dbff3eb8dcff098ac0ff0172b0ff0271b0ff106eabff4362a4ff7755a1ff8f4a9bff844e9aff5c5a9fff2363a0ff046ca5ff0269a4ff4a012dff4a012fff4a012fff48002eff004965ff004f66ff015069ff01536cff01536cff005c74ff1e879eff3aa0b3ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff41a4b4ff45a4b5ff51adbfff42a5b5ff3ca1b1ff339cabff06b0bbff09afbbff0bb0bcff0eb1beff0fb2bfff11b2bdff11b2bdff14b2beff14b2beff15b4bfff17b3bfff18b4c0ff1ab4c0ff1ab4c0ff1bb5c1ff1db4bfff1eb4bfff2fbecaff550131ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d07ff903d05ff984206ffa54a04ffaf5204ffb95b05ffc26208ffca690bffd36e11ffd1731cffc47b2affc77f2effd47e23ffe27f17ffe08211ffdf8213ffdf8112ffcb553dff960049ff4e5664ff009a78ff029977ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff019b78ff019d79ff019d79ff019d79ff019d79ff019d79ff029e7cff029e7cff029e7eff0b9979ff8f004cff920149ff90014dff2db1d7ff2cb1d9ff2cb1d9ff2fb2d6ff32b2d9ff33b3daff33b4d9ff34b5d9ff35b4d9ff37b5daff37b5daff37b5daff3ab6dcff3ab6dcff3bb7ddff3bb7ddff3eb8dcff007fb9ff058ac2ff0178b3ff0273b0ff0371afff0172afff0071aeff0270adff026fabff026ca8ff026aa4ff0369a3ff4a012dff4a012fff4a012dff4a012fff004965ff004f66ff015069ff01526aff015d72ff389fb2ff39a0b2ff3aa0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff3ea4b3ff3fa3b3ff49acbcff48aabaff3da4b4ff06b0bbff09afbbff0bb0bcff0db0bcff0eb1beff11b2bdff11b2bdff14b2beff14b2beff15b4bfff17b3bfff17b3bfff1ab4c0ff1ab4c0ff1bb5c1ff1db4bfff1db4bfff24b6c1ff530130ff540030ff540030ff843706ff893a05ff8d3c06ff8f3d07ff903d05ff984206ffa64b05ffb05204ffb95a06ffc2610affc9690bffcf6f0effd47411ffd77810ffdc7b13ffdb7f12ffdf8016ffdf8114ffdf8213ffde7f11ffdf564affc60e68ffbf0c6aff626d7bff019875ff009a77ff009a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff019b78ff019d79ff019d79ff019d79ff019d79ff019d79ff029e7cff029e7cff0b9b79ff930148ff900249ff920149ff920149ff2ab1d8ff2cb1d9ff2db0d9ff30b1d8ff32b2d9ff32b2d9ff33b4d9ff33b4d8ff35b4d9ff36b4d9ff37b5daff37b5daff3ab6dcff3ab6dcff3ab6dcff3bb7ddff3eb8dcff0288c3ff0293c8ff059acdff0482baff0377b5ff0175b3ff0173b0ff0071adff006fabff026ca8ff026aa4ff0369a3ff4c012dff49012fff49012dff4a012fff004965ff004f66ff02516aff0e6d83ff36a0b0ff39a1b2ff39a0b2ff3aa0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff3ea4b3ff3ea4b3ff40a3b3ff43a5b5ff47aab9ff04b0bdff08b0bcff08b0bbff0bb0bcff0cb1beff0eb1beff0eb1beff11b2bdff11b2bdff14b2beff16b2beff17b3bfff17b3bfff19b3bfff1ab4c0ff1ab4c0ff1ab4c0ff1fb4c1ff590034ff540030ff540030ff843706ff8a3a05ff8f3d07ff8f3d07ff903d05ff974104ffa54a04ffb25306ffba5b08ffc2610affc8680bffce6e0dffd27310ffd77810ffdc7b12ffdd7e14ffdf8014ffe08215ffdf8213ffdf8112ffe1554affcc126cffcf1570ffd11872ffb12469ff019b78ff019a75ff039974ff029a77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff009c78ff009c78ff009d7aff52777bff9f0054ffa70054ff990150ff920048ff900049ff6582b6ff2cb1d9ff2bb1d9ff2eb0d9ff30b2dbff32b2dbff32b2d9ff33b3daff33b4d8ff34b5d9ff36b4d9ff37b5daff37b5daff37b5daff3ab6dcff3ab6dcff3cbce3ff0d96c9ff2bb0dbff40bbe0ff49bce4ff0b8fc3ff067eb9ff047ab6ff0075b1ff0071acff036da9ff016ba4ff0269a3ff4a012bff4a012dff4a012fff4a012fff004965ff004e65ff066277ff3a9fb3ff389fb0ff389fb0ff389fb0ff389fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff3ea4b3ff3ea4b3ff3fa2b2ff03afbcff05afbbff06b0bbff09b1bcff0bb0bcff0eb1beff0eb1beff11b2bdff11b2bdff14b2beff16b2beff17b3bfff17b3bfff19b2bfff1ab4c0ff1ab4c0ff1ab4c0ff1db5bfff560032ff540030ff540030ff843706ff8a3a05ff8f3d07ff8f3d07ff903d05ff974104ffa64b05ffb15204ffbb5b08ffc16009ffc8680bffce6e0dffd27310ffd77811ffdb7a12ffdd7e14ffdf8014ffe08215ffdf8213ffdf8112ffdf5347ffcc126cffcf1570ffd21872ffd61977ffd61c77ff9f3b6fff09977aff009b77ff009a77ff029b78ff029b78ff029b78ff029b78ff029b78ff009c78ff009c78ff009c78ff4a7373ff8b0042ff940048ff9e0051ffaa0157ffb2005dffb8045fffa70156ff95004cff2fb1d8ff2cb1daff2eb0d9ff2fb1daff32b2dbff32b2d9ff32b2d9ff33b4d8ff33b4d8ff36b4d9ff37b5daff37b5daff37b5daff3ab6dcff3ab6dcff37b5daff37b5daff39b5daff39b5daff3ab6deff038bc2ff037db8ff037db7ff037eb8ff057db7ff0273adff016da7ff0269a3ff4a012bff4a012dff4a012fff4a012fff004965ff004e64ff379eb1ff379eafff389fb0ff389fb0ff389fb0ff389fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff3ea4b3ff3ea4b3ff3fa3b3ff01b0bcff03afbcff03afbcff06b0bbff09b1bcff0bb0bcff0cb1beff0fb2bfff0fb2bfff13b1bdff14b2beff14b2beff14b2beff17b3bfff18b4c0ff1ab4c0ff1ab4c0ff449fb1ff560031ff540030ff540030ff843706ff893a05ff8d3c08ff8f3d07ff903d05ff964002ffa54b03ffb35406ffbf5d09ffc7660cffcd6d0effd27312ffd77714ffd97a14ffdb7b13ffdc7d12ffdf8014ffe08215ffdf8213ffde8112ffe15348ffcc126cffcf1570ffd21872ffd41a74ffd61c77ffd91d78ff9d004eff8f0142ff78043dff584556ff49807bff388f80ff3e8b7dff516667ff560d31ff7d003eff840042ff850040ff890045ff940149ff9f0052ffa90056ffb1005dffb90361ffc10965ffc70d6affad025cff39abd5ff2bb0d7ff30afd9ff2fb1daff30b1d8ff32b2d9ff32b2d9ff33b3daff34b5dbff34b5d9ff36b4d9ff37b5daff37b5daff35b3daff36b4d9ff36b4d9ff37b5daff37b5daff38b7dcff0b94c8ff007db7ff007db7ff007eb8ff017eb8ff037fb9ff0273aeff0369a3ff4a012dff4a012fff4a012fff4a012fff004863ff389eafff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff3aa0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ea0b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff3ea4b3ff01b0bcff02aebbff03afbcff06b0bbff09b1bcff0bb0bcff0cb1beff0eb1beff0eb1beff11b2bdff14b2beff14b2beff14b2beff16b3bfff17b3bfff19b2bfff0ba1aeff59002fff550031ff540030ff540030ff843706ff893a05ff8d3c08ff8f3d07ff903c04ff9f4505ffb15307ffbb5c0affc8680cffd07012ffd6781affdc7f1effdf811effe0831affe18418ffe08317ffdf8014ffdf8214ffdf8213ffdf8112ffe05247ffcc126cffcf1570ffd21872ffd41a74ffd61c77ffd91d76ffa70052ff900145ff8f0044ff8f0043ff8d0040ff88003fff87013fff79003cff81013fff830041ff830042ff850040ff890045ff940149ff9f0052ffa90056ffb1005dffb90361ffc20a66ffc70f69ffcc126fffd31572ffa11a6bff34b0d4ff2cb2daff30b1d9ff31b2daff31b2d9ff32b2d9ff33b3daff36b4d9ff33b4d9ff32b2d7ff33b3daff33b3daff34b5d9ff34b5d9ff37b5daff37b5daff37b5daff19a7d5ff007cb5ff007cb6ff007db7ff017eb8ff017eb8ff027eb6ff016ea7ff4a012dff4a012fff4a012fff4a012fff004662ff379daeff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff399fb1ff3ba0b2ff3ba0b2ff3ba0b2ff3da1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff3ea4b3ff3ea4b3ff01afbbff02aebbff03afbcff05b0bdff07b0bdff09b1bcff09b1bcff0cb1beff0cb1beff0eb1beff11b2bfff11b2bdff14b2beff14b3beff15b4bfff049baaff311c42ff550130ff550131ff540030ff540030ff843706ff8a3a05ff8f3d09ff8d3c08ff984209ffae5003ffd87a15ffe3871bffe38717ffe48819ffe48819ffe48a1affe38919ffe0891efff6a447ffe58b21ffe6891bffe28616ffe08414ffdf8112ffdf5347ffca126cffcf1570ffd21872ffd41a74ffd61c77ffd91d78ffba0b62ff8f0144ff8d0043ff8d0043ff8d0042ff89003fff86013fff78003cff81013fff830040ff830040ff830040ff8b0043ff940149ff9f0052ffa90058ffb1005dffb80260ffc10966ffc9106affcd136fffd01770ffd41a74ffdc1c78ffdd1d79ffd1227bffa33883ff92498cff90357bff750340ff005b97ff2eb0d7ff2fb2d8ff32b2d9ff33b3daff33b3daff34b5dbff36b4d9ff36b4d9ff39b5daff34b5deff0283baff007db5ff007db7ff007db7ff007db7ff007db7ff0479b4ff4a012dff4a012fff4a012eff4a012fff004b62ff389eafff369daeff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb1ff39a0b2ff39a0b2ff39a0b2ff39a0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea4b3ff01aebbff01aebaff01aebaff02b0bcff05b0bdff06b0bcff09b1bdff0bb0bcff0bb2bdff0eb1beff11b2bfff11b2bdff12b1bdff14b2beff0ba9b6ff341d45ff550131ff550131ff550131ff550131ff540030ff843706ff8a3a05ff8d3c08ff943f06ffdf841cffe18516ffe28617ffe28617ffe28617ffe38718ffe38718ffe38919ffe38919ffe38917ffe58a18ffe48a19fff29e34ffe68d1fffe28615ffdf8112ffde5347ffcb126cffcf1570ffd21872ffd41a74ffd61c77ffd91d78ffda1d77ff8f0144ff8f0043ff8d0043ff8d0042ff89003fff86013fff7a003cff810141ff830041ff840040ff840040ff8a0043ff95004bffa10053ffad0059ffb5035fffbf0a67ffc8126dffca156cffcd1670ffd1176fffd41a73ffd81d76ffda1f78ffdd2079ffde227bffdb217affda2078ff85003fff005d8eff2fb1d8ff2fb2d8ff32b2d9ff32b2d9ff32b2d9ff33b3daff36b4d9ff36b4d9ff37b5daff39b6dcff1ca8d4ff017eb8ff007db7ff007db7ff007db7ff007db7ff047fbbff4a012dff4a012fff4a012fff4a012fff0e6076ff379daeff379eafff369daeff379eafff379eafff389fb0ff389fb0ff379eafff389fb0ff39a0b1ff39a0b2ff39a0b2ff3ba1b3ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b2ff3da2b2ff3ea3b3ff27bbb4ff02aebcff03afbdff01afbbff03afbbff06b0bdff08b0bcff08b0bbff09b1bcff0cb1beff0eb3bdff11b2beff12b2b9ff2facbaff500132ff530134ff560030ff550131ff550131ff550131ff550030ff833706ff8b380dff9d4805ffdf8416ffe18516ffe28617ffe28617ffe28617ffe28617ffe38718ffe38718ffe38919ffe38919ffe38917ffe38917ffe48a18ffe5891affe48b1effea901fffe18416ffdd5448ffcb126cffcf1570ffd21872ffd41a74ffd61c77ffd81e78ffda1e78ff8f0146ff900043ff8d0043ff8d0040ff89003fff86013fff7b013dff810042ff830042ff850042ff840042ff8e0047ff9e0051ffae015affbb0662ffc7126dffce2277ffda3283ffdd2e7fffda247cffe0247effde257dffdd237affdb227affdc2179ffdd2179ffdc227bffda2078ff950046ff006e8cff2eb0d9ff2fb1daff30b1d8ff32b2d9ff32b2d9ff33b3daff33b3daff34b5dbff36b4d9ff37b5daff35b6deff0391c3ff007cb4ff007db7ff007eb8ff007db7ff007eb9ff4a012dff4a012fff4a012fff4a012fff184c65ff379daeff379eafff379eafff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff39a0b2ff39a0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff3da2b3ff3da2b2ff46c6bbff46c6bbff46c6bbff2cbfbfff03afb9ff05afbeff05afbaff08aebaff0ab2beff0ab1bdff19afbcff3a4868ff5a0136ff5c0037ff560035ff540034ff550130ff550130ff550131ff550131ff560031ff823605ff8f3b04ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe48819ffe48819ffe38919ffe38919ffe38917ffe48a18ffe48a19ffe68c1affe58b19ffdd5447ffcb126cffcf1570ffd21872ffd41a74ffd61c77ffd91f79ffdc2078ff9f004dff8f0043ff8b0143ff8b0140ff89003fff86013fff7b013dff800142ff810042ff850042ff890148ff9d0151ffb9035cffde2681ffe02782ffe02781ffe22882ffe02982ffe12882ffe22a83ffdd2b81fff675b4ffdd3181ffe22b83ffe02880ffde237dffdc227bffda2078ffce1f6fff007e7fff2eb0d9ff2fb1dcff30b1d9ff30b1d9ff32b2d9ff33b3daff33b3daff34b5dbff36b4d9ff36b4d9ff38b5dcff35b6ddff0991c2ff007db8ff007db7ff007db7ff1077acff4a012dff4a012fff4a012fff4a012fff350733ff379daeff349daeff369daeff379eafff369daeff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff3aa0b2ff3aa0b2ff3aa0b2ff3aa0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b3ff46c6bbff46c6bbff46c6bbff57cbc0ff089487ff027299ff2a4c7eff46022dff4a042fff4b022eff4b022eff510032ff5e0035ff62013bff65003bff580036ff530131ff550131ff550131ff550131ff560031ff813605ffdd8313ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe48819ffe48819ffe48817ffe48817ffe48a18ffe48a18ffe58b19ffdf5549ffcb126cffcf1570ffd21872ffd41a74ffd61c77ffd91f79ffdc2078ffd31a71ff8d0043ff8d0043ff8b0140ff89003fff86013fff79023dff810042ff830042ff860043ffb50b5effdf2680ffe02680ffe12781ffe12781ffe12781ffe22882ffe02982ffe02982ffe22882ffe32984ffe22983ffe12a83ffdd2b80ffe9398effe52c84ffdf257dffda2078ffd51e70ff008078ff2caed5ff2cafd9ff2eb1daff2eb1daff32b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff34b5d9ff37b5daff37b5daff37b5daff1fa7d2ff007eb7ff007db7ff410634ff4a012dff4a012fff4a012fff4a012fff4c002fff379babff369daeff369daeff369daeff369daeff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff39a0b2ff39a0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff3da2b4ff44c7b9ff45c6b9ff46c6bbff3dc8bdff009083ff007299ff285283ff47032eff4a042fff49032eff4b0230ff510032ff5d0037ff62003aff6c0041ff720044ff5f0137ff550034ff560031ff570031ff560034ff843201ffdf8213ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe48819ffe38919ffe38919ffe48a18ffe48a18ffe48a18ffe15550ffca126cffcf1670ffd21872ffd41a74ffd61c77ffd91d78ffda2078ffdd217aff900049ff8f0040ff8d0040ff89003fff86013fff7b013dff800142ff810544ffdd237dffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe22882ffe22882ffe02982ffe02982ffe12a84ffe12a84ffe12a84ffe12a84ffef3892ffe42c84ffda237bffd71d72ff00807bff008282ff2cafd9ff2cb1daff2fb0d9ff30b1daff31b2d9ff31b2d9ff33b3daff33b3daff34b5dbff35b4d9ff36b4d9ff37b5daff38b7dcff34b7dfff4080b1ff47022dff4a012dff4a012fff4a012fff4a012fff4b002fff202143ff349eacff369dacff369daeff369daeff369daeff369eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff389fb0ff3ba0b2ff39a0b2ff3aa2b3ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b4ff3da2b4ff44c7b8ff44c7bcff0daa9bff009088ff009185ff007199ff285283ff47032eff4a042fff4a022eff4e0130ff540134ff5e0039ff67003fff730044ff7c004aff83014eff6f0345ff580237ff570135ff560032ffa04c0bffdf8213ffdf8213ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe38919ffe38919ffe38917ffe48a18ffe48a18ffc92c4effca126cffcf1670ffd21872ffd41a74ffd61c77ffd91d78ffda2078ffdb2179ffc9156bff8c0140ff8b0140ff89003fff84013fff7a003eff7c0141ffde257effdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe22882ffe22882ffe02982ffe02982ffe02982ffe12a84ffe12a84ffe12a84ffe22b85ffe52e86ffe22b82ffd91d72ff028b84ff048e89ff018b8cff2ab0d6ff2fb0d9ff2db1daff2fb2d8ff2fb2d8ff32b2d9ff32b2d9ff33b3daff34b5d9ff36b4d9ff39b5dfff30b4dcff1a7b95ff45022eff48022dff4a012dff4a012fff4a012fff4a012fff4d002fff500032ff3d9eacff349daeff369daeff369daeff369daeff369eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff39a0b2ff3ba0b2ff39a0b2ff39a0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b6ff43c8beff04988dff009086ff009086ff009086ff01719dff2a4f82ff47032eff48052fff49032eff500130ff5a0037ff67003bff750044ff87014eff8c0054ff980c60ff9c1265ff7f064eff5c0136ff5b0036ff77230bffdf8213ffdf8213ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe38718ffe48819ffe38919ffe18919ffe1891affc41069ffcb146effcf1570ffd31973ffd41a74ffd61c77ffd91d78ffda2078ffdb2179ffdd2179ff8f0045ff8b013fff89003fff85003eff76003bffdc247effdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe22882ffe22882ffe22882ffe22882ffe32984ffe12a84ffe12a84ffe22b85ffe22b85ffee3690ffdb2176ff028b84ff01958cff019c91ff02a399ff0ea7afff29b2d8ff2fb1daff2db2d9ff32b2d9ff32b2d9ff32b2d9ff33b3dbff36b4d9ff1098b6ff007f78ff216b6eff45012cff48022dff4a012dff4a012fff49002eff520032ff560033ff560235ff580135ff389faeff339cadff379cb0ff369daeff369daeff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff39a0b2ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b4ff8f956fff01988dff009086ff009086ff009086ff009086ff0170a6ff2a4f82ff47032eff48052fff4a0430ff570036ff820150ff9b025dff9c005eff9d0060ff9f0060ff9f0060ff9d0060ff9d015fff810350ff6d1045ff5d0333ffdd8313ffdf8213ffdf8213ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38718ffe38718ffe48819ffe48819ffe38919ffe38918ffc8106affcd136effcf1570ffd31973ffd41a74ffd61c77ffd91d78ffda2078ffdc2078ffdd2179ffcf1a6fff8c0042ff89003fff85003eff7f0040ffdd247effdf247fffdd237effdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe22882ffe22882ffe22882ffe22882ffe12a84ffe12a84ffe12a84ffe22b85ffe22b85ffe0277cff028b84ff01958cff009c91ff01a399ff00ab9fff02afa2ff09b2a8ff1cb6b0ff28b7b6ff049495ff018583ff00837aff028377ff018176ff007f74ff216b6eff45012cff48022dff48022dff4a012bff520032ff64013aff94035bff95045aff750247ff610437ff439badff359daeff369daeff369dadff369daeff379eafff379eafff379eafff379eafff389fb0ff389fb0ff39a0b1ff389fb0ff39a0b2ff39a0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ffaf8f51ffe1861bff029086ff009086ff009086ff029086ff019085ff006caaff295082ff47032eff490631ff710449ff99015aff9a005cff9a005dff9a005eff9a005eff9d0060ff9d0060ff9d0060ff9d0060ff9e0060ff79014bff5f0037ffde8230ffdf8014ffdf8213ffdf8213ffe08314ffe08314ffe08314ffe08314ffe18516ffe18516ffe28617ffe28617ffe28617ffe28617ffe38718ffe38719ffe48819ffe2871affc12847ffc9116dffcb1370ffcf1570ffd31973ffd41a74ffd61c77ffd81e78ffda2078ffdd2179ffdd2179ffdd2178ff910044ff890140ff86003effca216fffdd237dffdd237effdf247fffdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffe12781ffe02982ffe02982ffe02982ffe12a84ffe12a84ffe12a84ffe22b85ffe03183ff008c84ff00938dff009c93ff00a49bff02a99cff00b1a4ff0cb3a7ff1cb7aaff23bbafff20bcadff01867cff01847bff018379ff018176ff007f74ff226c6fff45012cff45012cff49032eff500033ff98035bff9b035fff9b035fff9b035fff9b035fff9c0460ff95055eff5e1a59ff349eacff369daeff379eafff379eafff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff39a0b2ff39a0b2ff3ca1b3ff3ca1b3ff499fa7ffdf8518ffe08619ffe08619ff028e87ff009086ff009086ff029086ff029086ff026bacff2a4f85ff470531ff7a044aff99015cff9a005cff9a005cff9a005dff9a005eff9a005eff9d0060ff9d0060ff9d0060ff9d0060ff9f0060ff9e0060ff810351ff620139ffdc8013ffdf8215ffdf8215ffe08316ffe08316ffe08314ffe08314ffe18516ffe18516ffe18516ffe18516ffe28617ffe28617ffe38718ffe38719ffe48915fff4814cffc40f68ffca126cffcb146effd01771ffd31973ffd41a74ffd61c77ffd91f79ffda2078ffdd2179ffdd2179ffdd2179ffdb247aff8a0141ff89003fffd7257dffdd237effdd237effdd237effdf247fffdf247fffdf247fffe02680ffe02680ffe02680ffe02680ffe02680ffe12781ffe12781ffe12781ffdf2781ffe02982ffe02982ffe12a83ffe12a84ffe12a84ffe22b85ffc63a82ff04918bff019d94ff02a79dff18b1a4ff37b9afff39bbafff37bdb0ff35bfb2ff35c1b3ff35c1b5ff089b8eff02847bff018379ff018176ff007f74ff246c6fff46022dff47032eff5c023bff9c035dff9b035fff9b035fff9b035fff9b035fff9b035fff9b035fff9b035fff9b035fff9b035eff6a2d6dff389dacff379eaeff379eafff379eafff379eafff379eafff379eafff389fb0ff389fb0ff389fb0ff389fb0ff39a0b2ff39a0b2ff39a1b1ff5d9f9effdb8524ffdf851affdf8518ffdf8518ffdf8518ff2eb1d7ff32b2d9ff33b2d9ff35b3d9ff37b4d9ff39b5dbff3ab6dbff3cb6dbff0e7193ff259ecaff31b2d9ff32b2d9ff33b3d9ff33b4d8ff34b5d9ff36b4d9ff36b4d9ff37b5daff39b5daff3ab5dbff3bb5dbff3cb5d9ff3cb6daff3eb7ddff00513fff0e7060ff3cc1b4ff3ec3b7ff41c3b6ff44c4b7ff46c5b8ff3ebcadff139276ff005d44ff015853ff34b2daff35b3d9ff38b3d8ff39b3d9ff3ab3d9ff3cb4d9ff3db4d8ff3db5d9ff3fb6dbff40b6daff41b6daff44b7daff46b7dbff3ab2d8ff35697dff6e825eff4ac4b8ff4ec4b9ff52c6b9ff55c6b9ff58c7bbff5ac8bcff5cc8bdff5dc8beff5ec9beff60c9bfff6e7c7cff960017ffa40419ff2db1d7ff30b2d8ff31b2d9ff33b3d9ff35b4d8ff37b4d9ff39b5dbff3ab6dbff005866ff2fb2d8ff31b2d9ff32b2d9ff33b3daff33b3d9ff33b4d8ff36b4d9ff36b4d9ff37b4d9ff38b5daff38b5daff39b5dbff3bb5daff3cb6daff3eb8dcff00513eff015340ff005641ff107a65ff1f9884ff219e87ff0b8b6fff018868ff008e6bff008a68ff026347ff30a8ccff35b2d9ff36b2d8ff38b3d9ff39b3d9ff3bb4d9ff3cb4d8ff3db5d9ff3eb5daff3fb6dbff41b6d9ff43b7daff44b7daff46b7dbff68685aff8a5c2aff49c4b7ff4ec5baff52c6baff56c6baff58c7bbff5bc8bcff5dc7bdff5ec8beff5fc8beff5fc9bfff7d4751ff970016ffa60419ff2bb0d8ff2eb1d8ff30b2d8ff31b2d9ff33b3d9ff35b4d9ff37b4daff1f8f97ff01594aff2fb1d8ff31b2d9ff32b2d9ff32b2d9ff33b3daff33b4d8ff34b3d8ff36b4d9ff36b4d9ff36b4d9ff38b5daff39b5dbff3ab6dbff3bb6d9ff2e9ab0ff00513eff015340ff005641ff006249ff006d52ff00785aff008061ff018968ff008e6cff009370ff019270ff0e7e74ff34b2d9ff35b2d9ff37b3d8ff38b3d9ff3bb4daff3bb4d9ff3cb4d9ff3db5d9ff3eb5daff40b6daff43b7daff43b7daff5597a5ff913d03ffa04706ff70744eff4ec4b9ff53c6baff57c6baff5bc8bcff5dc7bdff5fc8beff60c9bfff60c9bfff799491ffab1525ffb71b28ffbe1e29ff0d7b81ff249cbdff2eb1d9ff2fb1d9ff32b2daff2aabc5ff11988eff01926eff01694dff249bb9ff30b1d8ff31b2d9ff32b2d9ff32b2d9ff33b3d9ff33b3d8ff35b4d9ff36b4d9ff36b4d9ff38b5daff39b5daff39b5dbff3ab6daff1c7b80ff00513fff015340ff005642ff01654cff007559ff008263ff008b6aff00906eff019371ff009571ff009673ff019875ff0c8279ff34b2d8ff36b3d8ff38b3d9ff39b3d9ff3ab3d9ff3cb4d9ff3db5d9ff3eb5daff40b6dbff43b7d9ff4998a7ff893a05ff923e04ffaa4f04ffc2610bffab8039ff80af8bff5ac6bbff5ec7bdff61c8beff62c8bfff629996ff974d52ffc82c31ffc92c30ffc92d31ffc92e32ff066253ff015240ff005543ff006351ff007259ff008061ff018b69ff00926fff009774ff0d7d70ff2fb2d7ff2fb1d8ff30b2d9ff32b2d9ff32b2d9ff33b3d9ff33b3d8ff34b4d9ff36b4d9ff36b4d9ff37b5daff39b5daff2b9ec0ff024c3bff01513fff005340ff026e54ff018a6bff029b79ff019d7bff039e7dff0ca383ff08a281ff16a886ff019f7cff009976ff009774ff018372ff1b94a6ff34afd2ff38b3d8ff39b3d9ff3ab3d9ff3db5d9ff3eb5d9ff2da7beff119194ff336048ff8b3a02ff923e04ffab5004ffc3620bffd3700fffda7b13ffdf8216ffdc811bff015c45ff500a10ffae1c25ffc6282effc72a2fffc82b30ffc82d30ffc92e31ff066354ff005340ff015744ff016e56ff038b6cff029574ff079b79ff019a76ff009a76ff009874ff2e6872ff39a3cbff2fb2d8ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b4daff34b4d9ff36b4d8ff37b4d9ff3698baff00566eff014c3bff00503eff038768ff019d79ff019d7aff029e7cff009e7cff009e7cff019f7dff019f7dff009f7dff16aa8aff04a582ff009a77ff018370ff017772ff007976ff017e78ff018785ff028381ff028580ff01867eff02877fff01867cff356149ff8b3a03ff933e02ffb25406ffc8680bffd7760fffdb7e12ffdf8217ffdf8116ff025c44ff7a171dffc5262dffc6282fffc72a30ffc82b31ffc82c32ffc92e31ff066253ff015945ff02896bff009c78ff019d79ff019d7aff009e7cff019e7cff0ca582ff019c79ff434a5aff9e0553ff9168abff5891c3ff30b2d9ff32b2d9ff33b3daff31b3daff3db2d6ff7f79b2ff7d2d67ff412a55ff00566fff024b3aff018969ff029b78ff009c78ff019d7aff019d7bff009e7cff009e7cff009e7cff019f7dff019f7dff00a07eff01a17fff05a380ff018470ff017773ff007977ff017e78ff018d86ff00948bff018882ff01857fff02877fff01867cff336048ff8a3903ffbe6515ffde8625ffe38c28ffe38e30ffe99733ffe48b21ffe08316ff025c45ff7d2f2dffc5272effc6282fffc62a30ffc72b31ffc82c32ffc92e34ff056253ff019371ff029b78ff019b78ff019d79ff019d79ff009e7bff009e7cff00a07dff03a07cff60576effdf257fffe02680ffe02680ffe02680ffde2781ffd82982ffe12883ffe12984ffdf2c81ffa30b52ff432a56ff015671ff017056ff029b78ff029b78ff009b78ff009c78ff019d7aff019d7bff029e7cff019e7cff009e7cff019f7dff019f7dff01a17fff02a17fff038975ff017772ff017974ff017e78ff008d85ff009a90ff02a49aff028e88ff01867fff01867cff336048ffc97219ffe18821ffe18824ffe28b26ffe38c28ffe38f2cffe4902dffe38a20ff01664bff614137ffc4272dffc5292fffc72b31ffc82c32ffc92e34ffc92e34ff068971ff009a77ff009a77ff029b78ff019b78ff019d79ff009e79ff009e7aff009e7cff019f7dff766381ffdf247fffdf247fffe02680ffe02680ffe12781ffe12781ffe22882ffe12883ffe12984ffc4176bff462a57ff005670ff059372ff029b78ff029b78ff009b78ff009c78ff019d79ff019d7bff019d7bff019e7cff009e7cff009e7cff019f7dff009f7dff00a17eff038b77ff017772ff007a74ff017e79ff008d85ff019a90ff00a79bff01afa2ff03958cff00867cff2f6b54ffdf841effe08621ffe18824ffe18b28ffe38c29ffe28e2dffe38f2effe5902cff008a68ff067255ffaf2e31ffc5292fffc72b31ffc72c32ffc72e34ffc72e34ff00927aff009976ff009a77ff019a77ff029b78ff019c78ff019d79ff019d7aff009e7cff019f7dff9e4d80ffde237effdf247fffdf257fffe02680ffe02680ffe12781ffe12781ffe02982ffe12a84ffdc257fff4f2c5dff00566fff039173ff009a77ff019a77ff029b78ff029b78ff009c78ff019d7aff019d7bff029e7cff009e7cff009e7cff009e7cff019f7dff00a07dff0b8677ff017772ff007a74ff017e78ff018e87ff009e95ff03ab9fff0eb4a7ff1fb9adff16a79bff088276ffdf821cffe0841fffe08724ffe18b28ffe28b2affe28d2fffe38f2eff998f44ff018d6aff009471ff188367ff96403dffc62a30ffc62c31ffc62d32ffc82e34ff5b625fff049774ff009976ff009a77ff019a77ff029b78ff029c79ff019d79ff019d7aff2c857bffde237cffdd237effde237effdf257fffe02680ffe02680ffe02680ffe12781ffe22882ffe12882ffe12985ff6b4178ff005670ff027975ff009a75ff019a77ff029b78ff029b78ff009c78ff019d79ff019d7bff019d7bff029e7cff009e7cff009e7cff019f7dff069e7eff1c3c4cff017772ff007973ff018983ff1dafa4ff2dbaaeff45c2b8ff4cc5baff4cc7baff5dcdc2ff38bbafff54946effde8420ffdf8623ffdf8926ffe08b29ffe28c2cffc4923bff3ca57dff1ca383ff13a181ff019e7aff019874ff2b5b91ff624a6eff6b5372ff745975ffbc1424ff9a3235ff207f64ff019975ff009a76ff019b77ff019b78ff019c79ff2f845affc03163ffdd217dffdd237effdd237effdf247fffdf247fffe02680ffe02680ffe12781ffe12781ffe22882ffe22983ff0a516eff005771ff015b74ff008b74ff009976ff019a77ff029b78ff029b78ff009c78ff019d79ff019d7bff019d7bff029e7cff009e7cff009e7cff412942ff1f3b4dff007671ff179890ff45c5b8ff4ac6baff4dc7bbff4ec7bbff54c8bdff59c8beff5bc9beff63cac0ff5dccc1ff52c2afff7c8e69ff71672fff719251ff5b985fff0aa07fff14a281ff1aa283ff1ea586ff21a788ff089f7bff0165a6ff016aaaff027bb8ff018dc3ffc21121ffc31221ffc41221ff9e3032ff64564aff63584dff6a564bffb62d2cffbb5e0dffce5a27ffdb227affdc227dffdd237effde237effdf247fffdf257fffe02680ffe02680ffe12781ffe02781ff6a4d70ff00536eff015c74ff09768dff1d859bff0e9585ff009a76ff019a77ff029b78ff029b78ff009c78ff019d79ff019c7bff009d7bff0e8e74ff49294aff600539ff243c50ff22a299ff45c5b7ff46c5b8ff49c5b9ff4cc6baff4ec7bbff54c8bdff59c9bdff5bc9beff60cabfff65cbc1ff60cdc1ff1e98acff00705cff009c7aff019d7cff0a9f7fff14a180ff1ba283ff1ea485ff1ea486ff16a584ff0064a7ff006dadff0e90c4ff28a8d3ffab1e31ffc21222ffc21221ffc31421ffc31421ffc41421ffcb2b20ffd2620fffda7b10ffdf8112ffa4391cffc32b66ffdc227cffdd237effde237effdf247fffdf257fffdf2580ffda3375ffb8703cff486c55ff0f657cff2b92a4ff39a0b2ff3ba1b3ff3ca1b3ff35a0abff229f95ff119e88ff069a79ff059a78ff1f8d78ff3e5465ff3e3b4fff5f0237ff5f0338ff61053aff324d5fff42c4b6ff43c4b7ff45c5b7ff48c5b9ff4cc6baff4ec6baff54c7bcff58c8bcff5cc8beff60cabfff64cac0ff68ccc0ff2e9db3ff008181ff009a79ff019c7bff079e80ff12a080ff19a181ff1ba383ff1ba485ff1aa487ff1078b1ff35a8d2ff47b6daff48b7dbff0a5a73ff913010ffa82615ffbc3817ffd34c1cffd76c14ffe18516ffe28618ffe78d21ffe28516ff963e04ff7e5d22ffa27828ffbb514affc65851ffd26358ffd86d5dffd5974effb39425ffa98a1eff547c63ff349cadff369daeff389fb1ff39a1b2ff3aa1b3ff3ca2b3ff3ea3b3ff43a5b4ff345e76ff94005aff97015cff98015bff62013bff5e0237ff5f0338ff600439ff4c6679ff41c3b5ff43c4b6ff45c5b7ff47c5b8ff4bc5b9ff4dc6baff52c7bcff57c7bcff5cc8bdff5fc9bfff63c9c0ff66cac0ff339db5ff007a9dff009a77ff009b7aff019c7cff099e7fff0f9f80ff13a181ff13a181ff15919fff3fb4daff43b5daff46b6daff48b7dbff0a5a74ff83380affbd640fffe18516ffe28617ffe28616ffe38717ffe38717ffe38817ffe38d1fffa14708ff7e5e22ff997d1cff9f831dffc6aa37ffd5bc47ffddc550ffe0c754ffdbc250ffb19324ff699270ff349caeff359daeff379eafff389fb1ff39a1b2ff3ba1b3ff3da2b3ff41a4b4ff029a92ff6b2764ff96005bff98015cff8b0153ff5f023aff5c0235ff531546ff279199ff41c3b5ff41c4b5ff43c4b6ff45c5b7ff4ac5b9ff4cc6baff50c6bbff55c7bcff59c8bcff5dc8beff61cac0ff63cac0ff31a1bdff0180bbff018aacff019984ff009b7bff019c7cff029e7fff059f85ff06849aff1f89baff3eb3d8ff41b5daff44b5daff46b6daff0a5a73ff9e500fffe08314ffe18516ffe18516ffe28617ffe28617ffe38718ffe38717ffbd610cffa94e08ff7e5f22ffa68b26ffd2ba47ffe0c852ffe0c855ffe1c956ffe1ca57ffe1ca57ffd2b644ff7a9764ff319aaeff349cadff369daeff379eafff39a0b1ff39a0b2ff3ca1b3ff3aa3b2ff00aa9dff0eb5a8ff4c8597ff6c6088ff7c447aff7b405aff283358ff01647aff00657cff3fc0b6ff40c4b5ff43c4b6ff44c4b6ff48c5b8ff4ac5b9ff4ec5baff52c6bbff56c8bcff5ac8bcff5dc9beff5fcac2ff0079b2ff008bc2ff039aceff0fa5d4ff19aad3ff1eacc9ff21aed2ff25aed7ff1191c2ff1e8fbeff3cb2d7ff3eb4d8ff42b4daff44b6dbff085a72ffa56016ffdf8213ffe08415ffe18516ffe18516ffe28617ffe28617ffe38719ffab4d04ffaa4e06ff736530ffd2ba47ffdec751ffe0c852ffe0c853ffe0c855ffe1c956ffe1c956ffe1ca57ffd1b844ff569c8eff329bacff349cadff369daeff379eafff38a0b1ff3ba1b3ff0f9d9bff00a99eff0fb5a9ff29bcb0ff35c0b2ff1ca093ff4d8457ff016077ff01647bff016a81ff128895ff41c3b7ff42c4b5ff43c4b6ff46c4b7ff48c5b8ff4cc6baff4fc6baff53c6bbff56c7bcff58c7bfff2199c3ff22a2d0ff3db5daff43b7d9ff45b7daff48b6daff59bedfff46b9daff49bce0ff34b3d9ff1891c0ff39b2d8ff3bb3d9ff3eb3d9ff40b5daff167b8eff756c3dffdf8213ffe08314ffe08415ffe18516ffe18516ffe28617ffe38717ffb05308ffaa4d08ff467254ffddc650ffdec751ffdec751ffe0c852ffe0c853ffe1c956ffe1c956ffe1ca57ffe1ca57ffa5b767ff0f8b8dff1b9094ff27959fff218c97ff1c8c93ff038782ff009a91ff00a99eff0fb5a9ff28bcb0ff34c0b2ff21a99cff4b8457ff015f77ff057489ff11a1afff1db2beff1badb8ff33bbbbff42c3b8ff44c4b5ff47c4b6ff4ac5b8ff4cc6b9ff4fc5bcff2995acff259cc8ff3db5d8ff3db5d9ff40b6dbff41b6d9ff44b6d9ff46b7dbff48b7dbff49b8daff4bb9dbff4fbddeff3ab6d9ff2aa0c2ff48a6b9ff3ab3d9ff3cb4d9ff2c96a9ff2a8592ffbf791dffdf8213ffe08314ffe08415ffe18516ffe18516ffe28617ffd57814ff375d58ff0a6979ffddc650ffddc650ffdec751ffdec751ffdfc751ffe0c854ffe1c956ffe1c956ffe2ca57ff71a769ff00867eff01867dff028179ff017571ff017875ff00867fff009a91ff00a99eff0fb4a8ff28bcb0ff34c0b2ff39c2b5ff4c8357ff047287ff13b0bdff18b1bdff1bb2bdff1fb2beff22b3beff25b4bfff2ab5c0ff31b9bfff33babeff01797bff005e95ff2a9ecbff3bb4daff3cb4daff3db5d9ff3fb5daff40b6dbff43b6daff45b6daff46b7dbff47b7dbff48b8daff4ab9daff4abadcff3caac2ffd8c154ffc9c76fff91bd96ff2c97a9ff319aabff2d909dff817e5affdc831bffdf8314ffe08515ffe18415ffa97a34ff3a6c61ff00667dff017086ff7b9b68ffddc550ffddc650ffdec751ffdec751ffe0c853ffe0c855ffe0c956ffbdbb59ff03847aff008880ff00877eff018279ff027571ff017875ff01867fff009a91ff00aa9eff0fb5a8ff29bcb0ff34c0b2ff39c2b5ff568e61ff0ba5b3ff10b0bcff14b1bcff19b1bdff1db2beff1fb3beff23b4bfff26b4bfff29b6c1ff2db6c1ff058c90ff0d74a5ff38b3d9ff3ab3d9ff3bb4daff3cb4d8ff3eb5daff3fb5daff41b6d9ff43b6daff45b7daff46b7dbff47b7dbff48b8dcff48b7dbff4ab1c5ffdec759ffdec85affdec85bff2c97a9ff319aabff309aaaff107cafff016faeff0370aeff0571acff0172afff006791ff00637aff00667eff017a8fff018c9eff449c81ffbbbe5cffdec751ffddc751ffdfc751ffddc857ff7ba563ff05897eff018e84ff019086ff06948aff058d84ff017571ff017976ff008f86ff12aca2ff2dbfb4ff43c6baff3ac2b4ff3ac2b5ff39c2b4ff70a365ff08afbbff0dafbbff12b0bcff17b1bdff1bb2beff1db2bdff1fb3beff24b4bfff26b5c0ff29b6c1ff00878bff1d8bb6ff37b3d9ff38b3d9ff3ab3d9ff3bb4d9ff3db5d9ff3eb5daff3fb6dbff40b6daff42b6daff43b7daff45b7dbff45b8dbff46b8dbff62b7bfffdec758ffdec859ffdec85aff2b97a9ff319aabff309aaaff117cadff016faeff0270afff0171afff0172afff016790ff00647bff01667eff007a8fff008d9eff009bacff02a6b4ff02abb8ff0faaacff5e8d57ff5d9460ff029288ff018d84ff018e85ff008f85ff009086ff039187ff017471ff1d9f97ff40c4b7ff45c5b8ff46c6b9ff49c7baff4cc7baff5acdc3ff44c5b7ff71a464ff2ca79bff08afbcff0eb0bbff13b0bcff18b1bdff1ab2bdff1db2bdff20b3beff23b4bfff26b5c0ff028a86ff1c9baeff35b2d9ff37b3d8ff38b3d9ff3ab3d9ff3bb4d9ff3db5d9ff3eb5daff3fb5daff40b6daff41b6daff42b7daff43b7daff44b7daff379da1ffdec758ffdfc858ffdec858ff2c96a8ff319aabff309aabff117caeff016faeff0170afff0072afff0172afff016790ff01647bff00667eff027a90ff008d9eff009babff01a5b4ff01abb9ff00adb9ff589a69ff6fa76bff089b90ff018d84ff018d84ff018f85ff009086ff049087ff209f96ff3cc3b6ff40c4b6ff42c5b6ff46c6baff47c6b9ff4ac7baff4dc8bbff50c8bcff89bd79ffa3aa52ff17acafff0aafbbff0fafbdff13b0bcff16b1bcff19b1beff1cb2beff1fb2beff0d9fa0ff028d85ff0c8e91ff33b2d8ff35b3daff37b3d9ff38b4d9ff39b3d9ff3bb4daff3bb4daff3cb5d9ff3eb5daff3fb6daff3fb6daff42b7dbff42b7daff2cb2aeff4e9768ffddc754ffdec757ff359cadff339bacff319aabff1080afff0175b3ff0278b4ff027bb6ff027bb5ff006a92ff00637aff00687fff017f95ff0095a6ff03a3b3ff02abb9ff02aeb9ff00aeb9ff5c9d6aff8e9842ff2ab7aaff018f86ff018d84ff018e85ff029086ff028f84ff39c2b5ff3bc3b6ff3fc3b7ff41c4b6ff43c4b6ff46c6b9ff48c7baff4cc7bbff4dc8bcffa2c67dffdfca58ffddca5cff74bd8bff22b1b2ff0eb0bbff13b1bcff17b1bdff119da3ff089492ff019b93ff01ab9fff0aa297ff1296a4ff32b2d9ff35b2daff36b2d8ff38b4d9ff38b4d9ff3ab3daff3bb4daff3db5d9ff3db5d9ff3eb5daff3fb6daff38bbc2ff38c1b3ff37c1b3ff4d9c99ffafac5eff3da3b4ff47a6b7ff359eaeff0f84b1ff0179b4ff0079b4ff007ab5ff017bb6ff006c93ff006279ff0791a3ff12b0beff17b3bfff1cb2bfff28b8c3ff26b4c0ff0fb1bcff6eb279ffdac24affb0c46bff4ec1a5ff1ca89dff05978dff009086ff01849dff37c0b4ff3ac2b5ff3cc3b6ff3ec4b7ff41c5b6ff44c5baff46c6baff47c6b9ff4bc8bbffd7c95cffe0c956ffe0cb59ffe0cb59ffe1cb59ff995221ff58131dff007571ff017a76ff08968eff27b8aeff35beb4ff49c2b8ff48c6baff2bb0b5ff30b1d5ff35b3daff36b3d8ff38b4d9ff38b4d9ff3bb4daff3bb4d9ff3bb5d8ff45b7d9ff44c0c1ff3ac3b5ff39c1b3ff38c1b3ff198ab1ff0163a4ff3ba2b3ff3ca3b4ff42a6b7ff0e84b3ff0179b4ff0179b4ff0079b4ff007ab5ff006b93ff029baaff09b0bcff0fb0beff13b2bdff17b3bfff1bb4bfff20b5c0ff26b5c0ff74bc86ffe1cc5bffe1cb5bffbfa535ff233f81ff006daaff189fd0ff29aed8ff22a1bcff39c1b5ff3ac2b5ff3cc3b6ff3fc4b7ff41c5b6ff44c5b7ff46c6b9ff80c692ffe0c854ffdfc854ffdfca56ffe0ca58ffc3a838ff8b341aff55111cff007471ff2fafa5ff47c5b8ff4cc6baff4fc7bbff55c8bdff59c9bdff5fcbc0ff44c7b9ff23a1a9ff1c95a8ff39b8ccff3cb7d1ff42bcd3ff48becbff51c2c8ff5ec9beff60cabfff63cdc2ff51c9bcff3ac1b3ff198ab0ff0163a3ff3aa2b3ff3ca3b4ff3ca2b4ff1591bdff0179b4ff0179b4ff007ab4ff007ab4ff0682a9ff00aebbff04afbcff0ab0bbff10b1beff16b2beff19b2bfff1cb4c0ff20b5c0ff85c089ffe1ca57ffe0cb58ffceb445ff2f518dff2fb1d9ff37b4d9ff39b5daff3fb8dbff40bcd2ff489498ff3bc3b5ff3ec4b7ff3fc4b7ff5ac5a8ffa7c677ffdec650ffdfc751ffe0c854ffe0c855ffe1c854ffa2721fff73000fff55121cff2fafa3ff41c3b5ff44c4b7ff48c6b9ff4cc6baff50c8bcff55c8bdff57c9beff57cabcff17918bff32b1a7ff4bc5b9ff4dc6baff50c6bbff55c7bcff57c8bcff5ac9bdff5bc9beff5dc9beff5fcabfff4dc8bbff1b8ab2ff0164a4ff38a1b2ff3aa2b3ff3ca2b2ff33b3d8ff28abd6ff1a98c9ff1796c9ff1b97c6ff1ba3c7ff00aebaff02aebbff05afbbff0ab0bcff11b1bdff15b2beff1ab3bfff1cb3bfffbfc469ffe1c956ffe1ca58ffdcc552ff4a5c91ff2bb0d7ff32b2d8ff38b5dbff3cb7dcff41b8dcff820041ffc4196cffde277fffe02881ffd8237affdb7a65ffdfc553ffdfc651ffdfc751ffe1c857ffa1662fff6f000dff73000fff630916ff3cc2b5ff3ec3b5ff43c4b6ff45c5b7ff48c6b9ff4ec7bbff50c7bcff51c8bcff54c9bdff28a099ff44c4b6ff48c4b8ff4bc5b9ff4dc6baff50c6bbff52c7bcff55c8bcff56c8bcff58c9bdff59c9bdff59cabeff1d8bb1ff0164a4ff37a1b2ff38a1b2ff37a7c0ff32b2d9ff33b3daff33b3d9ff33b4d8ff35b4d9ff35b4d9ff0fadc2ff00aebaff03aebbff07aebbff0db1bdff12b1bdff16b2beff55b69affe0c752ffe1c956ffe1ca56ffcb9459ff712d6cff28afd8ff2db0d8ff32b2daff38b5daff4781a9ffc8196fffdf257fffe02680ffdf2781ffe12a84ffe22a82ffe32c83ffad0e5bff00837eff64000bff69000dff810010ff8e0216ff770010ff3dc0b3ff3cc3b6ff3fc4b6ff42c4b6ff45c5b7ff49c5b9ff4bc7baff4ec7bbff4fc8bbff4f8a73ff44c3b6ff46c5b7ff47c5b7ff4bc5b9ff4dc6baff4fc6bbff50c7bbff52c7bcff54c8bdff55c8bdff56c8bdff0e73a5ff0163a4ff36a0b1ff34a6c2ff31b3d9ff31b2d9ff32b2d9ff33b3daff33b3daff33b4d8ff35b4d9ff36b4d9ff21b1ceff0eb0c4ff04aebcff07afbcff0b9fb8ff9ac07effdec651ffdfc751ffe0c853ffbe9657ff82003cffa50054ffb32278ff8065a4ff6b70a9ff0e7894ff1c607effdd217cffdd237effdf257fffe02680ffe02781ffe12983ffaf095dffa1004fff00837cff64000cff7f0613ffac0e1dffc9202cffc4212dff7b3d44ff3ac2b5ff3cc3b6ff3fc3b6ff42c4b6ff45c5b8ff47c6b9ff48c6baff8a6e3bff70825dff42c3b6ff43c4b6ff43c4b6ff46c5b7ff49c5b9ff4bc6baff4dc6baff4ec7bbff4fc7bbff51c7bcff51c8bdff015d9fff0163a3ff2fb1d5ff2eb2d8ff2fb2d8ff30b3d9ff31b2d9ff33b3daff33b3daff33b4d8ff34b5d9ff34b4d9ff36b4d9ff34b0daff0087bfff04a0cfff037fb8ff026aa4ff4e3750ff236c68ff036c82ff363862ff840041ffa30055ffc70c6affd91d78ffa63078ff01667fff017086ffcc277dffdc227dffde237effdf257fffde2680ffdb237cff9d0051ff65305fff00847cff7e0510ffc31623ffc61924ffc71b25ffc91d27ffcb1f29ffac4647ff6b8276ff43c1b3ff3ec3b6ff47c3b3ff769f75ffb38234ffd4730effab5308ff48b7a6ff40c3b5ff42c4b6ff43c4b7ff45c5b7ff47c5b8ff49c6b9ff4ac6baff4cc7bbff4dc7bbff239396ff025d9dff2ca0cdff1ba3a2ff2bb0d2ff2fb2d7ff2fb2d8ff30b2d8ff31b2d9ff32b2d9ff33b3daff33b3d9ff33b5d9ff28a2ccff0c7ab6ff0088c1ff05a0cfff027fb7ff006aa4ff3f3460ff00667dff016d84ff363963ff840042ffa40055ffc70d6affd91d78ffa63077ff006880ff028a9bff337a9cffc03383ffdc227dffdd237dffdf247fffde257fff7b215cff047a76ff00837cffbe1221ffc41522ffc51723ffc61925ffc71b26ffc91d27ffca1f28ffac2d15ff8f3b03ffa04604ffb65707ffc6650bffd06f0cffd6770effdc7c0fffbd802bff5cad90ff3fc2b4ff42c4b6ff43c4b6ff44c5b7ff45c5b7ff46c5b7ff48c6baff1f9197ff00687aff1378b0ff39b3d8ff38c2b5ff34c0b2ff1a8fb2ff3e97b1ff2fb2daff30b2daff31b2daff33b2dbff5296a5ff75715cff135e92ff006babff0088c1ff05a0cfff0583bbff006aa3ff3f3460ff00667dff016d84ff363963ff840042ffa40055ffc70d6affd91d78ffa63076ff006880ff01899bff02a1b0ff01adb8ff367ba9ff6b4995ff674d98ff1b6cabff00727aff017c77ff00857dff922e37ffc11321ffc41522ffc51824ffc61925ffc81b25ffc91c26ffa33012ff953e04ffbd600dffd47615ffdc801bffe0841bffe1871dffe89127ffe08514ffde8114ff7d8758ff219196ff209596ff24a0a1ff22a6a8ff22afb3ff01a6b3ff0399a8ff006879ff1a83b2ff37b2d7ff38c1b4ff33c1b2ff036e8eff8b3a07ff8f3d04ffa64b04ffbe5d07ffb95a08ff9e4405ff9a4204ff145e92ff006caaff0088c1ff04a0cfff0f8ec1ff006aa4ff3f3460ff00667dff016d84ff353962ff830042ffa40055ffc70e6affd91c78ffa73076ff016881ff018b9eff01a3b1ff01adb9ff008bb1ff006eadff0171afff0172afff007278ff007f7aff0da69bff439d98ffa3343dffc21321ffc31421ffc41623ffc71823ffac2718ff9f4a0affd17712ffe1861affe2871cffe3881dffe4891effe38a1fffe28b20ffe48d20ffe38a19ff716c43ff025f77ff01647bff007389ff008a9dff009babff00a5b3ff01abb7ff028191ff1a85a8ff36b3d8ff39c2b5ff34c0b3ff036f8fff8c3b07ff8f3d04ffa54c04ffbd5e07ffb85906ff9d4404ff9a4204ff135e92ff006caaff0088c0ff04a0cfff21acd6ff036ea6ff413461ff00667cff006e84ff343b62ff840042ffb3085effdb237dffdb207affa43278ff078598ff11a4b3ff18b0bcff1ab3beff028cb2ff0174b2ff0071afff0172afff0b8187ff34baafff44c5b9ff4cc7bbff58cbc0ff5faca4ffb1511bffaf581aff58704eff803a0affde8318ffdf8518ffe08619ffe2871bffe3881dffe3881dffe4891effe3891effe48b20ffe58d21ff746f43ff025f76ff00657dff038395ff17a4b4ff20acbcff20b6c3ff09afbbff04adb8ff0f7490ff34b2d8ff39c2b5ff35c0b3ff036f90ff8c3b07ff8f3d06ffa44b04ffbf5f08ffba5b09ff9e4504ff9a4204ff135d92ff006caaff0088c0ff05a0ceff22add6ff148fbeff463362ff016e84ff01788cff354067ffc61a6effdf257fffe22983ffe42e86ffab4c8eff05aebbff14b2bdff20b4c0ff27b7c1ff0e95baff0d91c7ff1f9ecfff037bb6ff1a99a2ff3bc2b5ff3fc3b7ff47c6b8ff4cc8bbff53c9baffb69828ffa7881cff527249ffa55e17ffe08418ffe08518ffe08619ffe18619ffe2871affe2871cffe3881dffe4891effe4891effe38a1fff767348ff025f76ff149dabff21b2beff24b3beff29b5c1ff2cb6c1ff31b8c2ff1bb5bfff05697bff359cacff39c2b5ff35c1b3ff026f8fff8a3b07ff933f06ffc4670dffd87911ffb95d0affa74d0aff9e4504ff145d90ff006caaff0088c0ff05a0ceff22add6ff27add6ff5c608fff028fa1ff01778cff375d82ffd91e79ffdc227dffe02680ffe32a85ff91639bff00acb9ff06afbbff15b1beff1fb4bfff2fb4d4ff36b4d9ff38b5daff24a5d1ff149ab8ff34c0b3ff3ac2b5ff40c5b7ff46c6b9ff7ebe88ffd7bd43ffb59828ff52724bff846c39ffe08317ffe08417ffdf8518ffe08619ffe18619ffe2871affe3881cffe3881cffe4891dffe4891eff717148ff0d93a4ff17b0bcff1bb1bdff1fb2beff24b3bfff28b4c0ff2ab6c1ff2eb8c4ff05697aff6a6a1fff3cc3b4ff35c1b3ff017190ff9d4b0effda7f16ffde8216ffb5580affa84d06ffa94e06ffac520aff165e90ff006baaff008ac2ff09a1d0ff22add6ff26aed5ff845d95ff00acb8ff02aebaff12b1beffa14387ffdb1f79ffdd227dffdc277fff880b50ff4e5381ff2b7d9eff338491ff26b1d0ff30b2d7ff34b3d9ff36b4d9ff39b5dbff3bb7dbff30b2caff388192ff65a16dff80a65fffc8ac34ffd6bc43ffdec44dff618558ff487461ffe18216ffdf8316ffdf8518ffe08518ffe08619ffe18619ffe2871affe2871affe3881bffe4891dff23646cff09adb9ff0fb0bbff16b0bcff1bb1bdff1fb2beff22b3bfff25b4bfff27b5c1ff00586cff686a1eff52c9bdff39c1b3ff128aa7ffcd720fffe08415ffca6c0effa74b05ffa84c06ffa94e06ffaa4f06ff165e91ff1287bdff23a6d3ff35b3daff3eb8ddff2bb1d5ffa30252ff67376dff4a5783ff505884ff822b6bffa00051ff77013fff4d0131ff6b0040ff87004eff940057ff982330ff2ab0d8ff2eb0d8ff31b2d9ff34b3d9ff2babd4ff0f8ec1ff007db7ff63306bff997e1bffa88c1effc8ad33ffd6bc43ffdec44eff72b882ff07a3b1ff95945bffdf8317ffe08317ffe18418ffe08518ffe08619ffe18619ffe2871affe3871cff51796cff0c6f85ff048d9eff07aebaff0eafbbff15b0bcff1ab1bdff1db3beff22b3bfff1b9eaaff015669ff686a1eff47c6baff4dc8bcff1791b1ffde8013ffde8314ffdc7f14ffb05307ffa74c06ffa84d06ffa94e07ff2d81a7ff2eb2d8ff34b4daff37b6dbff3db7dbff41b8dcffac075aff9d014eff9c004eff9e0050ff9e0050ffb80e63ff880e4fff5b0238ff860051ff950258ffa50f67ffa82d32ff588d92ff2cb0d9ff2eb1d7ff26a9d4ff007bb5ff007bb6ff205e9bff8a0240ff997e1bffaf9223ffcdb23bffdac149ffdec54fff70b883ff06aebaff0dafbcff4aa493ffa09250ffe0841affe08419ffe18618ffdf861eff836c38ff579792ff3ba0b2ff3ba0b2ff3ca1b4ff20a8b7ff0aaebaff0fb0baff15b0bdff19b1beff2aaebbff238599ff01566aff68691dff44c6bbff4cc8bcff1b96b5ff847957ffdf8112ffe08213ffdf8315ffce7111ffc7690dffd77a14ff719e93ff28afd6ff2fb2d8ff34b4daff39b5dcff62a5d2ffdc247effc11269ffbe1267ffc31369ffde257fffe12781ffa71462ff97005bff9a005eff9e0060ffa10363ffba3a38ffd4740fff736750ff53858dff3198c2ff2a5996ff4c3b7aff890045ff8c0241ffa78e25ffdfc753ffe0ca57ffe1cc5bffe4cd5fff958e68ff02aebaff06aebaff0db0bcff11b1beff16b1bdff1ab2c0ff286d8bff482551ff258296ff3a9eb0ff3a9fb0ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff38a3b5ff39a4b5ff3ea3b4ff3093a8ff076980ff035e74ff68691eff44c7b9ff44c6b9ff38bad0ff32b3daff7aa08dffce892dffdf8312ffe08415ffd18a2eff7fa28cff42b6d8ff2eb3daff28afd8ff2eb2d9ff4bacd7ffba4795ffde237dffdf247fffdf257fffe02680ffe02680ffe02781ffa0184cff930058ff97005bff9b005dff9e0061ffb93e2effd7770effb25509ff9a4104ff861f1eff810041ff880043ff97004bff98024affdec450ffdec651ffdfc854ffe0ca57ffe0cb59ffb3674fff7e225fff455d87ff18abbaff12afbdff428dacff665381ff910045ff482351ff369daeff389eafff389eafff3a9fb1ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3da2b3ff3da2b3ff096d83ff06687fff05677cff696a1fff43c6b8ff45c6baff33b4d8ff33b3daff33b3d9ff34b4d9ff37b3daff38b4d9ff37b5dbff37b6dbff38b6dcff42bbdfff31b3d7ff36549affa43488ffdb227cffde237effde237effde247fffe0237fff894492ff335e8aff893a05ff91183aff95005bff97005affaf2e3dffd06e0cffd6770effcd700dff9a4104ff861f1eff9a0951ffdc227dffc0136affbc1368ffdbac4fffddc44effdec651ffe0c855ffe1ca58ff9b3541ff94004affa50055ffb4015dffc10866ffcb116effc71169ff950049ff5e194dff369cadff379eafff379eafff399fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff04697fff04697fff056879ff838432ff43c6b8ff3fc2c0ff31b2d9ff33b3daff33b3daff33b4daff35b4daff35b4d9ff37b5daff37b5daff37b6dbff38b6dcff3ab5daff0064a4ff0167a7ff0173b1ff257ebbff3c7ebaff197cb6ff0071adff016fabff1a668fff893a04ff8d3c04ffa44a03ffcb6d0dffd97b14ffdc8119ffe18921ffe18315ffb15608ff871f1fffdc237dffdf247fffe02680ffe02680ffd83076ffda7764ffdaa058ffda875fffe15576ff840041ff930049ffa60054ffb4015dffc10866ffcb116effd21772ffce1670ff9a044cff399badff369daeff379eafff379eafff389fb0ff3aa0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff15798fff04697eff025d62ff798c40ff42c6b8ff33b6d3ff30b3d9ff32b2d9ff32b2d9ff33b3daff33b4daff36b4d9ff36b4d9ff37b5daff37b5daff37b6dbff3eb9dfff0064a4ff0167a7ff0074b2ff0088c0ff0296c9ff039dcdff0171adff016fabff1a658fff893a06ffb9610fffe18516ffe28617ffe28718ffe38819ffe48a1affe79124ffe0881dff9d2c21ffdc227cffdd237effdf247fffe02680ffdf2680ffdf2881ffe02983ffe12a84ffe12b84ff850043ff930049ffa90157ffba0662ffc60e6affcf1571ffd31a74ffd81c77ffd61e75ff79346bff369dadff369daeff379eafff379eafff389fb0ff3ba0b2ff3ba0b2ff3ba0b2ff3ca1b3ff3a9fb1ff107182ff005644ff5a874bff32b5d1ff2fb2d8ff2fb2d8ff31b2d9ff32b2d9ff33b3daff33b3d9ff34b5d9ff36b4d9ff36b4d9ff37b5daff37b5daff299ac8ff0064a4ff0167a7ff0074b2ff0187c0ff0197caff02a1d0ff109acbff016fabff19658fffb55f0dffe08415ffe18516ffe28617ffe28617ffe38718ffe38919ffe48a1affe48a1affc36813ffd62477ffdc227dffde237effdf247fffe02680ffe02680ffe02881ffe02983ffc91f72ff8c0044ffb3085dffcf1972ffdb297fffe02f83ffdf2b80ffdf2b80ffe6398effde247dffdc227bff8d3572ff359cadff369daeff379eafff379eafff389fb0ff399fb1ff3ba0b2ff3ba0b2ff2d91a3ff00614dff039172ff008266ff2299bdff2fb1d9ff2fb2d8ff30b3d9ff30b3d9ff32b2d9ff33b3daff33b3d9ff34b5d9ff34b4d9ff34b4dbff1b9ac9ff286180ff0064a4ff0167a7ff0074b2ff0187c0ff0196c9ff03a2ceff19a9d5ff0c89bdff126799ffde8315ffe08314ffe08415ffe18516ffe28617ffe28617ffe38919ffe38919ffe48a1affe78c1cffcc8c4effda2d77ffdd227dffde237effdf247fffe02680ffe02680ffca1e71ff9d0a53ffd01d74ffdf287fffdf287fffe02980ffe02980ffe12a81ffe22b83ffe22b83ffe9368bffe42c84ffdb2279ff00546cff1a768dff1b7f92ff3098abff359eb0ff2d95a8ff2992a4ff0f6f83ff005e74ff048e6fff019a77ff019c79ff00657cff219dc0ff2fb2d8ff2fb2d8ff2fb2d8ff32b2d9ff32b2d9ff33b3daff33b3d9ff28a9d3ff0482bbff634d39ff474d52ff0265a3ff0068a8ff007bb6ff0392c8ff17a5d2ff27acd6ff2bafd6ff2ab0d8ff0b7cb2ffdf8214ffe08314ffe08314ffe18516ffe18516ffe28617ffe38718ffe38919ffe38919ffe09724ffdec650ffe0c754ffdf8666ffe1756bffdb6964ffcb5e56ff913b58ff95094effdf257effdf267effdf287fffdf287fffe02980ffe02980ffe12a81ffe12a82ffe22b83ffe32b83ffe62f87ffe22981ff00546eff005670ff016079ff006d84ff07768eff128095ff1b889dff1a8397ff036277ff018875ff009a77ff019a77ff01657dff027289ff0e8eaaff22a8c9ff2eb2d7ff30b3d9ff32b2d9ff33b3daff2fb1d8ff21487eff622e2fff8b3b05ff474d52ff0164a3ff128bbfff2dafd8ff35b4d9ff36b5daff39b6dbff40b7dbff43b7daff36b4dbff85805cffdf8214ffde8314ffe08415ffe18516ffe18516ffe28617ffe38718ffe28818ffdfb541ffddc650ffdec751ffe0c853ffe1c956ffc8ad3affb59828ff635460ffcc1b72ffdf257dffe02680ffde267effde277effdf287fffdf287fffe02980ffe12a81ffe12a81ffe22b83ffe32b83ffe52d84ff00546eff005670ff016079ff006c84ff07768eff128095ff1b889dff238fa4ff2792a5ff0e7f87ff039879ff009a77ff01667dff00738aff008498ff0092a3ff019daeff03a5b5ff05a9baff018496ff016677ff530030ff6c1b1bff8b3b05ff474d51ff249ccdff30b2d9ff33b3daff34b5daff37b5daff37b6dbff39b6dcff3bb7ddff41b8dcff1c8998ff728d47ffe08213ffde8314ffe08414ffe08516ffe28517ffd3881fff478c56ffaaab49ffdec550ffddc650ffdfc752ffe0c854ffc8ae3bff99913fff255995ffde237effdf257dffde257dffde257dffde267effdf277fffdf277fffe02980ffe02980ffe12a81ffe12a81ffe22b83ffe32b83ff00536eff00566fff016079ff006d84ff07768eff128095ff1b889dff238fa4ff2994a7ff2c97aaff2695a2ff189a91ff01667dff007289ff008497ff0192a4ff009eaeff00a6b4ff01aab8ff01adb9ff017484ff530030ff6c1b1bff8b3b05ff4f5a5aff2eb0d8ff30b3d9ff31b2d9ff32b2d9ff35b4d9ff37b5daff37b5dbff39b6dcff3bb6dcff1fa8afff019b78ff039b77ff529459ff709047ff709049ff359968ff009e7cff009f7dff07946fff7dad5bffdec553ffdfc651ffdec855ff7f9e72ff0d71a4ff0271afffdd237cffde247dffde257dffde247effe0267fffde267effdf277fffdf287fffe02980ffe02980ffe12a81ffe12a82ffbe3380ff00536eff005670ff016079ff006d84ff07768dff138096ff1a889cff238ea3ff2994a7ff2d97a9ff319aabff329bacff01657dff00738aff00879bff0096a8ff00a1b0ff01a7b5ff00aab8ff00adb9ff00a0acff54002fff6c1b1bff8b3b05ff656d62ff2bb0d8ff2eb1d7ff2fb2d8ff32b2d9ff33b3d9ff34b4d8ff36b5d9ff37b5daff39b6dcff1ea8a9ff029b78ff019b78ff009c78ff019d79ff009d7aff019e7cff009e7cff009e7cff019f7dff0c9776ff393476ff0065a5ff006fafff068ec5ff20a2d3ff1289c1ff8f4292ffdc237effde247dffdf247effdf257effde257dffde267effdf287fffdf287fffe02980ffe02980ffe12a81ff494672ff01536eff005670ff016079ff006d84ff07768dff138096ff1b889cff238fa3ff2994a7ff2e97aaff3099abff329bacff006c83ff0998a9ff0aa6b2ff18b2bfff24b5c2ff1eb3bfff29b7c2ff0ab0bbff01adb7ff530030ff6c1b1bff8b3b05ff8d3d08ff35add2ff2cb0d7ff2fb1d9ff30b2d8ff33b3daff33b3d9ff35b4d9ff36b4d9ff36b5dbff0ca08cff019a77ff029b78ff019b78ff019c78ff019d79ff019d7bff019e7cff009e7cff009e7cff0f7e64ff3a3476ff0d78b2ff28a8d2ff36b4d9ff39b5dbff37b5ddff1699c9ffa5398bffdc237dffde247dffdf247dffdf257dffde267effde277effdf287fffdf287fffe02980ff7b3c77ff01516aff01536eff005670ff01617aff057087ff147e93ff1f889dff248ea2ff2992a6ff2b94a7ff2d98abff319aabff329bacff0cafbcff0fb1beff12b2bdff15b2beff17b2bfff19b4bfff1cb4bfff2eb8c2ff0fafb9ff530030ff6c1b1bff8b3b05ff8f3d06ff815c35ff39a4c1ff2cb0d9ff2eb2d8ff30b2d8ff32b2d9ff34b4d9ff3ab2d8ff159e92ff009976ff019a77ff029b78ff029b78ff009b78ff009c78ff019d79ff019d7bff019e7cff019c7aff433a4bff444382ff2fb1d9ff32b2d9ff35b4d8ff37b5daff39b5dbff3ab6dbff38b6dcff7a7fb9ffc43689ffdf247effdf247dffdf247dffdf257effdf277fffb21d67ff700b45ff004c66ff01516aff01536dff015e79ff167f97ff2c92a7ff3a9caeff4aa9baff4fabbcff41a2b4ff4aa8b9ff3ea2b2ff359dadff329babff08b0bcff0db0bdff11b2beff13b2bdff15b3beff18b3bfff1ab3bfff1cb4bfff21b6c0ff540030ff6c1b1bff8b3b05ff8f3d06ff9e4604ffb45606ff8e805aff809076ff7a9882ff86987bff929970ffd26b2dff5d3c5aff009976ff009a77ff019a77ff029b78ff019b78ff009c78ff019d79ff019d7aff029e7cff039979ff80144dff595a92ff2eb1d8ff31b2d8ff33b3d8ff35b4d9ff37b5daff39b5dbff3ab6dbff3cb7dbff0381baff0572afff2f66a8ff455ea3ff2065a4ff0269a3ff4a012eff49002eff004c65ff015169ff0e6a81ff3299adff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b2ff3da3b2ff40a4b3ff46a8b8ff3ca2b2ff06afbbff0ab0bbff0eb1bdff10b1bdff13b2bdff16b2beff19b3bfff1bb4c0ff1eb4c0ff540031ff6c1b1bff8b3b05ff8f3d06ff9e4504ffb55606ffc5640affd0700effd97911ffdd7f14ffdf8113ffdf6a2dffc7106bff795072ff009a76ff019976ff019a77ff029b78ff019b78ff009c78ff009c78ff15947bff79275aff93004aff6c4d87ff2bb0d9ff30b1d9ff32b2d9ff33b3d8ff35b4d9ff37b5daff39b5dbff3bb8ddff0f98cbff24a4d2ff057eb9ff0174b0ff016ea9ff0169a3ff4a012dff49012eff004b65ff146f85ff379fb0ff389fb1ff3ba0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3da2b4ff3da2b3ff3da2b2ff3da3b2ff3ea3b3ff41a5b4ff03afbbff05afbbff0bb0bcff0eb1bdff11b1bdff15b2beff16b2beff19b4c0ff25aebbff550030ff6c1b1bff8b3b06ff8f3d06ff9d4503ffb75706ffc7660bffd27210ffd97912ffdd7e13ffdf8214ffdf6a2cffcd136effd31873ffc82375ff4d4c60ff345f60ff21917aff248975ff345157ff54435bff8e0046ffa40054ffb5015effb1055cff5083b8ff2dafd8ff30b1d9ff32b2d8ff33b4d9ff36b4d9ff37b5daff36b4daff37b4d9ff38b5dbff0486beff017db7ff027bb5ff016ca6ff4a012dff4a012fff0e5f76ff379eafff379eafff389fb0ff3a9fb1ff3ba0b2ff3ca0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b3ff3da2b2ff3da3b2ff3ea3b3ff01aebbff04afbbff09b0bcff0bb1bdff0eb1bdff12b2beff14b2beff12acb9ff3a2f53ff540030ff6c1b1bff8b3b06ff903d06ffb55809ffd27412ffdb7e17ffe0841bffe58c25ffe28519ffe08314ffdf692cffcc136effd31973ffd71c76ff9f034fff8e0043ff8a003fff7f003dff82003fff830040ff8e0046ffa40054ffb4015effc40c67ffce146fffa1408aff8268a9ff6579b0ff5a679bff259cc8ff31b2d8ff33b3d9ff35b4d9ff37b4d9ff1396c8ff007cb6ff007db7ff0178b1ff4a012eff4a012eff1b7288ff369daeff379eafff389fb0ff389fb0ff3aa0b2ff3aa0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b3ff3da2b2ff3da3b2ff0ab1b9ff01afbbff04afbcff09b0bbff0bb1bdff10b2bdff19b0bbff383258ff550030ff550131ff6c1b1bff8f3d07ffcc7213ffe18516ffe28617ffe38718ffe38919ffe38917ffe78e1fffe58b1cffde6b2dffcd136effd31973ffd71c77ffb40f5eff8e0043ff8b003fff80003dff820041ff840041ff920049ffad015affc2106affd22176ffd61d76ffd91f77ffdb2078ffdc217affb3105dff178bb2ff2fb1d8ff32b2d9ff33b3d9ff35b4d9ff30b2daff0081b9ff007db7ff017db8ff4a012eff4a012fff24798dff369daeff379eafff379eafff379eafff389fb1ff3aa0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b3ff3da2b2ff46c6bbff43c5bdff0499a5ff1f6a87ff2a5a75ff3b3e61ff5d0037ff590036ff540130ff550131ff6b1b1bffca710fffe08415ffe18516ffe18516ffe28617ffe38718ffe38819ffe38817ffe48a18ffe16f30ffcd136effd31973ffd71d78ffca166bff8d0043ff8a003fff7f013eff810042ff92024affc5146bffe02681ffe12781ffe02882ffe02982ffe53e8effe22d84ffdf257effd51f73ff1697a9ff2eb0d9ff30b1d9ff32b2d9ff34b3d9ff36b4d9ff2bacd4ff0787bdff145d93ff4a012eff4a012fff3b4f6eff359daeff369daeff379eafff379eafff389fb0ff389fb0ff39a0b2ff3aa0b2ff3ca1b3ff3ca1b3ff3ca1b3ff3da2b4ff3da2b3ff44c6b9ff23b2a6ff00818eff372a58ff49032eff4f0131ff60003aff730044ff69013fff560033ff741f1cffdf8213ffe08314ffe08415ffe18516ffe18516ffe28617ffe38718ffe38919ffe38917ffdc6533ffcc146effd31973ffd71c77ffda2078ff9c054cff8a003fff7f003eff960b51ffde247effe02680ffe02680ffe12781ffe22882ffe02982ffe02983ffe12a84ffe62f88ffda2278ff018682ff20a6c5ff2eb0d9ff30b2d8ff32b2d9ff33b4d9ff36b4daff2da7caff44214eff4a012eff4a012fff410834ff369dacff369daeff369daeff379eafff389fb0ff389fb0ff389fb1ff399fb1ff39a0b2ff3ba0b2ff3ca1b3ff3ca1b3ff3da2b4ff11a297ff009086ff008093ff382958ff48042eff60003bff84004eff930058ff9c0761ff7e024cff670d2effde8213ffdf8213ffe08314ffe08415ffe18516ffe28617ffe38718ffe38718ffe28819ffd34c41ffcd146fffd31973ffd71c77ffda2078ffc61669ff8a003fff7f003dffdd247effde237effdf257fffe02680ffe02680ffe12781ffe22882ffe22882ffe12a84ffe12a84ffe22a81ff019088ff009f95ff0eacb1ff20b2c2ff24abbfff199bacff12949eff107572ff46012cff49012dff540033ff750247ff592958ff389cadff369dadff369daeff379eafff379eafff389fb0ff389fb1ff3aa0b2ff3ba0b2ff3ca1b3ff3ca1b3ff969263ff018f86ff019086ff017d98ff382959ff730348ff99005bff9a005dff9b005fff9d0060ff9d0060ff7d004cffbe6024ffdf8214ffe08315ffe08314ffe18516ffe18516ffe28617ffe38718ffe78624ffc61662ffcd146fffd31973ffd71d77ffdb2078ffdd2178ff9f094fffac115affdd237dffde237effdf247fffe02680ffe02680ffe02680ffe12781ffdf2881ffe02982ffe12a84ffda3083ff01938bff06a69bff1cb3a7ff25b9acff2bbeb1ff038a7fff018277ff117571ff45012cff64013eff9a035eff9b035fff9b035fff8a095dff5b5a89ff379daeff379eafff379eafff379eafff389fb0ff389fb1ff39a0b1ff6c998affb98b3cffdf8518ff2fb1d7ff33b2d9ff37b4d9ff3ab5dbff1886a6ff31b2d9ff33b3d8ff34b4d8ff36b4d9ff38b5daff3ab5daff3db6dbff035947ff229584ff31af9dff24a48eff048163ff19858fff35b2d8ff38b3d9ff3bb4d8ff3db5d9ff40b6daff44b7daff478ea2ff62997dff50c5b9ff56c6baff5bc7bcff5dc8beff6a9592ff9d0217ff229dbbff2fb1d8ff31b0d4ff1a9b9bff15838aff30b1d8ff32b2d9ff33b3d8ff35b4d9ff37b4d9ff39b5daff2fa0b8ff00523fff005c46ff00765aff008868ff00926fff038f73ff2aa6c0ff37b3d8ff3ab3d9ff3cb4d9ff3fb5daff44afcdff80532cff9f5a18ff72ae8dff5ac6bbff5fc7bdff6e9e99ffad4045ffc1242cff035a49ff005f4bff018466ff029471ff039173ff319bbaff30b2d8ff32b2d9ff33b3d9ff35b4d8ff37add1ff0b6368ff005e49ff018c6cff019d7bff039f7eff07a280ff06a17fff008d73ff138c98ff1c9aabff1e9cacff1b9aa4ff1e7568ff8e3c02ffba5b07ffd77710ffde8117ff33362dffbf242bffc72a2fffc82d30ff036b57ff019674ff019d79ff009e7bff03a07cff873266ffaa519bff886cacff876daeff9f5fa3ff692259ff01595bff019674ff009b78ff009d7aff009e7cff009e7cff00a07eff029479ff007874ff00857eff00968dff018881ff1a7362ffbc6614ffe08925ffe48f2dffe28a20ff384c3dffc4272effc62a30ffc82d33ff019376ff009a77ff019b78ff009d79ff009e7cffb43d7fffdf247fffe02680ffe12781ffe02883ff8d2467ff017371ff019a77ff019b78ff009c79ff019d7bff009e7cff009e7cff03947aff007873ff00857fff00a297ff0caca0ff138678ffdf841effe08926ffe28c2bffd18f33ff018765ff884641ffc62b30ffc72d33ff6d4f4aff089271ff009a76ff019b78ff46756cffdd227dffde237effdf257fffe02680ffe12781ff8e397bff006072ff009675ff019a77ff009b78ff019d7aff019d7bff009e7cff204f56ff057f79ff2bb0a6ff43c2b7ff51c7bbff54c6bbff78a97fffaa8038ffa39041ff479e6eff19a283ff0a9f7cff235c93ff386d98ffbc1425ffb91a25ff933536ffaf4329ffd06d15ffc72a5effdc227dffde237effdf257fffd43c6cff305c6bff1b8195ff2897a1ff159c8bff069b7cff099778ff1f716aff452e4bff452448ff3abbafff46c5b8ff4dc6baff56c7bcff5dc9beff64cbc0ff13898fff009b7aff0d9f7fff1ba283ff1aa485ff117cb5ff31a9d2ff494740ffc05114ffdb7117ffe28617ffe3891bff8c4f14ffa5722affcc8849ffdaa453ffba9c2dff49918bff369daeff38a0b1ff3ca1b3ff2e909cff8a095dff870151ff5d0237ff494464ff41c3b5ff45c4b6ff4bc5b9ff53c6bbff5cc8bdff63c9c0ff198db2ff009588ff029c7cff0a9f81ff138f9dff40b4d9ff46b5daff555942ffdf8314ffe18516ffe28617ffcb6f0fff905718ffcab141ffe0c852ffe0c855ffddc451ff74a179ff349bacff379eafff39a0b2ff12a4a1ff24aaa5ff4e8191ff3c5560ff00657cff34b3adff42c4b5ff48c4b7ff4ec5baff56c7bbff4dbcc0ff1796c7ff26abd5ff35b2d5ff35b4d8ff1e99c6ff3bb2d7ff41b4d9ff388081ffd77f15ffe08314ffe18516ffd27612ff4c614bffddc650ffdec751ffdfc753ffe1c956ffb6bc5fff0a8986ff128588ff078482ff00a197ff1bb8acff30baadff27756bff109dacff1cb0bcff2eb9bbff39bdbaff32afaaff2895b2ff36aed5ff3eb5d9ff41b6d9ff46b6daff48b7daff47b9dbff61aca4ff74baadff2e98aaff3b8993ff6f7962ff717a61ff386c67ff006d83ff67a275ffd4c453ffdec751ffc6bf59ff319575ff018c83ff027e77ff00817cff0faba1ff2dbeb1ff37c1b3ff36a18dff10afbbff1ab1bdff1fb2bdff26b4bfff169fa7ff2699c3ff39b3d9ff3cb4d9ff3fb5d9ff42b6daff45b7daff46b7dbff9abd8dffdec859ff2e98a9ff208babff016faeff0071afff006585ff007086ff0094a4ff01a8b6ff319f89ff359a78ff018d84ff008f85ff0a8c85ff36baaeff44c5b8ff49c6b9ff4ec8bcff72ac72ff0daeb8ff13afbcff19b1bdff1fb2beff0d9a9aff23a3bbff36b3d8ff39b3d9ff3cb4d9ff3eb5d9ff40b6daff42b7daff63ab83ffddc756ff3b9fb0ff218faeff0077b3ff017ab5ff006686ff06899dff0da7b5ff14b1bdff36ab95ff90b568ff1ba193ff019187ff1ca5a2ff3cc2b5ff40c4b6ff46c5b9ff4ac7baffcdc861ffc4c766ff6a9f79ff207a81ff08908eff17afa5ff2bb0abff30b1cfff36b3d8ff38b3d9ff3bb4d9ff3eb5d8ff3dbcc4ff37c1b3ff458d92ff3ba2b3ff2897b6ff0179b4ff0079b4ff028da8ff09afbcff14b1beff1bb3bfff4fb9a3ffe0ca59ff777a62ff1f9ccbff30aed2ff3eb4b5ff3cc3b6ff47c4b2ff92c684ffdfc753ffdfc955ff985320ff365152ff3ebeb2ff4bc6b9ff54c8bcff54c9bcff219ea0ff43bec3ff4bc1c5ff57c6bfff5ecabfff4dc7baff0d76aaff38a1b2ff35abc8ff2aaad4ff26a5cfff17acc6ff02aebaff0bafbcff15b1bdff83bc85ffe1c956ff987869ff2cb0d7ff37b4daff74548dffd8227affde267fffdf656fff9a875eff934b27ff7c0010ff546263ff3ec3b5ff44c4b7ff4cc6baff50c7bbff3fac9dff47c4b7ff4dc5b9ff51c6bbff55c7bcff57c8bdff0b71a7ff31aac7ff30b2d8ff32b2d9ff33b3d9ff34b4d9ff26b1d1ff03a0c1ff2a91a4ff8b8b56ff758063ff930049ffb42b7fff475f8cff71457fffdd237dffdf257fffc2156bff414d69ff880814ffc01824ffb42630ff639389ff40c2b5ff52bba6ff968a4dff699370ff42c3b5ff45c4b7ff4ac5b9ff4cc6baff44bab2ff0c6fabff2cb5b6ff2da2c4ff2fb2d9ff32b2d9ff4b9bacff1179afff0294c8ff0175aeff1f4d6eff1b5373ff94004bffd01571ff534c7bff0d8ba0ff745f98ffa3378aff5c497fff017f79ffb51926ffc41723ffc71b25ffb8261dffa04705ffcb6c10ffd97c14ffd8841dff7d9d6cff31aba6ff33b4adff2cb7b5ff087e8cff2797c4ff35c1b3ff47544aff9a4404ffba5b06ff9b4304ff09659eff0294c7ff0c84b8ff1f4d6eff1a5373ff97024dffd51b76ff545381ff0aa0afff079db6ff0070afff037597ff21a89fff629893ffa54840ffa43d2bffaa4b11ffdc8117ffe2871cffe3881dffe38b1fffab7c30ff016179ff06889bff10a8b7ff03a2aeff2497baff37c1b4ff46554bffa24b07ffc2640aff9f4605ff09649dff0294c7ff1fa5d0ff296385ff1b6380ffd61f78ffe22983ff5082a7ff13b1bdff20adc3ff26a5d2ff1594b8ff3ac1b5ff46c6b8ff97b66bff7f8135ffba741fffdf8417ffe08619ffe2871bffe3881dffab7d33ff0e8fa0ff1fb1bdff28b4c0ff29b6c1ff2a756fff3ec3b5ff5f6e55ffd87c13ffaa4e06ffa94f07ff0f6ba2ff18a0cfff2cb0d7ff635082ff2b839fffa7236fff9f125bff721757ff62486dff2bb0d5ff33b2d9ff2ba9d2ff32779fff899441ffcfb43bffa3b15dff718b60ffdf8317ffe08418ffe08619ffe2871aff58755eff08a5b3ff14afbbff1db2bdff22aebaff346044ff49c7bbff648774ffde8113ffc0640cffbb5f0bff3c9fb9ff33b4d9ff46b2d9ffb90f63ffae095bffc5166cff880950ff940059ffa91e4cff728572ff369dbeff1d629eff6f1858ffb3992dffd9c24dffb1b566ff06aebaff42a597ff7c9a6bff8c6744ff4e8884ff3a9fb1ff34a2b3ff23a8b7ff29a9b8ff208b9fff346146ff44c6b9ff34b4d7ff6ba39bff8b9b76ff6fa59cff3ab6dbff2f99c8ffa0529cffde237effdf247fff9f3b87ff931a38ff97005bffb53635ffca6c0cff903011ff9f0a54ffaa0a59ffddbe4fffdfc854ffc38c50ff7e1f61ff67588eff8e4080ff720e4bff369daeff389eafff3ba0b2ff3ba0b2ff3ca1b3ff056980ff3d6f51ff3dc1c0ff31b2d9ff32b2d9ff34b4d9ff36b4d9ff37b5daff1e8dc0ff006dacff1886bfff077eb7ff0d6a9dff964407ffcc700fffde8217ffe3891dffad4a19ffdc227dffdf257fffdc3d76ffdd5e6fffb21f5fff9d004fffbd0763ffcf1571ffc5156aff47829cff369daeff389eb0ff3ba0b2ff3ba0b2ff187c8fff35714cff2caccfff2fb2d8ff31b2d9ff33b3d9ff35b4d9ff2faed6ff1470a4ff006dacff018ec4ff0ba1cfff0e71a4ffd47a12ffe08415ffe28617ffe38919ffdc8218ffd63f6effdd227dffdf257fffda257dffb0115fffd01c73ffde2a80ffe02a81ffe32f86ffc9297aff218094ff2e94a6ff349caeff2b90a2ff0c7774ff019272ff087690ff23a6c8ff2fb2d8ff32b2d9ff2a95c0ff544d4aff24587aff0f87bdff21a7d3ff32b1d8ff2ba5cfffc88126ffdf8314ffe18516ffe28717ffe09725ffdec651ffe0a25effc88247ff952c5effdf257effde277effdf287fffe02980ffe12a82ffe42c83ff00556fff00667eff0c7b91ff1c889dff0e7e86ff009977ff006c83ff008b9dff01a1b1ff02a0b0ff2a3656ff7b2b10ff397c94ff30b2d9ff34b4d9ff37b5daff3cb6dcff2b9681ff848c3dffa88a2eff7a9046ff3d9a62ffc5bf53ffdec753ff7b9364ff78448fffde247dffde257dffde267effdf287fffe02980ffd82c82ff00546eff00667eff0c7b91ff1e8b9fff2a95a8ff2898a2ff02778cff089dacff10acb9ff0cafbbff2a5370ff7b2b10ff548185ff2db0d7ff31b2d9ff34b3d8ff37b4daff0b9f88ff009b78ff009c78ff009d7bff009e7cff235f71ff0d7db6ff25a6d3ff3b86beffce2880ffde247dffde257dffde277effdf287fff693f74ff00546fff01677fff137f94ff228da1ff2b95a8ff319aabff0bb0bcff12b2bdff17b3beff20b4bfff355976ff7b2b10ff8f4611ff698a7eff56a3aaff5fa5a7ff5f7d7cff009976ff019a77ff009b78ff019d79ff019c7aff573a6aff2fb1d8ff35b3d8ff38b5daff4aa8d2ff6a539bff8c4391ff784690ff6d0a42ff004e67ff106c85ff2e94a8ff3fa1b3ff42a4b5ff41a4b3ff3aa0b0ff06afbbff0db0bcff13b1bdff18b3bfff3b5876ff7b2b10ff964104ffbe5d08ffd47410ffde8013ffd43d4cff844974ff20776bff119477ff227368ff702e5bff991462ff35a4d0ff31b1d8ff35b4d9ff38b5dbff28a9d4ff027db7ff016fa9ff49012dff166d83ff379eafff3a9fb1ff3ca0b2ff3ca1b3ff3da2b2ff3ea3b2ff03afbaff08afbbff0eb1bdff1d90a2ff4e0b38ff7c2b10ffbc620dffdc7f15ffe2881cffe38819ffd53e4dffd51a74ff9b044cff84003eff820040ff9c004fffc30f69ffc72479ffa74892ff52679cff31b1d8ff35b3d9ff1091c4ff007bb5ff4a012eff2a899cff379eafff389eb0ff3aa0b2ff3ca1b3ff3ca1b3ff3da2b2ff3bc0b5ff166b84ff3f274dff62003aff590034ffa14b16ffe08314ffe18516ffe28617ffe38917ffd53e4fffd51a75ffb30e5cff84003effa10c56ffd9217bffe02781ffe12e85ffe12a83ff715785ff2badd4ff32b2d8ff32b2d7ff226b9aff4a012eff39647fff369daeff379eafff389fb0ff3a9fb1ff3ba0b2ff3ca1b3ff04948aff1c5376ff6d0142ff920058ff95025bff9f3b2cffdf8213ffe08415ffe18516ffe3861bffcc2260ffd51a75ffd61d74ff940649ffdd237dffdf257fffe02680ffe12781ffe02983ff6f5f85ff0ca8a2ff25b4b7ff0b8e90ff2b3b4eff66013fff810c57ff546690ff369daeff379eafff389fb0ff469ea7ff9a905aff2cacd0ff2eacc8ff239bb8ff32b2d8ff36b4d9ff37afd1ff096753ff15947bff078975ff33afd2ff3bb3d8ff41b4d6ff717458ff5cbfaeff61bcb4ff9d3e46ff016e57ff009472ff2f7f83ff6588bdff638cc0ff2b627bff008668ff019d7bff03a07eff05897dff0e9498ff14827bffb96110ffde841cff7b3330ffc72b30ff1d8369ff009b77ff755c78ffde247effe02681ff474b71ff009976ff009c79ff009d7bff09766eff1ba69cff30afa3ffb88d3effa79243ff2a8369ff794863ff9f3127ffbf5b23ffc15b28ffca4f5bffd1685aff32828eff2c9ca4ff31727bff52284fff427983ff48c4b8ff58c7bcff3caab0ff039a7fff149d89ff32a3ceff90763bffe08415ff9e6720ffd9c14cffdfc753ff5aa082ff22919aff14a9a2ff388182ff1899a4ff3cbfb8ff3fb4b4ff36adcdff38b2d7ff38afd4ff54b3c0ff2d90a4ff387487ff0e6b7dff4ea888ff82af6aff0c8f80ff109189ff32bcb0ff4bb59bff12afbbff1fb2bdff1b9dafff38b3d8ff3eb4d9ff43b6daffaebd6fff2f99b1ff0078b4ff048aa1ff13afbbff7db87eff2c9291ff31b2b7ff42c3b5ffa1c67cffa9a054ff278684ff38bbb1ff36b2c0ff40b9ceff4bc0c6ff35a2aaff33aac6ff2dacd5ff1cafcaff13a4b7ff99a364ff825482ff586b9cffdc247dff9e5368ff951a1bff6a7774ff48c1b2ff63a385ff46c3b7ff4fc5baff2c98b0ff359a9dff6d806fff406f7fff0488bdff1c5070ffb40c5fff2f7292ff4768a1ff20798bff9f4446ffb3321fffca6e11ffdd841bff56896eff1da6adff1593aeff469182ffb95e0aff585952ff19a2cfff346689ffbf1f71ff4d648aff29add0ff2a9db7ff8db167ff938c44ffdf8417ffe1861aff468978ff1db1bdff2a8e8bff49b2afffa5884bff67968eff5194c5ffc8176eff9f1c5effa2154dff806f53ff752368ffd2b847ff7d8374ff6c7584ff606670ff389fb1ff30a4b4ff25716dff32b4cfff32b2d9ff34b2d8ff0c75afff0a8cc2ff616656ffdb7f14ffd37719ffdb2979ffdc3978ffb31260ffd21c75ffae3b81ff2f93a6ff359badff167d70ff0a849eff18a9c4ff48505cff2683a8ff2fb0d7ff569c94ffbb8725ff9e9239ffd8bb55ff936165ffde257dffde277effdf2a81ff005d76ff148297ff189091ff099dacff14b0bcff554041ff5e807aff46abc0ff289a95ff009a77ff009c7aff2d719aff33a5d0ff98519affb03586ff6d2f66ff0f6e86ff2d94a7ff359cadff07afbaff15a9b6ff602e33ffbb5f0bffdd8115ffc03760ff53435bff6c2854ff963a85ff5784b7ff31b0d7ff047eb6ff343e5eff379eafff3ba0b2ff3ca1b2ff1c848eff670948ff8b2134ffdf8314ffe28617ffd22566ffa80c55ffcd1d73ffe02881ffa84284ff23aec1ff227993ff5a1c50ff3d8fa6ff389eafff559b99ff169698ff3a94b4ff3e94b9ff07876cff109890ff279fb0ff98854cff905656ff5e6a4affb74a5eff8a5676ff179083ff276c6eff3ab7acff67986bff3a8288ff757f5eff748e5cff71a96fff1ea19dff2b9f9fff2db0b6ff39b1d5ff5fb5b7ff2399bfff11a2b7ff70907dff6980a1ff9f7454ff449e96ff47b4b2ff3eafb6ff688266ff2d7c97ff703872ff3b7aa3ff5d827bffbb6c22ff968646ff1e9da8ff54a8a8ff3e94b6ff744979ffb45e33ffbf4f67ff9b4973ff5d7491ff278b8fff0f9eb2ff48646fff3ca4afff569353ff728c89ffc13486ff564878ff23909fff277991ffa14c21ffd4583cff8c245dff9d4a90ff1e95b8ff406180ff409eabff59777dff398087ff259696ff727d65ff47918cff59968aff4e988fff47b2bdff498e96ff745670ff9c615dff4e8883ff477174ff7c6c66ff7b6795ff3e7590ff4c8786ff4a9791ff5f7078ff687181ff577f83ff
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones.asset.meta
new file mode 100755
index 0000000..1e6aacd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-Cones.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9c4b497c86e965b4e8a37e8aa70b2fe0
+timeCreated: 1592334546
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-RenderHeads.asset b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-RenderHeads.asset
new file mode 100755
index 0000000..6fc2bfc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-RenderHeads.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b1c70b7e7502564e93d418de9017d1f, type: 3}
+ m_Name: Sample-Local-MP4-RenderHeads
+ m_EditorClassIdentifier:
+ _alias:
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/RenderHeads-1080p30-H264.mp4
+ _hints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _macOS: {fileID: 0}
+ _windows: {fileID: 0}
+ _android: {fileID: 0}
+ _iOS: {fileID: 0}
+ _tvOS: {fileID: 0}
+ _windowsUWP: {fileID: 0}
+ _webGL: {fileID: 0}
+ _preview: e97b15fff7941affee8b05ffe67b08ff8b4d17ff1e1107ff5b2927ffd75e5bfff25947fff13d36ffe7372dffbe281bff521c0bff562619ffd27b56fff48b66fff78640fff8a133ffd8941cff493514ff55271bffc9b44bfff7eb5ffff6f04afff5e83bffe9c426ff885f1dff40352cff9f7150ffec9962fff47f48fff56649ffe1403fff732c25ff333231ff9b9072ffe4e4a5fff8f29efff7f17bffebe77bff828a48ff30251cffa25443ffd2b2affff7caa0fffbc64efff6ad2fffce7317ff593c28ff933242ff5f9daaff69cae1ff88ddf0ff81d3ecff518eadff123344ff67606affbd867dffeb9965fffcc053fffabd50ffe4770fff3f1709ff5e363cffca8946ffe78e82fff38cc0fff5a4dcffe775afff4d334dff833041ff967266ffed8537fff99b44fffaba7dffed9c66ff7b343bff235f74ff548090ff819db5ff50dce8ff6ef0f9ff6dedf6ff2fb3d3ff575b38ff846f3dff83757affb972a7ffe1a6d8ffdbbadfff7c9eb6ff3c484dff2c5d5fff6a425eff593a4eff73717bff827f84ff655a57ff5d4c2fff195a52ff7c4d58ffba3563ffe55c97fff37aabffdc6a7aff78412fff7d445effcf665dffef7c2dfffba442fffac868fff8ab4effc44b17ffbe2d4fffd26e84ffa693aaff86bcd8ff98daeeff92cfe3ff5e88a0ffb95b6bffe26552ffe476a4ffdfb1eeffbee3fbff77e5f4ff8ac5e0ff9d6261ff92420dffec8319fff79c21ffe9983bff897846ff283f2aff250f04ff852c27ffe55639ffee513cffef3e34ffe5362cffa42418ff421f0dff743c2cffe98e5dfff9c25efff8d83afff0cc2cffa68214ff442f20ff6a522effead95cfff7ef5efff8f045fff4e234ffd3a21eff333721ff5f4f43ffd18363ffed7661fff75553ffef4a48ffb93b38ff322822ff5c6a64ffcfd19fffeeeeb6fff4f3bdffe5eebdff67b584ff0e3a2cff8b3525ffbd979bfff0c9bafff8c960fffabe44ffe5851eff643408ff7a1f29ff7b8b98ff58bed4ff86dbefff87dcedff5ea7c5ff162b3aff405966ffb67d79ffe29774fffdb557fff9bf53ffec841aff631d01ff604147ffc08043ffe48e6dfff16a7dfff77b94fff0465aff623241ff7e2e3fff977065ffec8634fffba74afffcc876fff1a152ff7f352fff286476ff5c8598ff86a2b7ff55e2ebff76f3f8ff5feaf3ff21859bff666035ff837347ff7f7283ffcb64a1fff088c7ffe389bfff77607aff434340ff3d5d67ff6b3b5aff594457ff807d85ff7a7578ff614b33ff484f3aff355e5bff93465bffce3973ffee71abfff075a5ffc05160ff642f3bff985669ffe1724afff58f2bfffebc5ffff9c66bffeb8d36ffac1e2bffd54f6fffc68da1ff86b2ccff95d2e8ff9adaeeff80b8d0ff845d78ffe16358ffe66354ffea689dfff5a9e6ffd0cff3ff87cff2ff917c90ffcc7355ff230a06ffa44e10ffea9335ffc2ad64ff569a6fff337250ff20331eff2c0d03ffa53831ffee613efff1493afff03d36ffdb3121ff8f2011ff412615ffaf6e45fff4ce68fffaed50fff6e735ffe2c321ff7c5f15ff562821ffad9843fff2e964fff8f055fff9ee44ffe7cd34ff67511dff363330ff966b58ffe98970fff55a58fff65551ffde4341ff772e2aff313e3fffa5a381ffd3e8c1ffd8f3dbffaff3e0ff2ad8beff0e574cff52261fffba7574ffe2c4c3fff6d096fff8cf75ffe4ac79ff5a3419ff602c2dff8e7282ff4bb8c9ff80daefff8de4f2ff6bbdd6ff384c5fff1f4f5effb47473ffdb997dfffdaf57fffac15afff69528ff8d2f03ff53484affb27340ffe6976cfff16b75fffd787fffec4750ff74303eff782d3dff907467ffed8738fffbad45fffccd72fff1a545ff79312eff2b6778ff60879bff88a9bdff58e6eaff78f3f4ff4de5ebff30726cff6e6736ff847752ff897590ffd565a5fff083c3ffe3629dff684255ff3a5047ff535c6fff6e3556ff5f5361ff888388ff766d70ff664b23ff2b5647ff5d5a5dffad3e5effde4a85fff17cb4ffea6d98ff90403fff6f3d50ffc0696dffeb8039fff6a135fffbca6cfff8b85cffd25e22ffc72f54ffd87d9bffa0b9d7ff7cd8eeff96ddf0ff95d1e4ff6486a0ffcd6169ffe9694affe85956fff36b8cfff589c5ffd2a4e4ff9896bfffb56559ffeb9a4dff170f13ff250b00ff7d5e2cff8ba972ff53b080ff3e9a71ff346c4aff242917ff401206ffbd483bfff26840fff2483dffef4331ffd2481cff4d2907ff4f2e17ffe3c35cfff7ec6afff8ed40fff3e231ffccad1cff493d14ff5b3422ffdac957fff6ed64fff3ef5effe4dd5cff67753aff253432ff564940ffc78168fff57c6dfff85857ffeb4d4dffba3f3dff302d2aff6b7a6cffa2dbbfff65f0eaff39f2efff1febe1ff169a8bff162a25ff9c4b3affc7b0bafff0d9d1fff1dfcdffd0ccc1ff305755ff514234ff9a4e5fff54b0bdff71d7e7ff8beaf2ff75d0e4ff496c82ff134959ffa66f70ffd29a84fff9a658fffec661fff6a234ffae4807ff474c4effa46639ffe59f6dfff26d79fffc7a81fff14f55ff8b2f40ff772d3dff906f67ffef8a37fffcae46fffcd078fff2a542ff732b23ff2e697dff69899fff83b1c4ff5ae9eeff7ef3f8ff47dee6ff416d5dff796f39ff897f5fff937698ffde69abfff084c3ffd2568bff573d47ff2f5b53ff64566dff6d3755ff6d6570ff8b8689ff645a53ff684f29ff185f52ff845660ffc43866ffeb669fffee7fb4ffdb607dff693431ff88566affdf8657fff5ad33fffbc357fff9cc6bfff09e3fffb12828ffdc5576ffc9a3c8ff71daefff7bebf6ff88d9ebff79b2c9ff946078ffe66b52ffeb664effee5967fff9707efff06b88ffbc638bffa85a61ffdd8250fff4c44aff2c2526ff1c1107ff1f110aff5b6c4dff81ae7eff45b07fff3c9870ff326544ff22230fff57160dffda5844fff66f45fff66f37ffef7922ffad5705ff402b10ff6d4e24ffebdc64fff9ee66fff9ed3cffedd92fffaa8e18ff503225ff756535ffe8e16affe9ed7effcbdf87ff3a9e65ff334c35ff2e3231ff876856ffe58f79fff05d5bfff35555ffdd4547ff562f2eff314e4cff9eb7a0ff6debe4ff33f4f1ff28efebff10cdbfff074542ff742c25ffb09ba4ffc1dde2ffcdecedff90dfe5ff17909dff4d3b26ff882a3aff65a0aaff5ccfddff82e9eeff70d8e1ff407483ff14404cff8e6a6cffcb9887fff29e59fffdc461fff8aa41ffc85b10ff3a4641ff935436ffe4a66afff06e72fffc8086fff45a5dffa13345ff74293eff8b6f65ffef8b3afffdb046fffbd179fff5a642ff772f2aff316a80ff718ca2ff83bbcdff5eebefff81f3f6ff3ad9e1ff4d6a4fff817539ff8e8474ff9f7ba2ffe973b5fff282c2ffc5517fff513f42ff32615dff6e4c68ff6e3f5cff7c7982ff8a8588ff5d4c3aff5a5035ff316561ffa9495effd63d76fff077adfff27bacffbf505fff6e3d4affae6c6ffff0b347fffadf4cfffbe269fff3c463ffe07427ffca3054ffdc82a2ffa0c9e7ff6aedfaff7aecf7ff68c1daff627290ffe06967ffed6e49ffe45652fff96d7ffff4707cffdb606fffa35552ffc56857fff1a84efff7e357ff353331ff2b251dff1f0f09ff1e1210ff617b56ff7eb080ff40b082ff3d9167ff3f6040ff34190bff752818ffe76e40fff79330fff59913ffe0810cff804602ff4a3217ffa48745fff6e670fff7f059fff5eb3cffe2ca28ff695e1dff512829ff8d9e5dffa4db94ff59d79eff38c28fff2b7b58ff253632ff4e4445ffc48774fff08273fff85c5fffe55155ff703c3eff203531ff6e8681ff88e3d5ff34f2f1ff2cf3eeff16e4dbff0f847aff332427ffad706fff64dae5ff4beff5ff3bebf3ff10bdc7ff1f2c22ff662a34ff878a94ff45c9cdff71e2e4ff6ad9d9ff2f8282ff1b2f34ff6a676dffc58f82ffed9666fffdbc71fff7a65bffca591dff2f3e38ff7d4132ffe1ab6bffec7577fffe8387fff6676cffaa3744ff702a3fff896f69ffee8d3dfffeb14afffcd47dfff2a744ff783433ff336c7fff738ea2ff7ec2d2ff64ecefff84f2f6ff33d1deff52623fff84773eff898b84ffb17ca9fff082c4fff081c0ffb24d74ff4a4641ff3d646cff7e4164ff794d67ff918891ff817b7dff69512cff385947ff636163ffd24458ffef5885fff47dadffe76f97ff8d4141ff7e5164ffd48d67fff7da4bfffaf16efff9ea6affe7a645ffbd3724ffda5574ffcfacccff6cdef3ff7aeff9ff71e3f4ff347491ffb7637bffee7453ffee6b52fff56571fff8757effed6a77ffb45658ffb55954ffda6761fff5b470fffbec79ff363735ff35322fff2e241bff1e1108ff221b0fff6d815aff7db781ff61b57fffaba268ff845c28ff3e1905ff9b452ffff39733fff6a815fff59b0dffd2760bff603503ff51381dffd7c269fff7ec74fff7ef4dfff1e744ff999a44ff343836ff4a3a2dff6eb784ff4dd6a7ff3ed0a1ff23a67eff2c5540ff253336ff7d665fffda9580ffe76161ffd2575fff624649ff1d3432ff30595aff9cc6b1ff51edeaff32f4f3ff1fefeaff0bb8b3ff073d3cff924440ff83c4d8ff35ecf4ff41f0f3ff1bd8e1ff046165ff4c423bffa06c79ff3ebfbbff5edbd4ff5edbcaff2c9581ff1f1813ff375c63ffbf897effe38e7afffaa58bfff4967fffb64334ff2c312aff6d3434ffdeac68ffe99694fff6a1a7ffee888bff9f3842ff642b3cff86716afff1913ffffeb24bfffbd37cfff0a44bff703736ff367082ff7d92a8ff7ecadaff6deff1ff81f3f7ff29c6d2ff545a31ff817b41ff859193ffb395bbffee9bcbffed84baff954b67ff465249ff506574ff983e69ffb85c80ffb88595ff7a6b6aff70512cff24625aff975b63ffe94354fff9728cfff17898ffc85f70ff6b3a3dff9b6873ffefb159fff9ec5dfff9f47dfff4e157ffa4531bffc63554ffe186a1ffaccae5ff70edfcff7ceefaff50bdd2ff685d78ffea7864fff3804effeb5f5cfff8777dfff3747cffce5c65ffae584effcb5c5effe3557ffff5a499fff6dd81ff695646ff373639ff373535ff2e251cff231207ff2d281aff869363ffd7cc82ffe9ce66ffd6a429ff693f01ff461b09ffc4633bfff9a62ffff6a60dfff0960affbf6b0cff4d330eff644324ffe8d86efff3f081ffeced95ff7dc098ff225751ff442a30ff4a6c50ff6dcc9eff3fd5a6ff34c497ff258463ff2c3836ff4b4042ff9e8473ffb3877dff8c6067ff3b5055ff2d3e3cff1c3533ff71908fff7be6e3ff32f3f1ff26f3efff10dad9ff094955ff622a2dffa69eadff38e7f2ff40f0f3ff26e6ecff0a98aaff4d4735ff9c3e4fff4db4afff53d8c7ff5dddc6ff36ae93ff23291eff195760ffc08179ffce888efff57fa3fff4739cffb32b50ff28251bff5e3437ffdab06bffdcb6b8ffedced9ffddabb7ff623b49ff582d42ff807064ffef933dffffb850fffcd077ffed9846ff61393eff387484ff8794acff83d1deff85f1f5ff7eeff3ff19a8baff5c5e2dff877a45ff6aa4abff9dccdfffd9d2e3ffc98aafff684859ff3c6156ff6c607affbb417affe473a6ffd67b99ff6f544bff665738ff2e6b65ffc1555ffff4525efff97d85ffec6373ff7e4b3cff754a58ffcb8577fff9d352fff9f373fffbf479ffdeba38ffa42e30ffe05775ffdaabcaff72dfefff7ef1fdff70e3f0ff3b6c87ffce707bfff6a551fff7bb54fff79e72fff57b7bffe76c75ffb15955ffbf5d5bffdd516dfff064a4fff07fa8ffe1a578ff351f21ff6f5849ff403839ff875530ff835316ff290e00ff433521ffe7bb63fff6e04ffff1d32effce9f1eff5c3502ff551c05ffd97b43fff9ab24fff5a70dffeb9010ffa85f07ff483518ff806d3fffdae5a0ffb4eed6ff23d4d1ff0b9792ff25393fff4c2730ff6ba17fff4ed3a6ff3ad2a9ff24b287ff2f604aff1e3337ff62645eff469c86ff41676aff3c5861ff2c494dff153537ff32636bff9ad3c7ff42efeeff2df3f4ff13e4f1ff0d6987ff182529ffa4696bff5bdbe9ff3beff4ff34edf1ff0ec3d0ff243624ff7c2631ff73a0a3ff40cfbeff61ddc7ff42c6a8ff1e4e3cff0f4c55ffb17671ffbe9195ffed65a8fff369aeffc02b65ff352116ff594346ffd1af6bffc0cccdffcae3eeffaac5d6ff254151ff513044ff7c7166ffef9642fffdbd53fffcd071ffdf853aff4f3a4bff387889ff8795aeff88d3dfff95eff6ff79e7efff157c8eff636633ff857f4eff48bac7ff79e8eeffafe8efff868ea1ff464c52ff376b63ff83587cffd54c92fff17cb9ffe06693ff754d2cff4c5e4eff586e70ffda4d58fffd6f71fffd807effd84f44ff5b4333ff8c6473ffe4a465fff8e855fffbf682fffaed63ff924809ffcf3551ffec849cffbccce5ff7aeefaff81eef7ff52bad0ff7f667ffff1905efffbd751fffbeb6bfff5cd6cffee7c7bffc25f5effb76055ffd45a66ffea5793fff072aeffdf7293ffd17642ff0f0c0dff3d2525ffad7247ffe5a733ffdd9f28ff87570eff2d1208ff824c1bfff6d235fff5e535ffedd02fffbd8f13ff502900ff62250effe88f44fff6ae22fff4a50fffcf8c2bff363c1aff4f3723ff6c9887ff37dae0ff1ddce9ff10c3ceff18797aff37313bff434743ff70c097ff3cd3aeff33caa2ff249270ff2c3437ff403f44ff70867aff3d8e83ff47646dff32535bff234244ff1d3a3fff88a3a7ff74e8efff2df0f7ff19e9f7ff0fa5d1ff0c3d4bff8b4341ff8bc2d9ff33eef3ff3beff6ff13d8e6ff083b45ff573c37ff958994ff33c7b9ff61ddc8ff52d1b7ff21765dff133e43ff91736fffba9b94ffe764a4fff26cb4ffce3779ff461b12ff554e52ffccab67ffb5d4d6ffa7eef5ff96dae6ff295163ff4a3248ff7a6e64fff09b47ffffbf5bfffecd67ffde7938ff504455ff3c7a8cff8f99b4ff8dd8e2ffa1f0f5ff71d7e2ff225e6cff6e6f3cff838761ff34cedcff63f2f7ff70f0f4ff108087ff484f50ff3f6f72ff9d4b7cffe05aa1fff482c2ffcc4777ff7a5623ff296c60ff8f6f7affe54955fffc8085fff3706bff8e5131ff6f424dffb77b7ffff2c558fffcf26afff9f580ffe9d13cffac342fffea5168fff69eaaffe6def6ffb8eefbff7ee5f4ff3e6b85ffdf787cfffdc04bfff7eb64fffbf477fff5cf68ffbe6d6bffb36056ffcc6461ffe04f7efff36eb3ffea75abffcf775effdb8158ff3b2c05ff120d0dff92532dfff6c341ffefc52affd99e1eff815104ff35150dffab7725fff5dd38fff4e539ffedca2affb58514ff492005ff863d26fff39e41fff3ba48ffb4b26fff2a7a54ff383422ff4c3a33ff61bbbeff2bdcebff18d6e6ff0aacbaff1d535eff4b283cff5b826bff5ad2acff38d5afff24b78eff2f5b49ff21353cff596461ff41a08aff3c6a6bff395e66ff315053ff183a3cff397382ff9bdadeff39ecf5ff20ecf9ff0fcff0ff034b67ff4b2a30ffad96a2ff3be7efff39f1f9ff1ce2f3ff0a6081ff4a4a3dffa85a6aff3ac0b5ff5fdec8ff59dac0ff259379ff10231fff647070ffbaa092ffdf699efff272b8ffdc4387ff59201dff4a5c5bffbf9e5cffc1d5ceffa7eef6ff95dfe7ff305d6eff3f3749ff7b7368fff19e48fffec25dfffbcd64ffd87931ff494658ff407d8eff939bb6ff8ed9e1ffa3f0f2ff66c9d3ff3d6563ff787741ff889276ff30d6e2ff6ef2f9ff61eef2ff016f71ff4a5454ff56737effb64382ffef70b5fff57fbeffa84357ff735c32ff2e7571ffc06a78fff05864fff98789ffea5a4dff59482eff845771ffda8e78fffde35cfffdf581fffdf26effaa690affcf354cfff26f5ffffdb296fffcdcedffd3e2f7ff5ab0caff9f6b7efff69b54fffee351fff9f477fffaef6fffaa9663ffa9695effbb6c5cffdd586dfff166a8ffec77afffd97979ffdb7e46ffba9e99ffa9831cff422c04ff1b0e0affc5802dfff6ca42fff0c52bffd79f1eff7c4f09ff3a1609ffc58f2efff7e33bfff3e234ffe5c62eff5d5418ff48210fff92583bffccbb73ff47c48fff2eab84ff1f634aff3c3326ff474448ff43cbd6ff21dcecff12cfe1ff0d96a3ff283547ff4b2c37ff72b592ff3ad3adff2ccca4ff209974ff2d3b3cff3d424aff6d8e82ff3a9e91ff436a6fff2e6f67ff1c4a46ff233c4aff9ab1b3ff6de7f5ff29f0fbff15e2f5ff0e8db5ff0f3238ffa85f61ff67daedff35f2fbff23e9f8ff0795bfff473a2aff8f2e3fff5cb4b3ff50d1c2ff62d7c2ff2b957fff201a11ff33696dffc1998affd2739afff47abaffe8569bff70242bff41615bffb09457ffc9d6caffa5ecf6ff9ce4ecff3d707eff3d3b4eff7a7163fff09f47fffec45cfffccf6cffd87830ff4b4e61ff438090ff9b9dbaff8ddce3ffa3eef4ff5fc0cdff4c6b5dff838047ff859d8eff31e2ecff77f3f4ff48e3e7ff0b6568ff3f665fff726d82ffcc458ffff382c3fff074b4ff8e4e38ff56624aff467c7effda626efffd727efffa888affcf563dff674144ff9f6a89fff48c8cfffce189fffbf486fff2dd45ffa5341effec4b66fff8873fffffc76bfffbd2bbffc0a0cdff506278ffea7e68fffdcd4bfffaef67fff9f27dffebd86fff967669ffa0775fffbb8c73ffdd6f8effed78b1ffe17a99ffd97f41ffd09988ff62c2cdffd2a424ffae851bff472f08ff1c0b04ffc9852ffff5cc3afff1c52bffd29b14ff4f3701ff3e1809ffd7a135fff3e242ffd5d162ff488e53ff333918ff462211ff67735cff8fc991ff33c398ff299d76ff274f3cff48342eff607d84ff36d8ecff24dbecff2dc6daff305a6aff3f3242ff465a4eff7acda7ff31d4aeff25be92ff2e7758ff203c42ff4b625fff3cb094ff36bfa0ff23ceb0ff279e88ff14393fff4b7e8eff97dfe4ff32eef9ff1feaf7ff10c3e7ff013d58ff7d383cff9bc0dbff30eefaff2cf0fbff0cc1e3ff0f2125ff6a3137ff8a9da5ff3cb3a9ff63bfb4ff337c75ff25221dff135a65ffc58f82ffc58e9dfff086bbffe478a6ff732836ff325a50ffa58556ffd4d8c0ffa6ebf2ffa5e6eeff4e838eff2e3e4dff7a7163fff0a14cfffec75ffffdcf67ffdb7a37ff455366ff478293ffa2a2bfff91e1e9ffa8eff6ff56b3c2ff576d52ff888246ff79a6a3ff3ae8efff7ef4f6ff34d5d9ff205e61ff357269ff8c6486ffdc509efff48cc8ffe2639dff855626ff2f7268ff57939affdb979bfff7a6a4fff47575ff88563aff774c6affcc6d9bfff872adffffd0befff7e07bffbf801fffd3314afff66b65fffda636fffdd06dfff6ac54ff614348ffb46977fff8aa4dfffde553fffcf57cfff8ec6cff968466ffab735cff829c70ff99c89fffd0b7afffdf7da6ffdc8452ffde906dff82b8bdff49e2ecffd3a229ffd5a624ffbd8e19ff2a2204ff240f09ffd28e33fff4d03dffe4cd47ff589155ff1f210fff421d0fffb79c44ff58b677ff3ab17fff3a8353ff302810ff482516ff83947aff6bc892ff33bf95ff259170ff313e2dff4f3937ff70adb8ff51dbf1ff57cfe6ff3e94a3ff2a3c45ff502b3aff749d7aff47d1abff2dd1a8ff1daf82ff2b4f44ff2b464bff6e9c89ff27e9d0ff1beee4ff1bdac9ff095047ff1e4754ffa6bfc5ff55e9f0ff2beff9ff15def7ff0e5f89ff2d242fffb68795ff46e7f8ff34f1fdff14dff5ff055576ff584c46ffb17b8bff389b98ff5d828aff3f5861ff1e2421ff105159ffb48a7effa3b19fffd6bebdffc6b3aaff47352dff275448ff94704dffe3ddacffd3eceeffdaecedff608786ff264751ff797163fff1a64dffffc861fffdcf6affd97838ff3d5869ff4a8495ffa5a3bfff95e2eaffa9eff4ff4aa7b6ff5f6740ff898447ff68abb2ff49ecf3ff80f4f8ff1bc4c7ff39565cff3a7977ffab5688ffe964b0fff28ecaffc94e7cff7b6130ff1f8484ff42b7c7ffbfdfe5ffecd1d4ffdc5d55ff604e40ff876e93ffe65fa3ffff77c7fffb89c3ffc75c49ffa02e28ffeb486dfff78446ffffc159fffccb66ffba602aff665866fff37964fffdd249fffbf172fffbf57dffd8c56fffab7662ff958b67ff6cc391ff81e4c2ffafb897ffbe856fffe68955ffacb0aaff44dae1ff6eeff5ff77551bffd8a727ffc0b63eff2c7256ff0f1a18ff21120affc7943bff5bc68fff21bb9aff2c8562ff211e0dff382118ff929060ff41b884ff33a979ff37774bff372b13ff522f22ff9cae85ff4eca97ff59be90ff888d61ff493629ff4d4142ff6ec3c9ff6ad2e0ff55bbcbff3d7b7eff393b46ff4e3d3cff8dcba0ff34d7b0ff28cea1ff28936dff2a444bff4b6d63ff42e4caff19f4efff14ebe4ff27ae9aff164042ff5d849aff9be4f1ff31eef7ff21e5f7ff117fa5ff123e45ffa44e52ff7fd5edff35f1fbff22e9f7ff0995beff4d4433ffaa4152ff4ba7a6ff5d7380ff4d616aff1f2f2fff194245ff94817aff7dc5a3ff89d9c2ff74d4b4ff1e4b33ff224334ff7b593dffeee388fff6f2d7fff4efd5ff796d59ff2a4b55ff797160fff3a850ffffcb5fffffcc69ffc66838ff3a5b6eff4c8597ffba94bbffc4e0eeffbfe4f0ff3e879fff645f35ff8c8247ff5897a8ff65e5eeff76ecf6ff09929cff4a5352ff537f85ffcb4a89fff378c1ffee81c0ff934f54ff626c4eff25969fff38d5e3ff82f5f4ff94d7d7ff616444ff67485effaf7aaaffef57adffff88d5fff3649bff8e221cffd12c4bfff06464fffaa031fffed170fff8ad4eff634440ffcd6576fff99133fffce054fffaf175fff2e470ff9c8069ffaa7d65ff77b07dff76e0baff8ddcaeff8f8c6effdf8f37ffe5b387ff87d3d2ff69eff1ff9aeaefff0b0505ff65511fff188d6aff159680ff1e7461ff111918ff1c140fff6e957fff1acaacff1cbe9cff27805dff251b0eff412319ff999e6fff34b685ff3aa677ff4c6b40ff4a2714ff604534ffbfc78bffe5de8cffe6d05bff7f6817ff4f3b30ff5d6662ff6dcbcfff68cedaff4fb3bcff35575dff493948ff5e7961ff6edab1ff2be0b6ff18d2a8ff35574dff2f4f50ff76bba7ff24f1e9ff19f2ecff1fe0cfff0f5750ff26505fffb7cbc2ff52e5eeff30e3f0ff1faaa9ff194044ff682d35ffbab5cbff36edf8ff35f0f8ff12c3e4ff162623ff802b33ff73a7aaff4e737bff556d73ff2a3e40ff21221aff5a7e76ff99c8a6ff63dec2ff63debbff2a7752ff26331eff715039fff1e856fff9f498fffcf490ff906618ff294e55ff817460fff5ab4fffffcf62fffcc358ff7e4833ff396372ff558a9effd470aaffeabee6ffd3bde0ff21576fff6b602eff97874bff537085ff81c7e0ff60c3dbff066d72ff4d605aff768190ffdd509cfff686caffd25792ff6e5d31ff3e7a6cff2bacbbff43e2edff80f3f6ff5bb6aeff3a6749ff7c658fffd772b3fffc69c6ffff8bd6ffda4c66ff9e282dffe63c71fff87e53ffffbf55fffcca64ffc05d2aff7a5a6dfff56c50fffdac2cfffdda5bfff4d361ffaa9774ffb07567ff899b74ff6dd5a3ff86e6c0ff98a77fffd79342fff3ab3bfff4e58afff6f0e0ffb1e8ecff60c4b9ff103932ff060304ff153426ff13997dff0f9c85ff227965ff111d19ff13130fff739782ff12caaeff17b99aff35805cff331311ff4b2e27ff98a97dff6eba89ffd7956bff8e3307ff562c19ff947352fff9e85bfff2e83dffdcc732ff654c0eff5d3f32ff7ba09bff6ed1daff63cad2ff449da0ff33464fff553642ff85cd97ff2aeed6ff0cead7ff1db08fff394f4fff517069ff4de5d2ff1ef4f0ff13ede4ff2aaf9dff163f44ff7e9396ff99dbc9ff38e0d6ff29cbb7ff1c5650ff1e2930ffc07777ff53e4f2ff41effdff1cd6efff092a3bff5c4842ffb099a3ff3a7e7dff627a80ff355051ff282217ff297774ffb9bc9cff57debfff6be2c6ff399e6fff342c14ff6e5543fff2e44efffcf576fffdf470ffac8417ff255453ff867561fff3b158fffccf61fffbbb45ff4f3d31ff2f6574ff578b9dffd6529cfff893d4ffd6589fff1d4a57ff786935ffa18d4fff4e5d6dff8e9dabff305768ff195d5fff457365ff997994ffe561adfff887c8ff934563ff7d6c36ff24938fff32c5d6ff5dedf5ff79f1f6ff42765eff555555ff9381b7ffe95cb2ffff85d9fff876baff952226ffcf2b4dffef499affff8993fffebb83fff5a249ff684850ffd9677efff88c2cffffc95afff9c048ff80656bffa47570ffa08a6eff6cc490ff82eac6ffa6d1a0ffbb9c5dffef9d34fff7db46fffbf475fff7eb9eff97bec5ffd79d60ff25807aff15443aff070405ff0e2d22ff129c7fff0f9f82ff279a8bff171518ff191916ff7da08cff35cbafffba9099ff951217ff3b1910ff65402fffeda26cfff08e26ffe37402ff7d3201ff64361dffd1ae61fff7ec3ffff2e53fffccb62eff583f12ff5d413bff78bdb6ff6ed2dcff58c5ceff32747aff44494fff4d6350ff7af1d5ff12f1e6ff0ddfcaff2f745fff31535aff80b7a4ff27f1e9ff1ef3edff2cdccdff16443fff345a69ffbbd0b8ff4ad9c4ff36d7beff26927eff113a3effa94642ff99cddfff42eaf4ff30d9e0ff144e49ff53503bffc06473ff3ea79cff688384ff3f756eff1b2d1cff0d6566ffcca992ff47dbbaff74e7ccff49c38fff413716ff716651fff1e14efffcf672fffcf673ffcca62aff1f5b5aff8c7962fff2b45cfffed063fffdbd40ff4b3d35ff32697aff5d8fa0ffdb4f9bfff48bcdffd24489ff2c5263ff87763bffa69156ff5f6a79ff8f9aa1ff204b53ff2d5a5bff3c8175ffb46b98fff277c0fff17cbeff58423cff6c724bff1fa4a4ff33d8e6ff77f5f9ff65e2e4ff316f51ff6a5a84ff94a3d3fff482d2fffd92deffea5a8bff94272bffe3387efff450b3ffff88d1fff68788ff96482eff8d5f7bfff26f4efffcab37fffdd060ffd2754eff777e88ffc35972ffcc9b8effa5debbff9ce1b5ff929b6bffec9835fff5cc42fffaf167fffaf36cffcea479ffbbb572fff15349ff119b9eff268884ff132434ff0a0406ff0c2d1fff26aa98ff0b7885ff226066ff16171cff191912ffc18390ffd82c3dffd1251fff8d140aff431a17ff964827fff7960dfff08f07ffe47108ff763006ff703d1fffebd069fff8ee3cfff4e03effb99b27ff5a3c29ff5d4e4aff61ced3ff3fd8e4ff25b7bbff394e4cff55444eff77bf98ff39eedeff11eee1ff1ccbaeff435658ff4c6663ff5de2cdff2df3edff2ddeccff326d5aff213c3fff99a09bff8bddc1ff41dfc4ff2ec2a4ff1e413eff542727ffcc9587ff4adfcfff3dddc6ff218b75ff34301dffa1353eff5ac9bbff5addc2ff31dcc5ff043522ff146464ffc1a08eff49d9b7ff72e9cbff4fd3a1ff3c3814ff687860ffecd94ffffbf36cfffbf579ffdebe36ff1c5d5eff8e7962fff4b865ffffd26bfffbbe3dff493e3cff2e7082ff6b97afffdf54a2fff591d2ffca4284ff436262ff918343ffa9925aff6d7a86ff899096ff124d54ff475355ff4a8c8cffc55699fffb8dd3ffe165a3ff5b5d2fff4a836dff28b8c0ff41e3eeff84f3f8ff5db8b1ff406e5cff6a91cbff66d6f5ffe8e4f8fff090d0ffa52a3cffce2f54ffee48a5fffa64c6ffff81cdff9b435fff5a5162ffe36a81fffa8f2effffcf68fff3ab4fff616d85ffba6971ffda488bfff586b8ffd4bfb1ff9ba385ffe79a41fff3b638fff6ea53fffdf577ffe4b556ff9dc181ffec582efff85251ff1e9b9cff2085a1ff2d2d3cff201814ff0b0404ff0b1412ff137778ff107f83ff236267ff17161cff201513ffc72b3fffda2c2effd32524ff8b1108ff4e1d18ffb85a2bfff69809fff29105ffdc6c07ff6b350fff7c4821fff3e05efff9ed42ffeeb63fff762e1cff5d3c33ff74a19cff1edbe7ff16d1ddff219995ff444d51ff554748ff8decc9ff1bf1eaff0fe7d8ff3b8a77ff395358ff83988aff3de1c7ff38ddbdff42aa83ff1e3b35ff40626dffbdd7baff54dfc1ff48dab5ff466b57ff1b3433ffd66251ff70d0b8ff48dfcaff29bd9dff152218ff784137ff96d3c8ff3af4edff22f2edff037c69ff19473fff9b9b89ff5edfc1ff6df0d8ff49e4beff2e3d1fff537c65ffe3cc53fffbf666fffbf67fffead03fff1b5c5eff907667fff2bb6fffffd36efffcc245ff4a3d3dff2e788eff779db9ffe45ba8fff394d1ffc6447dff5d6d5aff978843ff9a865cff828c97ff7e8489ff0b5c5dff565958ff659babffd15ba4fff797d8ffc65487ff7c7431ff239a89ff33cecbff66f0f1ff76edefff3c7f69ff605a73ff4fbae8ff46eaf9ff93f2fdff656678ff902f38ffe43c85fff054bdffff86deffec62a6ff4e3a45ff6471a1ffeb9477ffffc054ffffd26bffaf6669ff9a7d85ffcd4d88ffe956a5fff177b1ffda7a70ffd5a259fff4a737fff7df49fffbf577fff5dd4fff8ac1a2ffe96f36fff7524affff7678ff0f4a50ff263150ff242a2dff2f2e2bff27201dff0a0703ff0c0f0aff177d7eff108085ff659695ff2d111fff261714ffd42b40ffdf2d30ffde2d2aff60131eff532520ffd56e2efff59c07fff29110ffac4f04ff673a1dff996540fff4ae53ffe54635ffce2f2dff6b3524ff68493eff5ec7c3ff15dae4ff18cdd2ff2f7572ff534e56ff5a8268ff7befdeff85f2e7ffbfbca5ff5c4e53ff525f60ff7ec4a3ff34deb9ff3acc9fff33674eff2e4142ffbdb8a7ffd0e7b4ffe2eaadffd2ba67ff2a3e38ff9d342bffb8b5a1ff52dfc5ff34d2b0ff124f3eff695d43ffcba7a7ff36f3ecff31f4f0ff1ac9baff222e1fff689a90ff8be6d1ff57f5eeff34efdeff1c3b22ff377759ffd7be55fff9f365fffcf679ffdcc33eff1d5c5bff99776dffefc37fffffd875fffac857ff494146ff288199ff79a5c5ffe169b5fff39ad3ffa94676ff73754bffa59242ffc4a355ffc1ada1ff6c7271ff126965ff4d7568ff5fc1ddffc9cdeaffe3b8e5ff82495fff7b7847ff20af96ff40ddc9ff78f1e6ff5ca8adff327750ff857bb3ff2bd6f0ff70f6feff5cdeecff634240ffc93555ffef4dabfff865ccfffb88d1ff9e4763ff555f7dff64a5e0ffb7e5fafff5e2ceffe99661ff6f819affc76281ffdd4595fff67bc1ffde6267ffb99b75fff48928fffec036fffff16dfffbee67ffa3bdabffe88e49fff65243fffc7375ffef7f6eff090202ff0e090bff352a2bff272c2dff302e2eff29201cff0d0808ff120f10ff6599a0ffaf1d64ffad1040ff301319ff2d1918ffdf2f43ffe42f66ffcb225aff581720ff602524ffe38131fff59209ffe67e06ff964305ff6d3a1effad645dfff34543ffec3b3bffb92927ff65412dff5c4a48ff31ced1ff17d8e4ff26c2c2ff3e5157ff67424dffc4d0a9fffaddbcffedaa44ffa35f29ff464f5aff88887eff47d7b4ff39d8b0ff46ad7fff2a433cff5a7774fff3eda1fff9f177fff2e34cff59461bff3c2b25ffe28b71ff5bd9beff44dbbaff2a8a71ff524528ffc5595cff3fece3ff3ff6f5ff19e9e0ff2c3a26ff308d88ffbce5d0ff4af6f1ff34f1e8ff053727ff32674cffc6a658fffaf35ffffdf675ffccb230ff1a5b5eff9a766cffc4dcc9fff3ebdbffedcda8ff334753ff2c88a6ff51c0e1ffcad3f1ffe1d3f4ff684265ff77723cffc1ae4ffff7e864fff8ed90ff706a48ff217068ff428e7eff3fd9f3ff7df4fdff73c5ddff335a44ff588661ff22bea4ff5de7d0ff77eac9ff615d3aff4e6c60ff7face1ff32e5f6ff8af5fdff1f9093ff873839ffec3b77fff157bbffff8ee2ffec69a8ff58445aff5c87baff4fd4f6ff7bf5feffacb3bcff62729cffb47986ffd44992fff56fbfffe96d95ffb68880ffed9037fffa9b1dfffbd349fff0b24dffc5b097ff7ed17affea643bfffb6b6cfff68679ffd34534ff471d14ff080404ff0d0a08ff342b29ff272c2fff754b30ff875719ff110807ff1f0c11ffab1a4dffbf1e58ffb91343ff3c1017ff39181affe12f73ffe32c73ffc82257ff5c1922ff672b2effeb872bfff19106ffe27400ff813a07ff713a23ffd27377fff34045ffe73338ff902e21ff654a36ff768985ff1dd9e1ff24ccddff244057ff5d4d53ff815250fff5b12dfff5b40effe88f14ff734a46ff535359ff8db9a1ff3ddbb6ff40cfa0ff3d604aff3e4d48ffe7daacfff9f361fffaef55ffc4a239ff244539ffd65943ffb3c6b3ffa3d5c2ff8f8088ff262614ff9d3e3bff6de3dcff46f6f6ff25f0eaff0c483bff0e7a78ffd6d3beff4cf6f0ff43f4eeff0b6753ff32543affaf854dfffaf361fffff574ffe3ca3aff185f64ffa67973ff4fe3e1ff8cf2f2ff36d1d2ff1a4c5fff2b8eb0ff22d0eaff6ff1fbff60e7f1ff0b4f64ff796e32ffd6c657fffcf470fffbf683ff445c44ff3c6b67ff39a8a5ff3fe5f6ff72f4fbff0498a4ff707541ff31a48dff2ccfb5ff7eefd9ff5ecc9bff557a4aff755f84ff4acbebff61f1fdff6debf7ff5d5750ffca3748fff54673fffb72b8fffc7fceff954966ff557290ff60b5e9ff53ebfbff81edf3ff80588fff8f969effe47c89ffe85ca5fff680c0ffdb7e7affe3a456fff78d22fffdc445fffdbf47ffdc6f80ff5bd59aff65e3c7ffa5f5e2ffeb9786ffd04541ffecb275ff6e5d42ff1c3a28ff060604ff0f090bff54392affcd8f2dffc9921cff9c6517ff140b04ff1c0c0effb62152ffdd2b5fff880c58ff33191dff3e1a22ffe42f76ffe82e76ffdf3069ff592023ff75302ffff28a20fff29008ffe27807ff613b24ff7a402cffdf6471fff33f40ffa03e41ff5f4033ff6c4e44ff8cbab3ff33587bff354044ff504343ff71495affbd865cfffab617fff4a70effc77125ff504c5dff88817cff4dd7aeff3dd8b1ff4b9773ff38493bff839888fff8f188fff9f360fff2db4cff4a462cff86302dffe2748affe27cb9ffcd4993ff36262aff7a5a3cffc5cdceff44f5f0ff38f4ecff086c65ff1d6765ffcebdabff4df5eeff56f7f5ff28b3a1ff34381cff966747fff8f159fffdf579ffe7d63fff1c5d5fffad787bff46e3e7ff78f3f5ff21d9dcff154f66ff2895b6ff1fd7efff66f3fbff3be4efff115469ff7d7332ffe6db62fff9f47cfff7f27bff29644dff53655aff42c7ceff42eaf4ff76f4fcff00666bff848545ff16bca9ff3cdabfff8af2d9ff4c7240ff427d52ffbe70b8ffbed9faffadf4fcff36bbc5ff863d3cffe83a50fff35168fffc8494ffba5e7cff555567ff5f96cbff3eddf6ff85f4fbff9a87a8ff538fbdffe29b4afff9bc5cfffab399ffe57078ffc9b283fff78a2ffff9b42cffffd558ffda4f4dff55d4a9ff6be2baff44f5eeff50e4d1ffa55c53ffe35f68ffee5a5bff308262ff2b7357ff224834ff090c07ff140703ffa67326ffd79e20ffcc9922ffa56c19ff1e0c02ff1f0c11ff711352ff831341ff7f0c37ff391920ff411a1effef3a7fffdd2675ffa92450ff602722ff82362bffee9524ff49392aff272f31ff6b412bff814c41ff5e4651ff323f45ff2a3837ff66472fff6e554dff4d6658ff3c4b53ff323736ff634b50ff874355ffefa642fff9b211fff1980eff804942ff4f505aff9eb4a2ff3cd8b1ff3cc79cff465741ff41544efff4e7b2fff8f367fffaee56ff92722eff324040ffef6b67ffe758afffdc4fa5ff692642ff645230ffde848eff61efedff65f0f3ff326871ff223a2affa9b6a9ff5aece0ff61f8f3ff42dac5ff4a3b1bff8b6550fffaee57fffdf57afff0de4bff1c5c5effac787eff3ee2e5ff73f3f3ff1fd9dbff1c4d67ff2b98bdff1edcf1ff6ef5faff30e0ebff165c68ff8f8d47ffeee566fffcf689fff9ee6cff167763ff5c7463ff49d5e4ff55f1fcff55edf9ff0f6155ff679166ff1dcfb6ff58e9d0ff7ae9c9ff5e6c34ff6e6362ffea5ec1ffffb7f7ffe3d9faff466662ffca3d48fff64359ffff7d8fffec5e5bff375261ff51899fff56caefff5af4ffff91e4eeff6575aaffbda17dfff4ad33ffffd467ffbf7234ffaaa193fff3cb4efff7b626ffffd863ffda6a37ff7dcac1ff74e1acff37eeeaff5ef3e8ff867e70ffde6070ffe9585bfffe7677ff278265ff1b8d6cff2e7d61ff2c513bff0d170eff120801ff91651fffdca426ffd8a422ffb46f29ff240f11ff160d0dff6a1537ff8a1442ffa22e5aff2e2026ff4c1e26ffdf2c72ffd8276dffa5214aff602d27ff84473aff3e383dff30333aff1f2f2dff71442fff755f5eff374852ff2d3c42ff2e3833ff71523eff736c5fff355357ff3c474aff373532ff704f58ff8e584bfff9ac26ffdf902eff5e3f3cff584d59ff867980ff4fd2acff38d3abff599f7cff3a4f44ff9eb2a4fff6f091fff7f48bffa6ac9bff254546ffd65043ffe552a7ffe357b0ffb53e7cff34240dffc43c45ff89dbe2ff82e5efff5da0abff38311bff72aba0ffd9e8d6ffddf5f0ffb6cab3ff4e3b17ff807465fff4ec55fffef77bfff5e553ff1f5553ffae737fff36dfe3ff73f4f4ff1fdadbff1a4d68ff309bbfff1fddf2ff71f5fdff25ddeaff206775ffa19f56fff2e963fffcf68efff6e563ff177d6bff59977bff40dff0ff71f5ffff33daeaff55814fff3ab59dff22e9d5ff72f5e6ff54bb92ff4d8c4dffb55687fff15cc6ffff8fe5ff761e42ff8e3939ffe6394efff44e66fffe8c94ffa7646aff576775ff5ad2d8ff4af5f8ff71f1faff7e6796ff73a7b6ffeba63dfffece5affefae39ffda9c8fffe0d466fffbeb5cfffcf474ffe89e4fffbfbbdcff66e8bdff3bede0ff63f8f6ff609883ffdf6476ffe15960fffe6d7bffa5b8cbff154030ff257f61ff1d9372ff268565ff3d624aff221113ff130903ff7d571affdfa334ffb52221ff9e1b1dff27100eff1c0f11ff74314bff115765ff27454fff342528ff5a2329ffe32c73ffea336effb62050ff66302aff815347ff3b3f45ff2e3439ff3b4938ff794a33ff6d7a7fff32414cff25393bff5d5539ff765a47ff99ad93ff3a524fff2fa37cff525e53ff814e5eff637864ff494d56ff413f46ff6c5055ff484f5cffa7a89cff41d7b0ff3cc49cff505a4bff42575cffdee7e5ff84e9efff44d4f3ff3c425bff672933ffe2567effea5bb5ffd94698ff381e25ff994338ffb7c3d6ff89e1efff7fc8d5ff323024ff3d9195fffec07afffadb94ffe6a22cff4f371dff748676ffeddc59fff8f175ffe9d558ff254947ffa76f80ff38dbe2ff75f4f8ff22dadeff204a65ff2b9cb9ff24e0f5ff7af5ffff1fcde1ff3c7879ffa09f52fff6ec65fffcf797ffd9cf5fff24796dff41aa86ff41e5f0ff75f3fbff0599a9ff889248ff1cdbccff38f4f1ff54f6edff6a5638ff5c8159ffe35fa9fff770d0fff364b4ff5f6154ffc23f47fff03f53fffc7388ffec665dff395561ff579fa6ff3beae9ff6cfaf7ffa1838eff4894caffd7aa5cfff9bc38ffffd65dffd6845affc7d38efff3e457fffcf781ffbf9d54ffe199b7ff4cd8f2ff34eef8ff6ff5f3ff39b395ffe54c60ffec5d6ffff86d76ffc5bcd2ff29bcd9ff090203ff0f2c21ff247a5cff2e9576ff6f7872ff822447ff390d17ff150b07ff3b0b08ffba1b1fffc02221ffa81b1dff311312ff131616ff10565aff1e6065ff329b9aff3c2a2dff682934ffd82375ffd22460ffac203aff66352eff7e5b48ff468863ff19846fff4a5a46ff754d3aff476f76ff32ae9bff20a49bff66553fff7b6356ff53d5aeff0cddc8ff11b199ff6d5c61ff764e57ff3e5655ff3e4a51ff473940ff5f535dff827b83ff53d2afff42d3acff837f74ff3a484fffaab8d1ff37e4fcff2cdef5ff3b6994ff30444cfffb6f65ffef58b2fff34a9dff6a1b29ff7c5438ffe88faeff8cdeecff87d5e4ff20282aff287478fff0a057fffdce41fff9b512ff492b1aff60907fff746752ff9ea278ff4a4f3dff1f4546ff9e6377ff45a4baff6bdcebff147b94ff1c465fff319eb2ff33e2ebff6cf1f9ff017c9cff628e79ff868d52ffc3c67bffeee787ff416137ff457260ff3abc8fff55eadbff55e2cdff09635fff839c60ff15e6dbff5ffbf8ff38d3bdff76854bff976273ffee5bb9ffff97e5ffb92a50ff8a362fffe83d48fffa5a6bffff878fffa26e7bff5d7580ff57d9d9ff5af8f8ff5acda8ff8070a8ff37c6ebffcae1c8fffede86ffcc893bffabbca9ffeee062fffcf479fff1e379ffd56b7eff45d2e9ff33e7f6ff53f1f0ff3cb4a7ffe04656ffe95568fff9717fff95c0bbff27c9e1ff50c3e6ff531214ff100405ff090f09ff446c5bff912e5affa1225eff91234dff48101eff1e0d0bff2d0908ffb91e22ffc72322ff6d5238ff1a2023ff1b1819ff288483ff2c495cff2a3b42ff46302eff6a3038ffdd2871ffdc2262ff972650ff6a3d37ff6c8065ff229b7aff13816eff665946ff805142ff1fbdc9ff0bbac4ff2c9e93ff7d5f4aff777063ff28e4cfff0fd6c0ff299078ff785a68ff4c665fff415155ff3b424dff705659ff4f5263ffc997a2ffd394b3ffd04283ff5e5052ff45617eff8ad8eeff32e4fdff51c1eeff424558ffc8413bfff4547cfff94c6effbc2d35ff5b311effe6495dff99d7e6ff8fd9ecff414d59ff2d4d49ffe5926dfffdc63bfffcbf19ff4c1e0bff4d8370ff6b5451ff747a78ff41524cff243d46ff945b70ff405a62ff708590ff13333fff21445dff35a1aaff40decdff5aebdbff033b4aff7b9066ff5e6744ff6c8184ff596d62ff0e5859ff5c7259ff37c99dff6deed5ff2aaf8aff317347ff4ebb96ff1feee7ff7cfafdff2a5a54ff519758ffd7619cfff667c9fffd80cdff716552ffb7423ffff44456ffff8a93ffbb4f3eff3a545bff58acaaff33ede7ff6df8efffb46d7bff2eb0deff1fdef2ff64f6fdffb4955fffccaeb6ffbee794fffaef6bfffcf484ffc75b57ff57cfe5ff3be4f6ff54f4fcff48c0b0ffd84452ffea596efffb7180ffa0c9b9ff2de1efff51c7e8ff30f4feffac2d2dff6c1f1bff21080bff14060aff58122bffa42257ffa5225fff922655ff631a2eff241012ff250b08ff66513dff138374ff20786dff172a2aff1d1e1cff2c474aff5c8a82ff49214bff563431ff843445ffda287effc41a54ff88283aff754240ff598f6fff1e9978ff807163ff81583cff7f665fff16c4d6ff0cb6c0ff369887ff8a6c57ff99c1adff1ae7d6ff14cfb0ff716260ff8b5063ff3c6a5dff3d7c64ff468269ff6d5766ff807381ffe1469effd94296ffb6546dff3f4858ffcbc2e0ff3ce6fbff3bdbf6ff444d6dff5a2f35fff36247fffb525fffee3b44ff461c19ffbb3537ffe0c3dfffe3cfecff903d52ff3b241affc3a28ffffcc02dfffac122ff621700ff3a6552ff6a4a4fff717a79ff485855ff25363eff88586cff405960ff73848cff15333bff214660ff34a2a4ff46dec2ff57e6c8ff0a434fff7c8146ff4c5b43ff788a8dff41544eff116b62ff678d6aff3ad4a6ff80f2daff006d5aff7b9044ff2ad6c1ff34f3ebff64f9f6ff73613bff6c7b5effe050a0fffb7fd4ffde4583ff894536ffe43b45fff75a6bfff2605fff747683ff5f808fff55e1dcff6af8f9ff86b992ff5191c6ff33d1f3ff46f0fbff7dcdb6ffd09985ff2bccdcff32ecf2ffa0f0cfffb66a3bffed6c66ffecd6ffff5df2fbff55cbc7ff56b1aaffaba67cffff7288ffb4c7c2ff2ed3f1ff23e6f9ff7afeffffca99caffd52a33ffbe2f32ff892624ff310c07ff140607ff3c0b1dffa22357ffae2263ffbb3b5bff8d3b17ff2b110bff1a0d0bff127b6eff0b8c80ff157e6eff163339ff272222ff3c1a3eff721833ff992956ff673f3fff813646ffd42062ffed3666ff764446ff7d4f4bffcd7749ffd0720fff9c4c0cff8d6149ff7d898cff34daf2ff12a7daff5c7278ff917661ffb0edd0ffefe49cffcc9b29ff8a656fff785f67ff31c99eff35ad8cff616b64ff595466ffbf5c93ffe147a2ffdb4181ff685053ff647992ffceeef5ffedeef6ffcd9774ff464947fffd6749fffa555dfff7414cff72181aff9c553efff64862fff4556bffec3f46ff49251dff89a8a6ffffb62ffffac334ff803200ff354632ff6d414cff707477ff4d5959ff242d34ff7c5165ff3f5356ff74828aff14323dff26455eff3aa59fff4de1c2ff58e4c2ff0a4955ff72702dff47594eff859699ff274444ff177664ff54a871ff44dcb3ff78efceff026654ff969d48ff2ce1d3ff5af8f5ff40e2d0ff6d9c54ffa15670ffea5ab0ffe75696ff5b6158ffad4440fff1404cffff8993ffc5573fff44525eff71bacdff8feff5ff6cd9cfffa5689fff36c9eeff29e5f7ff6df1f5ff998a62ff4ac1d6ff1be1ecff52f5faff8a9b80fff66c50ffec5c65fff57c99ff93cfc3ff52b3acff34e3deff42f5e4ffacd6bcff2cd7ecff33e0f9ff62f2effff96da3ffe47adcffd72c34ffdd2f38ffd53932ffb14d20ff53250dff180908ff2e0812ffa02c50ffd86238ffcc650affa74b11ff321709ff241111ff1c7162ff2aa3a2ff2c202aff2c1e21ff312527ff711e3aff971442ffc83a5eff775649ff933c52ff3f1d4cff2c1f20ff824c42ff955b5bffda7a12ffd66f14ffac6a22ff9a6956ff609ec5ff0fbdedff0e96c8ff977566ffab7e6cfff6de44fff0cf37ffae7630ff98637bff479e87ff30c49eff43997dff81656eff7b7683ffe1469fffe24096ffc95c73ff4e4f55ffe8e298fffaef6afffcda4cff674d47ffaf3934fff14e4cfff94954ffc72f34ff773c22fff43946fffc555bfff33e48ff451b13ff42898fffff6c9ffff675a1ff7d0b26ff433120ff784250ff6a6d71ff525c60ff21262cff6c4a64ff3e5155ff7a838aff19343dff2b4965ff3aa7a0ff53e1c3ff50dfbbff0c4d57ff8e8642ff4b5b54ff96a09dff1b4445ff2b7661ff4bbe81ff52e8c1ff5bdeb2ff196b44ff6da467ff37e2c1ff65eed6ff533e3eff55a15effcb4b90fffc84d1ffad1c3fff77543affd4464cfff55568fff36764ff6a7c8aff6586a1ff7bd9e7ffa2ebe5ffd38a71ff3ca0c9ff56e1f7ff65f6ffffa1a07effb3c3cdff1bdae9ff4df8feff68b79dfff16f53ffed5c5efffe7988ffbecba2ff48c4aeff3ddbdbff34f9f4ffb1dda5ff59d4e3ff64f4feff5ff1edfff66dbbfff57ad0fff879e4ff8e171effd32c32ffe5572effde6f15ffc55e12ff79340fff220d07ff200b0cff8c4711ffd76e04ffd06c06ffb95812ff3e1b0aff271611ff1c1b18ff172021ff2a2227ff402420ff37282bff952844ffcd744dffabae5aff846361ff4c3939ff5e4d4eff8b1f22ffae5e54ffae695fff7f5a29ff312b35ff786057ffa37268ff33b4ddff12b8e4ff4c71b7ffb37c65ffcea682fff8dc45ffe8c12effa37065ff945d74ff37c6a1ff30b892ff5c7e6fff6d5e73ffce6fa0fff74badffee3c80ff73584dff8ea39cfffdf058fff7e94cffaa702cff473832fffc7743fff56a55fff46e38ff4a1c16ffdc3634fffb505afff84750ff630e09ff396f71ffeb4d99fffc5dbfffc72b60ff49301cff754a56ff5e6469ff475456ff202028ff5b4661ff3e9178ff6eaa99ff072c30ff35506eff49b1afff63e1cbff50d0b1ff12575fffc1b857ffedd660fff0d981ff1d5252ff547158ff42d298ff6befccff16694eff699449ff37b983ff57eac9ff38b67fff826f3aff847261ffdc52a0fff778bdff553c38ff624641ff5f4f5bffda7982ffba5445ff4a5c6dff6eb9d2ff97eef6ff565738ff7b7bb0ff60cbe4ff95eef8ff98998cffe4b160fff3e6abffaaf0f5ff4ed5bbffc25f6dffee5e73fffa6f76ffddc6a6ff40cec5ff25ececff6dfffeffc7ecb3ff75d5d9ff7ce5f3ffbaacbbfff6646bfff35d80ffffd9feffb8eae8ff190807ff591212ffb9531cffdf7809ffe07a09ffd56b12ff9f4817ff361004ff200d10ff68300fffd77009ffdc7606ffbb3238ff59152cff281915ff22201dff3e342dff9e642cff814b1aff412f30ff9b8440ff9db6a0ffb999a7ffa9858eff84414affc8312bffc03039ffa86b66ff9c6d6fff2e2d3aff41363affb38f6cffab7b7bffa33cb2ff9e2d7fff854666ffbe816bffefe075ff83c35fff1e6b4cff997887ff637075ff34737fff3a3a45ff9a727dff937688fff74eaefffa49a2ffdf6877ff605d5afff4e770fffaf156fff5d341ff54403effea5d33fffbb21ffff9980eff60201cffae4f41fff84550fff74f54ffa52225ff3d4439ffd35f8efffb5ebbffeb4087ff4c2b1bff705d64ff5a5e64ff495457ff171a1eff4b4361ff40caa7ff4fdfbeff00292dff3a5574ff5dc0d4ff84e4efff387373ff20626affded45dfffaf364fffdec55ff11655aff788a5fff42d8a4ff67eec4ff105e57ffb0a445ff35ce9cff79f4d5ff1f432eff5cae57ffa36170ffee6ebcffd63b71ff6f6648ff3d4c49ff6b7485ff805144ff5a838cff658ba7ff82deebffa1e2d8ffc46c76ff43a7c3ff7ee6f2ff80b0abffbd955ffff5d862fff9f57fff88b9bcffa77063ffe15c8cfff66ccaff9dcdbbff45d0c2ff40e6e3ff45f6e8ffdce677ffeeea99ffeaf5f9ffd5cddeffe45690fffc83b3fffde0edff95f5f4ffb6f6faff63280aff180f0bff1e0a08ff90470affdf760dffe77e06ffe5720bffc66518ff50280eff220f0cff411b09ffbf422fffd02367ffc5245dff761f39ff321e1bff422818ff946e13ffa7701cff7d712fff4d4343ffa27c81ffb3b4d0ffc79da6ffa98a92ff8e4557ffba3555ffa4708dffb87b72ff9c6961ffc49034ffa17c28ffc69168ffc28d90ffc12e83ff9d296fffc2877cffb78577ff39b994ff1e9877ff566f60ffa47796ff3c4651ff3b424dff3a3737ff917085ffd986affffb4daefff03e7fff775f4fffa3bfb1fffaf050ffffd958ff754543ff843130fffdaf1dfff8a615ffa33811ff905434fff93f47fffb5057ffc33433ff391e12ffc4a2aafffc60bafff74ca2ff442015ff717e7dff575b61ff4e585cff19181eff40435fff39c7a5ff53dfc1ff00272fff3f5c80ff61bfdcff88e1f3ff1f545cff3b7674ffe5de5bfffaf568ffe2d146ff17806aff7cb275ff52e2b4ff5cdfabff106a50ffa4ab56ff40ddabff76efc4ff6c4634ff52bb65ff44d6a9ffa4d8c4ff5b2627ff725241ff414f56ff7e817eff8b624fff4c3b3dff3b577eff9eceefffaf7d5cff6b86a8ff6ed1e6ffa2f1f4ffbe9359fff8bf5efffaef6effe9f1beff94a880ffda6382fff064c1ffa8b8c0ffd2da73ffd7f8f2ff4ff5ebffbb9d92fff7f374fffbf69cffecc09ffff97babfffcacdffff1e2ebffdeecedffdff2f8ffedeef5ffb6763fff3b4f4bff19191dff170d10ff64300cffd86d0afff18a0cffec9e1dffcd8c2bff774819ff2c1615ff291316ffa62350ffd5256dffcd2462ff7d3757ff382021ff452a16ffb09e41ff215670ff2e4f65ff907979ffc5a0abffbd97a1ffb399a4ffb1959bff875665ffe2ccbdffe1ad75ffc68283ffc88852fffbcf4fffca5622ffc99175ffb2778cff34a7a7ff0f7a7bffbe9372ff96928cff2db08cff1f9474ffad8e9aff9e6b83ff3d4654ff3e3b42ffa6868cff8d7e93fffa50adfff34699ffa78275ff6b6260ffec5954fff64948ffd4464aff47413fffff932ffff6ad19ffee7e0eff562015ffed383dfff94c4fffed4343ff3b1d0fff7db9b5fffa66b2fff676b1ff37140eff68a195ff52585bff545f60ff1c131cff394763ff3fc5a4ff56ddbdff002b2dff456890ff64c2ddff8ae1f4ff093945ff66947bffece554fffbf670ff928315ff2d8f72ff69c47dff60e6c1ff3ca879ff478746fff4dd64ffd6f0bbff64c493ff97964fff58c47cff55e7c7ff454f2dff748963ff3c524aff5a6673ff77544bff588088ff4b404bff768292ff954037ffc8589ffff052befffbe1ffffa19872ff79a784ffdcf274fffcf799ff82c99cff79c4b9ffbed4e1ffceaed8ffdbde6cfff1ee70fff7f6afffcf92b8ffe879a6fffed9e7ffccf4f7ffbcf3f4fff9d0bbfff6dadeffede0e0ffe3e2e3ffdfe8ebffd9e6f3ffaaa97fff309e8fff3f6e68ff283431ff191317ff37170fffb56313ffebab2cffe6b22cffdb9c28ffa16826ff351c10ff2e1519ff841d40ffc43773ff13789aff18617fff34272aff3c2c2dff18566cff2493beff535c75ffba929dffb89badffa495a6ffc69aa1ffcf9b9effe1ab72ffcb7e76ffcf968dffcf9d8dffc45c31fff98f35ffa9958cffc7a09aff49aca9ff10a8a1ff55a8a2ffca9f89ff51b1b7ff0caad7ff1a789dffb493a7ff504c57ff373d47ff31353cff938496ff7daba9ff49bc97ff3e967dff735f53ffc1acc6fff6484effee3540ff644043ffd84d3dfff8ad1dfffa9811ff591d1affc63e37fff9494efff54444ff40160fff299e90ff5aedd3ff32ebd3ff201207ff4f9584ff585157ff71616aff1b1018ff314e69ff46c1a0ff60dcc2ff002b33ff43719aff6ac9e4ff90e5f6ff032f40ff81a371fff0e954fffcf776ff4d5411ff4a896fffa1be9cff91ebcbff13614bffb1b345fff9ea4afffef66dff493328ff67c75fff3ecf9bff73ecc5ff6c272affbb5d47ffeb535dffd38d95ff98766bff624143ff445669ff8c5e62ffe37d74ffd945a5ffff70dbffa05f82ff88976fff54ccadff5aede2ff65c8beff7fc0a1ff83e3ebff52bfd1ff32dfdeffc3fecbfffef7b2ff86f3e7ff84ebe6ffeac7d9fff0dbe8ffe5e8f0ffe1e7e1ffeedabfffe9d3cfffe6d8d6ffdfd9ddffcadce9ffa6d9e8ff45b79eff0fc5baff19b6abff3e9289ff354f4dff231c20ff1f1214ff623c16ffe4a32dfff1ba2fffe7ac2bffc28d34ff2d2325ff2e1a1bff1e2529ff0a799cff0c81abff146e95ff312f3aff4d3035ff234059ff28809bff4f6096ffaa8e99ffa99cabffa5828effd39c9effcd99a7ffbd8f9cffc6977dffd9c3aaffc3a9a7ff59789bff38c7f6ffcfc3e4ffc6a8a0ff31b4c6ff0c7eacff9c9a93ffc8a3a8ff1bbadfff0b9dceff87a1b5ffb17d9cff3e434cff2d3a42ffa1848fff837a95ff3ec09cff3ead90ff928a81ff6b6876fff3425bfff73c4effb24455ff673e41fff44644fff53a43ff781e22ffbb6545fff8444dfff6484bff73140dff2b7d6bff32ecd3ff2bf0dbff02220cff316c59ffdd4c91ffdf4696ff2b0c15ff2c5374ffe2b0b8ffdfc9cfff112537ff4581adff66d1edff86e6f6ff073551ff768c62ffdddc78fff9f27aff2c574dff75605cffe3579dffe86696ff1f695fffdfc438fff6f056fffaf05eff925d3dff6acb72ff45e1beff69c292ff84a282ffda5246ffff727bffbe5239ff43aec7ff40555aff878fa0ffa34b2bffd555abfff257bfffe871c1ffcc9960ff6db299ff55efddff45c3deff72d0d2ff96ebf3ff84d4eaff61efffff4ff0ecff34f6f5fff5e3f8ffffdff3ffe7f1f1ffe7dce5ffe5d5ddffe5d8d3ffe4d2bcffe6ccb8ffe8cbc2ffe7c9c9ffe2cdd6ffc8d7edff86d5edff14716aff0eb0a3ff12cbc2ff13c5bcff27a79bff477976ff2b2827ff221618ff2d1913ffd78f2dfff5c334ff81945eff436d74ff313e41ff301d20ff312225ff1a7d98ff2198caff1c594aff353934ff593735ff363f5fff343233ff728781ffaea0a2ffa48e9bffa57d86ffbb91a3ffc599a2ffbf946fffc4b698ffc7baafffad9aabffb0b2f2ffd7b1dfffd0c6c4ffbea4a4ff5db2e0ffb36da1ffdfada0ffafa4bcff3d8ad5ff27293cffc1a7b7ffa1748bff3a3e4aff27403fffaa94a1ff71afafff3abc9aff409784ff70676bffb393bdffd580a1ff4f83b4ff484954ffee3c4efff7404effd72d3eff74341bfff43c45fff5494eff982923ff2b3c2aff2de6c8ff2df2dbff055f44ff244930ffd3468cffe4479aff330513ff29577cfff84daefffa59c6ff242240ff468bbfff29e1f9ff2be8f4ff144266ff556f50ff54686bff596559ff146569ffa54663ffe65fa7ffb9445aff2e8253fff1d73cfffdf46fff846a0eff9bc069ff3deac9ff58f5ddff773b3bffa96e4ffff3515afff16658ffa68882ff3fc5ecff3ff2feffc6524efff5982dffffa38dfffd7cdcffd09561fffbd053ffecf8ccff45d3e4ff6fcdd3ff7be0e9ff62d2ddffd882c9ffd375c6ffd7edf3ffb5f1f8ffcef1f6ffe9d1d7ffe3d1d5ffe6d1d9ffdfc9cdffdfccc3ffe0c499ffe6bba1ffe4c2b7ffdfc2c2ffd8c5d0ffbac8e5ff8ecaeaff1f1215ff1e423eff0e9187ff16c8bfff14d1c9ff1cb0adff427568ff3b4137ff281c1bff251917ff58441bff4e7d89ff4f8d9aff457c85ff3e5a5eff332223ff3d2324ff224c46ff136852ff17644fff37554bff694545ff4b4640ff609996ffd5ba91ffab97a3ff9c7d8bff917b89ffbf9089ffc19973ffaf9778ffb7ad9bff9f9a99ffa785a3ff9caabbffb4bcc1ffccb5aaffd78c7ffff98b35ffe36f1dffc8b2baff6c4e5fff28313dff813f44ffc195b6ff579c88ff1f9278ff657c77ff847d9dff63bfc0ff58a0c2ff87849aff5e79a7ff29cef9ff37b1ebff5f4d70ffbb3f50fff74152ffec3140ff501c16ffd53936fff9444affdd3f3cff2a210fff2addc3ff2ff4dfff1ac0a0ff323921ffc14483ffe24c9eff4c011bff2a5d7efffc4babfffb5ac7ff2a2047ff4594c6ff30e0f8ff2fe4f2ff144d71ff3f5952ff576972ff3b443eff13857affc34479fff772b9ff77413cff94c45afff6e84afffbf670ff76473cff5fe39eff2cf3eaff2dac8eff708e78ffda594bffff787effc35940ff3cc0d9ff2bdff7ff85ddd2ffe38c40fff69f32ffffd139ffa66f90fff7bd38fffcf073ffa1ccd8ff3bd3f4ff75f2f8ff96dde6ff3ef2f7ff94edf5ffebcbd4ffd7d2c8ffd3cfd5ffc7c7cfffd5c3c7ffe0c1c4ffdfb4b7ffe0b5b2ffd8bdb9ffd4b184ffe0a682ffe2b5afffd2b6b6ffc8bacfffa0b7deff91b5dcff202a49ff1f151dff221f1fff187168ff15b0a8ff21a49fff1c977cff2f836aff4c6052ff2f2724ff261c1cff201e1dff436f74ff4c909cff478892ff20718eff342c35ff472927ff304037ff217f68ff0c6167ff2e585dff8a6d6bffa38064ffb9987dffa98d94ff97889bff7b8a9dffa29081ffb69b73ffa89071ff92877cff8a898cff75858cff718c96ffa9ababffb7a69affbd988affe87e45fff88b67ffba97acffc1a1adffcd775cffc94e09ffda7f82ffb47a9fff2aa589ff18806cffa08193ff97a8c6ff61aecaff4a88b8ff656688ff26c4eaff20c0f0ff4c7ab8ff58515dfff63d52fff43747ff682428ffc5795bfff7434cffed3f40ff281608ff2dd1c0ff25f1dbff18bf9fff3e3620ffa64476ffe14c9eff7a143fff2c6282fff748a7fff95ac7ff272248ff489bcdff2fe1f8ff31e2f1ff15597cff3e565eff60717aff1e272bff259b8affd44a8efffa7cc1ff386166ffd8d84cfffbf358ff9ea02bffad8252ff44e3c6ff50faf8ff903f48ff54d3acff40f1dbffc98f61ffb9a58eff33d0ecff4ef5feffbc544bfff5a341fffbbe29ffc67a7fff5fa2b7ffecf184fff1f5bcff3aebfcff46e8f8ffc6defdfff275c5ffa6c0e1ffcedbdeffd2c7b8ffcfc0abffccbeb7ffb1b6c2ffc6b3beffcda9afffd1a0aaffd0a29effc59f8fffc99d7bffd8997fffcd9a96ffc5a29effb8a0b8ff8e9dcaff969dc3ff4879c0ff2c4c81ff1d1f3aff201318ff1e2328ff20554dff2b8c74ff279f84ff21917aff3b7b62ff6c503cff2f1d18ff2f2122ff374747ff2d8fa8ff0c88b4ff107ba2ff2a475eff482b2cff433436ff0b6062ff0a6d6fff7c4469ff9d8b8aff97999dff8d8594ff768a9dff7094a3ff778e90ff9c937affa28971ff86756cff887872ff6a838aff59838eff828b91ffad948affa58a7dffaf8079ffca939fff9685a1ffa6868bffb98f8efff08c33ff88594affa889abff8f979fff85406bff9b375aff8e7c98ff66b2caff4f9fcaff717f97ff5989bdff1ecdf8ff39a6e7ff58556dffe4374fffee333fffba303bff775033fff34145fff23f43ff460c04ff35a6a2ff21e5d3ff16dac6ff35291cff50c3b3ff9cb8c5ff02231fff29667efff649a5fff95cc8ff26224bff34a2ccff30e5fcff31ddeaff1b6681ff545657ff798083ff132b38ff34b7a7ff3edde2ff69a7a0ff1f8576ffebdf44fffbf460ff554f27ffa2d179ff2aeddeff51f0deff75665fff2adfceff46f8f3ffb1673fffe2d759fff7f3a7ffd2a19fff61594aff6b6362ffffc36fff698ec1ff42dbefff57edf6ff60f0f3ff30f3f6ff7fe5eeffdc8997ffe995b2ffd79baaffcbaea2ffcdb29bffc1b29cffb3aea6ff9baab2ffac9fb4ffba98acffc68c9effc19592ffc39584ffcd9679ffcd8877ffc2888fffac8492ff917fadff8c8db5ffa994afff23afefff3995ddff4373b3ff27455eff1c1822ff241716ff242c23ff267760ff31a487ff43a484ffcfa25bffb67a30ff48250dff302220ff2a272aff1a839dff0993c1ff0f88b3ff6f658aff51332cff533936ff604a66ff851744ffae2e56ff8f7f7cff9691aaff728c9fff6695a3ff6e8d90ff707a73ff7f756eff8a6f62ff88624dff707b79ff5a7b8aff5f6f7bff93827dff8d807aff86716fff867682ff9a758fff956684ff88697eff848c90ff9da1b1ffc96c8fffa885b9ffb22c74ff92245fffb7767fff87a6c5ff06a9c6ff197d9bff5a6a88ff1bc4f4ff18a9ebff5b6388ff8b3d4dffec3848ffe12b38ff3c231affe43d41fff43f48ff6b1714ff357572ff21e1d1ff12dfd3ff1a1111ff1ac8baff1ee2dcff005144ff1b677aff594864ff564f6bff122b4aff2bbecdff28f0f3ff006160ff3d8287fff6e757fffcef5bff235160ff45c8b8ff37e9f0ff115a52ff5cb771fff5e64bfffbf460ff754b46ffefb023fffaebb1ff805152ff70ce9bff27efe8ff82d9a2ffcea852fff1eb5fffffee6dffa35b42ff5e5858ff8b708fff957ad5ff34e3fcff77f3fafff1f4edffb0eff3ff79f0e3ff89726bffc38277ffc18793ffb47f93ffba9c93ffbb9a81ff9f9c8cff939996ff8c95a2ff7b7f99ffa9819fffbb7c87ffb27c6effc18472ffcc836dffc97866ffb97e84ff917388ff7f6d8dff987f95ffa38292ff25bdf7ff20bff3ff1eb2ebff419cc1ff416b77ff203439ff251a1dff2a1b16ff2f533effae9a6effe6b736ffe6b02bffd1942cff86521eff37221cff382929ff21606fff599ccbffb55a1cffa3511aff5e3721ff67403bff813142ff8d2940ffb6520fff5e797eff8291a5ff62939cff6b8c8cff676d6bff706056ff865d44ff835433ff72644fff5a6c7cff596172ff665d61ff817170ff69646aff5f5867ff8b6984ff80527aff714565ff866a63fff5a1b6ff7fc6d3ff716c8affc362a4ffd62774ffb32e52ff9980a1ff1eb1c7ff0191b2ff6d8998ff57a0d6ff16b5edff2c79b7ff4f5459ffee3749ffe6313bff55282fffba5747ffe7373effb73537ff222f2bff20d7cbff17dfd8ff000c09ff25b6acff23ded7ff0b9384ff1b5c6eff3b4853ff45545dff0e3049ff2bc2c4ff27f0e7ff004b35ff6fa686fff6e857ffffed62ff17747dff3fcbc5ff40eef6ff2a6573ff98d670fff8ef57ffdbd253ffcd8c47fff6b519fff9c839ff9d2a3dff5cb9beff40f7f5ffb4704cffe4d34efffaf666ffe36434ffc5576cff93727effed69baff79caecff29f0feffa3abc0fff8eeb2ffbfc4afff6b616eff63575eff836362ff956377ff9c7387ff98746fff9a7a63ff968570ff70747dff666d81ff787588ff94605cff9f5c41ffaf6b5cffae5b56ffb5514affba6556ff8e6b75ff5f6479ff6c686dff956b66ff947579ff1e8fd2ff25b6efff1dc8f3ff14cad7ff1eb5b4ff449093ff385a5dff232526ff2f1913ff3a1a09ffb77527fff1b92ffff1be33ffe4a72eff8f8542ff36252aff3b2b2bff452f2affaf5f0fffc06606ffbb5c10ff424f48ff755550ff834c45ff785134ff2289a9ff519799ff5f959bff61908dff607779ff555548ff775939ff7c5e3dff604f34ff5d4f5dff695162ff4e474dff605557ff5d5860ff574153ff764e69ff6a506dff622a49ff562e20ff4a8997ff204765ff4e5d7aff7984adffe24190ffc52e79ffaf747cff989fcbffaa4a9aff7f3060ff5e728bff18b8e8ff1998c7ff645765ffbd3743ffe12a36ff913139ff9d7d60ffea363effd73340ff1d1312ff1dc0dfff0dc9ebff00141dff2f9892ff20ddd5ff1ac5b6ff175667ff3a4b54ff3f555fff11364cff22c6c1ff25f0dfff00422dff99c37efff6ec5afff4e15bff1ba2a0ff2cd1cfff3ceef1ff19839eff3cc18eff5ae5b2ff4b5147ffe49b26fffcc029ffa74d15ff7f3c41ff516365ffc08644ff6a8568ff50daadffce8d42ffda5958ffe450abffd27ec7fff75dbcfff985e0ff4b8a95ff61828cff5e6d73ff49626eff466574ff425159ff5d5353ff855554ff784e51ff7a5056ff8c6862ff814e4aff745263ff826c6aff815545ff8a4d25ff8c4d22ff8a402dff904152ff9a505bff90424dff705561ff7a6b5eff7a5e3aff8e6133ffa26540ff19192cff215787ff1286acff15b8bbff17cfcfff18cbc3ff2ab2abff518684ff5c4544ff3d1a13ff411f16ff6b2e08ffe8a130fff5c93cff368f7dff208288ff404f55ff3a2928ff413234ff9d5a21ff3f6530ff127073ff1f5e62ff766b6dff956d76ff7c7e81ff91a6a4ff5f9592ff5b8d8bff4d807fff545c51ff666242ff6b664aff605744ff5f404dff6c4557ff5f4752ff634a4dff6f4f4fff6a474fff684b55ff64535aff593545ff1e1a21ff252526ff0f3e48ff155566ff375c71ff8e7cb1ffc43c78ffc15391ff9c8eaeffd8328dffb2216aff7e858bff528f94ff1e8579ff334d51ff554c4cffe12e3dffbd2832ff472f1fffde3940ffdd3240ff270b09ff1fa6cfff12c3f0ff003750ff2b6f6bff24d3c7ff149082ff185268ff384652ff405565ff0e3652ff1dc5bdff28f2e1ff003c31ffbcd577fff6ee61ffa99629ff1ac3b8ff22ede2ff1a917dff19a293ff39c699ff59d4a3ff874567fff99a2afffcc82dffbf2c3dff644547ff6a716cffc2694fff4aac88ff8be2b4fffa594bfffc59a9fff4b2e3ff49f4f5ffbee7f9ffb76183ff6a6276ff676373ff5d606aff465e76ff2f6078ff305260ff6c5451ff795048ff724c45ff74515bff72515bff784b4cff8e5f4aff936540ff915932ff874b24ff82451cff824037ff845266ff825466ff7e4e58ff815f3fff866732ff856229ff916026ffa16227ff242635ff1c0e18ff1c0d16ff294848ff0e948cff18c7bcff1cd6cdff47cbc1ffc77f70ffb5531fff5f2714ff441e11ff502213ff5d4323ff209194ff14a2abff12919aff36787eff3f241dff483534ff374548ff086f74ff097b83ff275b74ff7d697affb07e81ffaf8b89ff719593ff5c8a88ff447b77ff525f5bff60654aff616348ff605650ff654455ff674052ff713a4bff734643ff714b48ff6a4849ff664e54ff645259ff4d444fff13292aff142425ff113a3eff125763ff255365ff5e6079ffde8ac5ff9f99d4ff9b5d64ff968eb4ff396269ff2e605dff66818aff21927dff20665dff52595effd8303dffd32733ff4e322fff4a9d84ff19af9eff022b26ff2b96b2ff12beebff108cafff2a4642ff25ad90ff249e84ff0e435dff16b7ddff19c8e7ff0c3d62ff8e588cffac90b9ff123b4aff2ab9e6ff34e3f4ff14304aff17d0c2ff25f2e0ff185448ff21af86ff40d1a7ff1c6d48ffc84c80fffc55aeffa45853fff02862ffc45b72ffc9783efff7a240ffe3ed9fffdd654cfffa5689fffe63bdffb27455ff84d5deff597a7fff6d565fff69596bff6b5b68ff6d586cff4f5b77ff3e5d78ff50566aff705150ff75504aff734e4eff744f57ff78585dff7d5e4dff8a663fff94693bff90602cff7c4919ff804417ff753e40ff774e61ff7f5462ff7f625bff84673dff88652cff8c6428ff995e28ffa16027ff3f7b84ff35545bff21282fff190d13ff1e1718ff235c56ff20ad9bffaec1beffe68240ffea7d11ffdb6819ffa74823ff571d13ff47231cff4b2a1eff296e69ff18a6b0ff50a9adffb78a36ff846129ff483630ff4c4949ff2b5d67ff275861ff2b5c62ff694b60ffa48981ff7f9999ff6a9594ff55817cff435450ff476554ff4f6652ff514d4fff66445cff6a4961ff79303dff843f3cff7d4545ff684641ff695153ff6b535aff2d4b4cff0a3a36ff133e3cff0d362fff0f5455ff215963ff54414eff845767ff8a5150ff8a3a3cff967993ff3c9590ff127181ff648287ff824169ff6b1044ff646171ff32393dff222428ff3c3637ff739177ff0eb1a6ff0e867bff225764ff14b8e2ff17a9c7ff2e2e29ff24a389ff25a58aff0e344bff16b2e4ff15c7f1ff0d406cffa2387effcd4591ff133e5cff24b6e9ff23dff6ff15507eff17d4c7ff28f5e0ff377481ff11beafff3cdec4ff414d5cffde4381fffe59b4ffc5324cfff33683fff76698ffe97c1ffffad646fffccc64fffd5944fff95871ffd37d5dffa96341ff825956ff665f58ff6a4754ff75505dff8a595eff774860ff615977ff625977ff5e556aff705059ff785655ff70494dff755a5aff836959ff76664aff86683bff8e6635ff845c24ff75451eff833f1dff653a45ff6e5a5dff8b6c63ff806954ff82693bff8d6433ff905e2bff9a5227ffa95426ff26c1beff359fa0ff417f81ff355255ff2f262cff211213ff291c1cff5c3432ffcc620efff3840ffff58a10ffea790effd8641bff99323eff49201dff4b2a1aff453a2bffb9915affd4a527ffcea029ffaa8026ff433223ff615455ff565c60ff4c6175ff5f183bff743545ff868c7fff719891ff5d857cff475650ff0d6256ff17665eff3a545aff654162ff644768ff7b374fff873332ff8d393aff76413dff674d50ff675059ff3d4d4eff0b4b46ff11534dff10483dff125548ff16544dff51464cff703f51ff724354ff773d4eff80545cff3d97c9ff209dd0ff3f8aa4ff7d7589ff831a52ff482a40ff3c5c5cff1e2830ff20211eff4e4332ff0faea3ff03988eff1a2a27ff0faaa4ff0a988fff272319ff1f9881ff20a38bff0c2836ff16a9dcff15c2e9ff11416effa3357effc9408fff164a70ff21b5eaff1bdbf2ff0f709aff19d5caff2bf4d4ff1694a2ff14c2caff24b7a7ff723f6effec4396ffec638cffe82b65fffa4ba5ffeea452fffccc33fffcf26dfffde894fff69bb4ffc66f58ff9c7654ff93674aff72554fff655854ff6a494bff904b4cff9a453dff8c4554ff7c5771ff745673ff725267ff744e59ff795259ff724e51ff796859ff7f7053ff7b6b48ff856830ff886527ff7d5c21ff753b21ff752a24ff6d3844ff7e6b5bff897358ff82704eff8c673cff966235ff95592bff953b24ff962625ff2bd1c7ff2fd3ccff2bc6bcff32a59fff45817fff41464fff2e1418ff2d1013ff401516ff913a13ffe7740ffff78f10fff67b2effdf2d6bffc92e5aff702836ff48281eff4f3525ff7a5421ffd8ab2cffdeb02fff236a46ff2f493cff725751ff7a6e6fff622645ff884439ffb68130ff868c6dff67837eff49594bff026459ff05645cff245c5fff5c4868ff604667ff6d3f5cff88353dff8d3130ff813b3bff704f52ff644f56ff515157ff084f4aff11534fff194f45ff165446ff0f5347ff364f4eff6a445dff644257ff634961ff6e5266ff646d8fff35a6caff485161ff697976ff456d7eff1b404eff5b6875ff203637ff1a3c2fff3e3a37ff97925dff796c2bff1c170fff129990ff06948fff17150eff1e313aff1b2c37ff09202bff13a1d5ff16bce1ff15456fffa83078ffca3d8aff17587aff21bae8ff33c8e9ff0d7d9eff16c5d1ff1a6457ff0e9cafff1dced8ff056255ff8f3975ffe44194ff974d3effe92b37fff9625dfffac83effffea4dff88804cff768268ff957f68ff907357ff937255ff8a6c51ff665a51ff5f5653ff65504cff8b4940ff994538ff944848ff7f526bff7c556aff7c4f5dff764a52ff774e57ff755659ff796a57ff7d7254ff816e42ff7b622aff816326ff755322ff683129ff702c29ff814536ff8d6e53ff8f7654ff916f43ff996533ff986034ff8e512fff8a2c28ff93232dff28a193ff3ac9bcff3cd7ceff3dd9d2ff33ccc6ff346d84ff56353eff502e2fff381213ff391012ff541a14ffa94613ffdd3749fff03085ffed2e86ffdc2b6dffb93257ff472529ff4f3020ff624027ff435d32ff147459ff17785cff1e614dff733b41ff917e7cff947a76ff8f6018ff91925eff838075ff3e5745ff065f51ff07645aff0a565aff45516aff544c69ff5a415cff763d4dff813f42ff803439ff83504bff765752ff5e4c54ff0f575cff165a5dff1d4e48ff314d44ff31504bff204a4fff5b4a68ff5d4c66ff3c4d66ff5c5671ff645771ff404855ff553b40ff694e4dff4f757fff1f4f5dff476270ff2a6156ff134735ff2d3e3dff9d7728ff806e1bff221d09ff198980ff02948dff04100bff23292fff1a2832ff051b22ff0f82b7ff1398cdff0d4e7aff118fc3ff108daaff145b68ff1f998eff03403bff0f819aff19c5d3ff33536dff099fc7ff21d8e9ff3f5671ffa7317affc75882ffa34334fff44245ffd9a767fff4b332ffe79a30ff84695dff7f6f70ff6d6361ff806e57ff9c7c56ff736d50ff5a635bff545f5fff53564dff815141ff8e503bff8c4833ff8b4c5eff945660ff834148ff754854ff734d5aff675654ff796d59ff837357ff7d673cff705e35ff6b6236ff473f27ff6f402aff8f5324ff935023ff9b6b3fff9f7243ff9b652aff88502bff885538ff6c3031ff782f4bff804964ff101e1bff1e675cff2da290ff45d1c0ff41d1cdff2f6384ff3c3a48ff46343cff62393fff5d3131ff421514ff3a1314ff4c1b1bff912035ffee2e76fff6368efff1328bffa7235bff733242ff472a23ff5d402dff605039ff1e7b5bff53656eff741e44ff642a3bff957f78ffac8970ffa4998fff857f5bff335644ff0c5b4eff0c5e52ff05575aff095760ff245763ff4c4e61ff664154ff6f4651ff7a4148ff8c4b35ff8f5740ff675150ff0e6068ff166372ff28555aff40403eff444245ff2e464fff24556fff265974ff1e5573ff215b81ff315d81ff435063ff5e3d34ff623c35ff505f5fff34696dff2f575bff496766ff124e45ff062927ff744f29ff856a18ff361f08ff24211eff0a1518ff110908ff26262bff142430ff06141cff0f75a3ff0c88bcff135076ff1285bbff087f9aff0f5a61ff239683ff003234ff108797ff1fcad7ff386eb4ff0da2deff1096acff22726eff66a49dff359980ff22b6a5ff71ae78ffece6a6ffcddfb9ffb7571fff9b5b5dff925b65ff825f5eff897a57ff947d52ff75755aff4a6d6cff356871ff48605bff795b49ff805940ff85502cff954428ff9e431fff924037ff744c57ff684c59ff635657ff756955ff7e6e52ff776641ff545641ff365342ff374630ff8a5e32ff9a6127ff9c5c1fffa1681fffac6d1cffa76922ff7f422fff6f3038ff61233bff69496cff6c5371ff38130dff1d0708ff1b1b1bff185b51ff2c767eff303444ff3c3f48ff464655ff44414fff443540ff833742ff773743ff481418ff431715ff562120ffba2c4fffca2a72ffc3256dffb12460ff942955ff5b3540ff4c3429ff77513dff7e4749ff781547ff821c4dff802231ff8f6859ff9d9a7bff7f7755ff275143ff105d4eff0c584dff0e534fff0f5961ff085766ff34535fff644b5bff694c54ff734d4bff8b5234ff855339ff67554bff146471ff176172ff305260ff493d41ff473e42ff3b4453ff285b76ff245874ff245a78ff265e83ff295c81ff4d4c61ff674132ff5f3c31ff5d3f40ff614f56ff68404eff50616bff1f4e54ff022c2eff423e37ff6e3407ff441b06ff31211eff0b1316ff0b0807ff593419ff59320cff10100fff116994ff0d7fadff104b6dff0e7cb0ff046583ff135f61ff1c937eff064463ff0d82b7ff2d9cb7ff1279beff11b1e6ff11726cff187e7aff38ae8dff1b6f6cff43cdc3ff7a3129ffad5212ffb55907ffb4581aff924e53ff955960ff935c56ff907551ff8c7f56ff7e7a5cff526a6dff376b73ff486163ff715c49ff7f5b40ff7f5637ff8f4622ff9f4414ff993f2dff744752ff674b58ff615057ff726451ff7c6c50ff76684bff485644ff325143ff47593eff846135ff97642dff976528ff9e6b25ffa36c22ff9b5f25ff773d36ff652d3bff56334dff574e6eff5f5976ffbb5136ff8e3a31ff4a1924ff280c12ff1f1317ff261a1dff292427ff3c3840ff4f4b57ff605163ffa9376bffac2b6cff9f365bff7d3643ff4a1819ff4c1e1aff572724ff7c2337ffbd2a6cffc42a74ff974d71ff1e8071ff2b433cff704e3dff8c6752ff7e2f3fff841418ff96221fff8e3a41ff8b6b51ff324b40ff125647ff155b4eff16453cff305052ff315763ff194d52ff4c525eff60575cff625347ff8a5d30ff8b5d36ff615845ff1a606fff226278ff3b415aff543041ff513a45ff3f374dff35516cff35516dff34506bff4b5e79ff4b5b78ff564253ff7e4b30ff72452fff603a39ff704f4fff754e53ff54414bff305052ff113034ff454d4fff6f3611ff431c05ff39271fff29150dff1e0e07ff653717ff582d01ff140f08ff0a504fff055754ff0f494dff046e72ff002e36ff105981ff108db5ff105483ff0d87bdff225c5cff72833fffdecb89ff328866ff19c2afff9f8994ffd4527eff912f3dff89202effa34e13ffbc6810ffac5319ff9e514dffa66358ff97513cff94724dff868157ff777353ff686a6cff6b6a70ff565b63ff61594bff6b5f45ff575533ff894a21ffa54d15ff98421eff7c424bff64414eff59374cff695c4cff81714fff6b634cff485a4aff406156ff485f47ff796948ff8b754aff896b35ff8f6843ff976942ff865236ff6a424aff554e59ff394a5fff345d79ff496581ffef7c43ffe15556ffc94062ff9f374fff622330ff300e16ff1f0f15ff21191fff332831ff593849ffb32f6fffcb3385ffc53283ffb62d71ffa4355dff935244ff542517ff532420ff673329ff8a3244ff179f8eff0daa9dff189d90ff207c6eff513b2fffa37053ffa8775fff7d1c24ff8a1842ff90214bff5d3a40ff2c4f42ff185342ff214b3dff3f413bff444646ff2c4b48ff0f5c5aff346161ff5d6151ff87691fff8e6b25ff696245ff1e5970ff255a70ff404668ff61133aff5f1d3dff4d3550ff484769ff4b4768ff4c4d67ff665368ff6e5467ff6f474bff8a511dff86511dff684630ff6d5946ff6d5b43ff5b4247ff5c5965ff595150ff5f4840ff2a221eff0b0a0bff2e2120ff672c07ff351704ff5b3422ff562e05ff170e0bff0b4f4bff06514aff0d494bff03645dff002833ff0a597dff1481a7ff224270ff2f89bfff564f38ff9c9138ffaa8a39ff2c8f7bff23d2bcff335350ff9b4963ff8d1a33ff862732ffa55c1affad6a13ffa75b1bffaa5a3affac5c3dff9f5636ff8c744dff807b51ff817256ff7f656aff7f606bff715e62ff545d4eff385f48ff3b5a3dff915322ffa15310ff9d4716ff7a2f37ff62253dff5a3042ff706453ff7d6f52ff746952ff576358ff44635bff436354ff707456ff807c55ff7d7344ff816651ff7a5d4fff705247ff5a535aff3b545cff205364ff16637cff156a7ffffb9556fff36678fff34992ffe83e81ffd23b6bffb33d5cff87364aff381b2aff1c121eff1f1920ff3a212cff802551ffc1337affd83f8effd23d88ffe89d5cffcf8d2dff9f633aff572615ff5e2d1fff6b3c2dff407c66ff0cb7a4ff15bcb5ff262a30ff2a2726ff6f5543ff928667ff7a404bff4c0626ff603147ff8f866cff1b513bff30483eff473f3aff4a4440ff414a4aff255b58ff305c5bff566352ff886825ff86681eff76643aff31596fff225268ff3d4a65ff631d41ff5e153bff552947ff4c4a67ff4a4363ff5b4459ff6a515fff6c525fff7e5040ff89501bff865016ff785728ff6f5e40ff6f5f43ff5d5354ff564a63ff584763ff6e4a46ff433836ff0a292dff252629ff613316ff251c0cff273035ff102a2eff091012ff1d4744ff143a3dff0e4548ff075c58ff00161eff084a63ff165a70ff38163aff7d1e57ff600f21ffa05455ff496e5fff3d96a0ff285b4fff2d4735ff79242cff862434ff863532ffa0621cffaa681fffa76922ffa2602dffa75e39ff9d6341ff80764fff7b7b50ff847756ff846061ff8a5f69ff885b58ff575946ff365e4aff3b5e43ff905326ff9d5115ff994a18ff6d2e32ff5d263dff5d3c46ff6e6450ff766d4fff7a6e50ff5a6255ff4a615dff44635fff637459ff747957ff6e7353ff656255ff735c56ff6d5959ff455457ff35545bff305763ff306479ff2b6a7efff27e4afff2547bfff9509bfffa58a7fff958a6ffea4794ffdf4383ff93628bff615c88ff3d3350ff1c1424ff251b22ff3b242dff852c51ffdb6f77fff7c941fff4ca3effeab334ffd8922eff89693cff502c24ff6b3828ff7e4a35ff3b2f2fff1d2b2fff1d292eff273330ff384d40ff736f60ff6c6a67ff424545ff918556ff175b58ff303f3aff4b423dff4c4641ff474740ff4f6154ff50655aff4f5c4cff7a6c37ff7e6c32ff6a5e32ff545f5aff4f5f66ff3f414fff553149ff5a2f49ff51203aff4a495fff4c4962ff5c343fff6e4d56ff6f525aff7f4d2aff8c4f21ff8b4f1eff7c5918ff6c5938ff6e593fff59534fff4d455eff4f4761ff65474dff6a4138ff4b362fff532f31ff1d4246ff012227ff2a2a33ff183034ff0b0d13ff58152aff30081aff12394fff042d3cff080e10ff070e13ff1d1110ff4b1733ff771f43ff670f28ff903768ff117987ff2f9084ff524335ff504437ff743233ff7d4541ff773d2cff946229ff9c703bff92672aff936337ff9a6749ff876842ff7a7351ff8d8154ff7a6c48ff905b4dff995f5eff914d34ff5f5846ff396d5aff3b5b3fff835530ff95592cff814720ff573e49ff4e4a60ff464848ff696454ff7a7155ff7a6a4fff5a5b56ff56595dff4a595cff486c64ff5f7d6bff326c60ff4c5d5aff755a5cff5e5457ff4c545bff5c565eff545460ff575d70ff6a6073ff7e2d10ffad273bffdb3665fff5548bfff861a7fffa66b7fff567bbff99a4e3ff2fa0e4ff4384c4ff5f6ba0ff534c6aff23202eff241e23ff362a2bff7b4525ffeaa839fffbd53cfff8d540ffa4a561ff4c7780ff435b63ff563029ff7c422eff935e4bff2a2827ff1e5d4cff186750ff225a47ff48585eff4b5150ff1f5b61ff1b5a62ff2b494fff493e3cff4c453fff544e45ff63624aff67674eff606447ff676a41ff706f48ff676141ff665f48ff655f48ff514b4aff473b4bff483f51ff473649ff444250ff464757ff5b3e43ff684945ff6d4a48ff804c29ff894b2dff8c4d2eff7e5723ff6b511bff674e1cff504f4cff1b445aff1f4860ff5e4954ff6f4c44ff664641ff634452ff313b42ff102323ff331b1fff361022ff170611ff5e182fff320f1dff163e4fff053644ff0a1a1bff051518ff291704ff5e2a07ff622d12ff68272aff565b6dff166072ff494744ff6a4232ff684435ff695046ff6d584fff6e523fff7b6949ff7f7151ff826d44ff83704bff7f704fff7e724bff7b754fff837a51ff7d6f41ff99531bffa45310ff9c4e1aff5d6455ff326c5cff33624aff73593cff7c5835ff775138ff454f60ff28566eff33545eff6d685bff7b6f55ff7a6a51ff655659ff59515dff51505cff346b6dff20706eff1d6f66ff575b5cff695156ff684e55ff644f58ff6f5258ff665158ff6d5465ff795567ff2c120fff260804ff330f0bff791524ffc72c58ffef4e89fff173b2ff65bceaff43cef5ff3fc8f9ff2fb3f1ff3599e0ff5b84baff736b71ff3b2d2fff291f20ff402d2dff764128ffd3a040ff6f9795ff64a4aeff5995a0ff4a787eff36676dff5b3e37ff925849ffb3786aff28634eff127560ff0d637cff216081ff5a4c53ff38595aff2a535eff4a423fff4d4339ff585240ff696746ff66684aff656843ff656d45ff6a6c46ff686845ff6d6346ff6c6043ff655844ff4c4450ff443d4eff434554ff434859ff434754ff4f484bff684b46ff6f4b48ff794940ff8d5136ff884d32ff704224ff694f17ff664c17ff454137ff1f445aff15485fff4c454eff6e4e45ff654744ff5e4154ff542d3fff69162fff5e2a2fff440c1fff1c0a14ff0e3b33ff00201cff163238ff062526ff093330ff02332fff331603ff572808ff675045ff3f6066ff276273ff2b616eff594039ff704531ff6f4432ff6b544aff66594eff645c4fff6b6a53ff786d50ff756c53ff6f6951ff7c6e4fff7e6f51ff78704cff847a51ff877241ff995616ff9e4f07ff9c512bff5f6254ff406a58ff446850ff6e5b3dff735932ff735948ff455867ff2f5366ff3c5464ff656559ff756c53ff6e645aff58515aff524d5eff4d4e5eff36696bff2b716eff376b66ff635158ff744e52ff7c4a4dff7e4e51ff7e5052ff784a4eff81495bff854b5fff58575cff564246ff472c2fff2b1512ff240d05ff3c1112ff4e1d2cff2d5877ff3996cbff54c4efff60d5f8ff56d5fbff2bcdf0ff26bcc4ff519d97ff7e7e70ff5f4c3fff3c231dff492e28ff5b3f37ff5c5e58ff6aa6a9ff60aebbff118d9cff28808cff2f6266ff694535ffa46e5cff807b73ff175a6eff3b6794ff611935ff77343fff5a4a44ff524e3fff5b4a37ff5b5436ff6b6745ff676b4cff5f603bff6b7048ff6e704aff61613eff6f6444ff6e6343ff655a3eff5f544fff5b5050ff284e54ff2d5263ff3c4f60ff3c4a54ff694c48ff724c47ff6b3d3fff8d5135ff8e5132ff581f29ff654327ff654520ff331e1fff3e3c50ff39394bff3c3e41ff705645ff6b5345ff5c3c4bff684963ff66425cff582c35ff332d31ff1e2a28ff232427ff0d1215ff192d31ff0b1e21ff2f1316ff2f1d17ff4a2314ff533a26ff684b37ff505253ff56636fff52575dff643e2fff8a5930ff774527ff5a594dff535e51ff375d54ff3e6055ff686955ff3d584eff4b5a4dff7e6653ff6c5a46ff776949ff837554ff856a38ff945118ffa34910ff93472aff73654fff707755ff5c694bff6b6440ff816936ff65614bff525d65ff695e6dff5c5c68ff59666dff6c7575ff4e5864ff495061ff4e5365ff4b4c5cff465862ff61616eff66555aff784c48ff945f48ff944d2eff934a38ff964c38ff913b2eff90354effa23f5eff6d94a1ff68808fff5e7179ff576564ff535152ff483837ff291a1aff1f1516ff201b1dff2e3d4eff4282aeff5ab8ecff34d0e1ff32dcd9ff37ded6ff29cfc1ff3ab49effb09a71ffa6702eff46260eff4d3124ff614335ff6b5d54ff37958fff1aa8aeff119ea8ff2c93a3ff2c6066ff5e5753ff566c69ff504658ff62132bff711119ff5c3a2bff824d3aff684e31ff685731ff696644ff6b694cff656744ff686e4aff696f4bff666541ff706442ff6f6444ff675c3dff665d44ff655f47ff3f5a55ff0a5c6eff225a71ff3d5362ff634a47ff704a41ff73423dff8b4e2eff8d4e31ff612b28ff46142aff4a1529ff44121cff57161eff591b1fff56433bff685b42ff6d5d41ff5d4049ff654358ff634355ff3f4c4dff065e51ff13594cff3d361eff473d1fff122629ff15383cff1b4451ff384658ff6c4b31ff6b4c2eff64472aff624f48ff705953ff6c514aff7c4b27ff8c5515ff85511aff4a6050ff1a6252ff186255ff13524eff1a5050ff0b5051ff534e51ff69504dff69534bff786449ff7d6848ff866740ff944c22ff9d3f14ff934226ff836c4eff7f7851ff717249ff766e3dff7c6d38ff6d654bff746464ff785f68ff715f6eff4c6074ff35667cff305c6fff455468ff4f5565ff4d505fff645467ff6c5668ff74555dff89583dff9c602eff995921ff9c481affa0461dff9a3926ffa13149ffa4274cff85c1d5ff84beceff74b7c5ff56b6afff4fa599ff578f85ff597770ff5b605eff4c3e3dff2b1b16ff271a14ff2f211dff33322cff3d7c6eff43c6acff4fead1ff62eddaffe4db9cffe9b732ffd99826ffc17f2cff6e421fff4d3324ff624d3eff756d5eff349c96ff088c94ff0e8d95ff1a7f88ff616270ff6d4446ff4d5264ff492f3fff524038ff764a32ff654d32ff645438ff67644bff686448ff646444ff6a6c49ff636a49ff646347ff6c6347ff6c6044ff6d5d3fff6e6043ff656049ff555c57ff0b5c6fff1e5a6fff475566ff684a49ff6a4c41ff7a4a32ff8f502dff8a4f31ff6c392bff46112bff4b112dff561022ff5f1418ff5e1a19ff6c4834ff675b43ff635941ff584a47ff624756ff684750ff5d5658ff374645ff323936ff2b3230ff2c2e2dff322e2fff373132ff433433ff503d3bff60473bff7f5843ff73543aff6b5349ff71544aff715547ff83511cff8a561eff8b5824ff415e49ff276653ff2f6450ff234a48ff114f4fff154a46ff5b4449ff684e51ff6d4d51ff735d4dff7d674cff7e6246ff843c1dff943b1bff914126ff7e6945ff82734bff867140ff836a32ff816b32ff826536ff835d5dff7e6062ff725e64ff556175ff3b6478ff386373ff4a5969ff525765ff535864ff6b5867ff715764ff785558ff8c5a36ff985e2cff975d27ff934c27ff9b4725ff9b3d2cffa13149ffa5294dff81b5c0ff86c4cdff77cdd2ff62ddd7ff5fe0d7ff59d9ccff4eccbdff4bb6a2ff659c89ffa2875bff8f693eff634124ff38210fff352113ff372b1bff435838ff649f79ffe8bd49fffad741fff5d843ffeecb3cffeeb335ffd06016ff9d5f2eff4f3727ff715a54ffab887eff4a8480ff14a3a8ff9a1e39ffa12226ff8a2222ff7b514cff664957ff694e48ff655243ff594e42ff536156ff5a6453ff605947ff756033ff706441ff585941ff516059ff5e625bff5f5341ff765a30ff715e41ff58594aff0c5e6eff1a5e74ff464e63ff674e52ff6d5257ff794d22ff936024ff8e5d26ff6d4024ff531131ff52102eff5e0d22ff6d131aff6e1617ff6c4223ff685e4dff665646ff6e5955ff7c6062ff594844ff3d3333ff36302fff373031ff363132ff373233ff363434ff383639ff383639ff3b3839ff413a39ff473f3fff5a565eff727f7fff7e7066ff735442ff7c5624ff855f34ff7e5d31ff4c5839ff5e6d4dff4b5a3aff2d433dff175d57ff173d35ff5d404bff695362ff67464fff67514aff7d5d4dff694941ff773e3dff894943ff7f4734ff876241ff926d45ff97672fff946428ff906227ff8d5d23ff855e50ff79655dff755f59ff69666bff6a7477ff53676bff46656bff406b6eff416263ff675864ff6f575bff784c4aff845d4dff906a5bff896749ff8f543cff984935ff974035ff9c3644ffa83644ff4e6361ff61898dff5f9ba1ff5cbdadff66d5c4ff6ae1d1ff6feddcff68efdaff9de7d3ffeed57affe7c148ffcfa93effb58a3cff986e3aff5e4227ff34200dff3c2617ff4a3020ff74401affdc9d39fffbe14ffffabf3efff38a0cffe6780affd86210ffba6924ff6c492bff886051ff8f786fff7e4853ffb41e26ffb2321fff9b4907ff9a4d12ff915c34ff714e49ff57504aff235f60ff346061ff555950ff825726ff80562cff645540ff2c5b6aff415d6dff5b5553ff805120ff80542dff635644ff065b6fff155e74ff435067ff664f5bff6a535cff795238ff8b651aff8e6815ff714723ff5d1033ff5d1036ff640c25ff761117ff75181dff704b35ff7a5d4eff7a706dff555253ff3a3332ff373130ff363130ff363030ff373132ff373233ff383334ff3a3738ff3a373aff39373cff3b3738ff423b3cff483c3dff4d4144ff415b63ff657e89ff927672ff7a6b56ff7e6648ff78613cff6d6136ff746635ff676036ff365043ff19584fff1c4e45ff594c5eff634f64ff64485aff5e434bff69474bff6a4144ff73454bff70484cff70453eff8d583cff9e5f3cff9f602bff9a5b1fff985c1cff935b23ff856249ff79654fff716256ff716b63ff7a746cff6b6e6bff4c716eff36716cff316c66ff62585cff6d5051ff744e4eff7c6769ff847271ff83705eff865544ff90473eff923f38ff993b3affa23d3bff2a0f0fff2e0e0bff23120eff1b2316ff265943ff46957aff5fccacff76e7c7ffc9e6cbfff7e67afff8eb69fff9e863fff3dd54ffebc840ffa3a449ff59775aff655e49ff513826ff422314ff4a2d1aff664028ff8c4d33ffdc7636fff9921cfff8961afff1a520ffd89725ffbf7e26ff856034ff484345ff31464fff4f423eff9a4d20ff89500bff936616ff892b30ff713a45ff215e5fff2c5d61ff555453ff825222ff825124ff675041ff325c6aff375768ff5a535dff875324ff835020ff65513fff115b6bff10596cff365167ff674f63ff66515bff6f5746ff88691cff866619ff6e4821ff591535ff600f38ff650d26ff782027ff705455ff716661ff747066ff444542ff353235ff363130ff363130ff36302fff343031ff373233ff383334ff393636ff383637ff38373aff38393dff39393bff3e3d42ff4d4446ff4b4540ff3f524dff50464eff7f634fff867967ff8a7260ff806450ff705f36ff6e6335ff72663bff475a48ff15594fff0f5650ff4e5366ff5f5267ff624e63ff5c444dff6c484dff744845ff704245ff6c474bff6f4b4dff8d5544ff9f5b3dff9d4e30ff995124ff99571aff925528ff805f46ff7a634dff736652ff746e61ff79756dff76756aff51736dff36726bff2b6f66ff595b5bff6b5457ff685357ff6e696bff757673ff736d67ff78504eff874643ff8b3e3aff9a403dffa33d39ff64505fff5e4352ff4d333dff382123ff33140dff341309ff2d1d0eff2c4530ff5d634bffca8a2fffefc33ffff9e65efffaef6efff7f16dffb4d57dff4fb58cff3f9b7aff3d8463ff597259ff7b5c4aff673825ff482919ff593828ff815143ffb2694bffdea14ffff0c136fff0c336ffe3b125ff31866eff397163ff434543ff2e3d44ff3a4f4eff68503aff791b2eff7f3539ff205c5dff2e6163ff51494eff834727ff8a4f25ff64463fff5b6165ff5e6469ff5b4c55ff885125ff8a5723ff593f35ff35515fff345568ff2d4e60ff624e69ff6b4f61ff605651ff7c6523ff786221ff664826ff502d37ff512838ff60323cff715756ff67636aff735759ff3e3e42ff373537ff353235ff363130ff373130ff36302fff363130ff373433ff373434ff373639ff38373bff39373cff37393dff393a3dff3d4044ff43474aff3f3f3eff3f4844ff4b5350ff5f5548ff816b4fff8f724bff837561ff786d61ff74654bff706341ff475d4dff115f50ff045b54ff255a68ff4b6573ff3e5660ff694d44ff8a5b3dff814833ff644a4fff5f585dff4a4e51ff7a4a45ffa35539ff963230ff963b24ffa0511bff884329ff775d4eff7f674fff74674eff776f63ff79776fff787363ff577065ff3a7369ff246b5eff2a5c56ff555f5fff325c5cff2d636fff50717dff466673ff554550ff7e3d47ff843038ff8e3532ffa03b28ff6b91a9ff6a7f94ff727082ff786171ff8d495bff8f3646ff752e33ff4f1e1bff3e180cff3c170cff3f1c09ff592e06ffbc8423ffe7b73cff72995eff75c093ff7fd2abff77d2b0ff52b897ff35a181ff3b8768ff5c6f58ff895b4fff77392dff5a3022ff704f40ff8f736cffbb9579ff92aa59ff1ab5a0ff0bb19dff1e9a8aff8c242bff74373bff455353ff3b5555ff54554dff1e5e5eff315d63ff564e53ff82381bff8d4120ff764c3dff6d655eff71665fff6f5954ff85501eff84531cff624633ff474450ff454855ff4a475bff5f4768ff634967ff625351ff675e2cff685c2cff5f492dff453739ff59464aff6a5952ff675a4fff554e59ff38475bff344450ff343437ff343333ff373130ff363130ff343230ff353332ff363434ff363434ff37393fff34373dff38393fff373c3dff373b3aff3a4042ff3c464eff453c3fff4b3b3fff593e3eff745a3cff74413dff69584dff736c52ff757264ff756f67ff6b5e56ff436557ff086357ff065f58ff09656dff07656dff12656aff7d5d3bff8e5620ff884b24ff5e5b5cff3b6165ff37575aff814642ffa13f3aff993530ff9c361eff9a3c10ff903f23ff835a47ff7d644cff76634dff756e64ff76756bff767266ff4f6d60ff337365ff1d6b5cff0a6057ff0a655eff0c6061ff136679ff1d6881ff26677aff5f4251ff7a3242ff812939ff8f3526ff9c3b17ff72d0dcff6bc7d6ff6dbed0ff7bacc0ffc875a6ffd83f7affd63d6affc83f60ffba3f51ffac3d42ff87332dff512214ff401a09ff421b0aff391d12ff3c2715ff45482fff5f8662ff79bf9bff4fb78fff58c99dff4cbd9aff35a485ff768e7affd33061ffc23755ff8e3e44ff61463dff666a5fff756359ff388a6eff737983ffb81d24ffb52024ff4a614cff2e685dff565358ff476266ff345f61ff585352ff843816ff853d14ff7d4b27ff71655aff72655dff765e48ff82541dff82521cff694b2fff4a454eff4b4551ff5c4053ff674864ff5f4564ff5f4b50ff685e32ff625a2eff4a4632ff594847ff685654ff6c5848ff554d41ff444a50ff453845ff3c383dff373336ff353333ff373130ff37312fff373535ff333639ff353537ff333634ff373a40ff36363dff3b363bff3a4146ff373f40ff363e3dff394345ff54383cff4f373cff553b3bff61523bff6b3d44ff63475aff5b564cff6d5b54ff68655dff716761ff64605aff196153ff046358ff036265ff0b6870ff336b65ff7e5f30ff91591bff8d5b2aff59605dff396066ff2f5b5eff804743ff9a403aff9c3d2dff953f1dff973f19ff944225ff875d47ff7d644fff766053ff766a69ff76716eff6d6f69ff3e6a63ff206f63ff14695aff18625cff20645fff236262ff2c6478ff396b82ff3e646eff6c414bff853240ff892633ff933221ff9c3c17ff74c8d5ff73cfdcff74d5e0ff9ad3e3ffee9ad1fffc70b9fff566acfff2579effe84488ffe53f77ffe5416effde465fffca4950ffb34341ff833630ff4d251aff3a1b10ff3b1b0dff3d2216ff4c3021ff58523eff6a956dff7acda0ffd9859ffff947a0ffed3c8effe4317affbc3d66ff596466ff644948ff4f322aff46423dff614749ffa3373bff0f6d5cff0c8372ff62262bff7d2e2fff3b6479ff5c4e46ff853b23ff833c1fff7b4916ff735c36ff72604bff6e5d2dff765e2dff795c31ff62492dff4f4d4fff4c4d51ff64313cff804d4cff764d54ff55383cff4c5944ff535c42ff4b4640ff604c4bff5f4c4aff5b443eff453b3cff453a3eff443138ff442e32ff3f3234ff313231ff363333ff40302fff403132ff393337ff33373aff353e3bff343637ff353637ff393e3cff504c3bff39403fff393c38ff3f3f36ff5e3f3aff3b3c37ff51483cff443f36ff453a44ff3f4f60ff455654ff4e4550ff535860ff72554cff765f5aff635e58ff1f5b4cff1c5f56ff5e7768ff5c6a50ff7b632cff986c1dff90682bff5a605dff386873ff305c62ff74504cff885649ff895238ff864c37ff8c554bff834e3aff815851ff7f6462ff765a60ff60636fff63767dff3d6e73ff255f5fff3f5f5dff395a52ff3a5a58ff666560ff5f5e5aff5b6365ff707369ff6f6457ff7a4440ff96323eff912532ff8e2f21ffa65624ff3c7780ff529aa5ff6bb5c4ff87b9ceffe379affffa6aa9fffc72b5fffa76bafffc77befffc73bbfffb6db6fff85da6ffee478effea3e7dffe13e6dffd94962ffc55d3fffa7572fff80492dff4c2816ff3a1c0eff422817ff583e2dff794d3bffb8595bffea5787ffff71b5ffbc8cb7ff609eacff558c9aff45737aff9c2a53ff8c3144ff643939ff6d4a39ff68594bff612025ff493434ff3b4555ff5d4742ff7c382eff7d3a25ff7c471dff6c5116ff705726ff6d5f2aff6c6b44ff696a47ff5d5a44ff46514cff52504eff6c4644ff844d35ff865034ff5b483eff16554bff43514dff55494aff4a4147ff423e3fff3f3739ff423639ff493335ff423334ff3a3132ff373434ff333638ff32373eff3f2d2eff432f2fff422e2cff354241ff383b3aff393133ff3c3339ff333d3fff3d3931ff3e3a3bff493f32ff413f35ff3e3e39ff3d4543ff454948ff584038ff564a40ff444a52ff434d4fff4d464aff504f59ff505051ff67504eff6c5b5dff5e534dff5d6c52ff71734eff757047ff887228ff967018ff96702eff5e686cff326779ff23606bff655c55ff74614eff7d5c43ff7c594bff7d5c4fff79564fff76575eff76606cff725d6dff4a6a79ff2a737fff1d6f78ff33585bff474e4eff494d49ff5e5953ff775e57ff715e54ff776759ff816d54ff7e674bff894b40ff99343eff9c2b39ffa24b2cffa45923ff2f131aff250b12ff160f16ff1a2936ff4b142bff921c37ffca2d56ffec4475fff75b90fffd69a8fff7639ffffb72acfffa77bafffb7dc2fffa76c1fff870abfff38b56ffea8019ffe0751affd46f24ffc16c29ff847962ff765446ff442c20ff432210ff60361fff8e5744ffa2705cff878a7cff79b6b8ff7ec9d6ffdb307dffd92e77ffc82766ffae4a2bff924a26ff64523bff55554dff454344ff553e3eff78352dff793529ff723b24ff69511eff675522ff5f5933ff646a48ff686d4eff50624cff47524bff50524cff685446ff845331ff854d36ff5f5441ff39514eff5d4d4dff514141ff413b3dff3c3738ff3b3435ff3c3234ff3e3534ff373534ff31353aff333331ff343432ff353437ff443030ff49302fff452f2dff383e39ff3a312fff3e302fff3b3131ff343b3eff41392eff3b3534ff504437ff3d3d36ff3d3532ff423539ff3e3b40ff543936ff4a433bff434848ff525242ff574039ff533e47ff4a5055ff59494cff625357ff655b5eff635e4fff717049ff786f3fff8c6d1eff967019ff936c31ff53626aff2c6677ff1b6374ff566057ff706450ff6f604eff6d5b54ff735d54ff6b5c5fff655e6dff6e6070ff6a616eff436a76ff2e717aff266e6eff445554ff524a49ff5c4644ff71524eff7f5a4eff805744ff86634aff8a6d4fff896946ff904e40ff98353dff9e333fff9c5230ff9d5c25ff654e7eff60456dff5a3c5cff543247ff4e2b37ff481d23ff3f0e13ff38080cff34050bff4e0916ff49101dff791422ffbc2e46ffe7466efff7629afffb7ea3ffffb06afffebf70fffec573fff7b760ffebb148ff3ad4b2ff2cc4acff33ad97ff5b937effb86452ff964220ff572d1dff5c3326ff623a30ff603c35ff823a41ffda3b6cfff3468dffd46d0bffce6f07ff99661cff2b5a44ff5e6a50ff785d3fff6e4b3dff683934ff50202fff5d372eff654b30ff2f4a38ff436757ff536c5bff415f51ff55574cff5a5747ff5c573aff7c5328ff7c4e2aff594d36ff5a5250ff504747ff443c39ff3f3636ff393231ff372f2fff392f2fff392f2dff3a2f2dff343335ff36362fff363130ff402e30ff493934ff4b332fff452f2dff433131ff3c2e2dff363130ff353432ff343733ff453f33ff363935ff363d36ff423434ff413335ff3a3d3fff3a3e42ff434442ff4d3c39ff444346ff3e4b50ff4b4347ff494147ff434b4dff4f494aff584d4dff625456ff685955ff72674cff7c6024ff85601eff976a25ff805a34ff555a64ff2b5e71ff135b6cff39615fff746655ff666052ff4e5f5cff5e6364ff3e5d65ff48616dff767070ff676a6dff536c6aff636f69ff5e665dff684b4cff743f4bff7a333dff88453bff925437ff8f4e20ff935e3dff8f6d4eff8b6945ff8b5244ff8e4b4aff8e4a49ff905637ff91602aff6c88d7ff697dccff6f72c0ff7566aeff795e9cff9e4e73ffa64547ff933d37ff833932ff6a3229ff5b2c23ff45201bff350f0eff2d0a0bff2c0f0eff301414ff431a0fff79320fffc56823ffed912effdac56cff7dedc7ff7bf2e6ff68f4edff38eadeffd3ba98ffe58511ffdd7112ffd4621affb23e21ff87342fff5f3627ff593222ff653526ff7f3728ffbe5b27ff37592cff0f7455ff696c46ff996f1cff39514cff384e49ff433141ff4a1e30ff492933ff304645ff22625dff2f6461ff436056ff645a45ff655741ff605639ff6d531bff6c5220ff695542ff5e534cff453f3cff3f3330ff3c3232ff393030ff382f2fff372f2fff382c2aff3a2f2bff373130ff393331ff323230ff39302eff383631ff3d3534ff3f2f30ff3f3537ff3f332eff39322fff343638ff35393dff3d362fff333b3bff353c3aff483238ff463235ff3c3d3cff4a3c37ff48443cff464040ff443a3dff464249ff4a4347ff4b4044ff504142ff554544ff564949ff5c5250ff645753ff5f534aff7b5928ff815729ff86582cff7d5436ff4b515bff275065ff164f65ff505c57ff6b614eff655f4eff46615fff306367ff2a6366ff5e6e70ff75736eff727168ff706b5dff796c58ff7b6651ff7d4747ff892e49ff89253fff9c402bffa34b15ffa14e19ff93623eff8e6c4bff8a6b49ff815a4aff81514dff82514bff845838ff835d2cff79ccf8ff75c5f6ff78bef6ff7cb1f2ff80a6ebffd48ecfffe36d55ffe16743ffd8603affd25c41ffc25a44ff8f5d4fff5f5c6dff5b565eff595252ff52443dff4e372fff43241bff2f1612ff291410ff291911ff302717ff3b4528ff53845dff84c6aaffe89c65fffbbb59ffffc472fff5b352ffdd4823ffe43237ffd62e30ffc12f2cff3f604eff445a4aff53493dff6a3b33ff60402fff6c4e2bff89622fff314339ff405152ff483b4dff4a1d34ff482638ff3c3d43ff24645fff335e5dff52564cff665743ff675540ff664d2fff6a511eff6c5532ff6e5449ff474a48ff403332ff3c2f30ff382e2cff372e2bff362e2eff352e2eff372e2eff392d2eff3c2e2dff3d302cff37322fff383430ff323731ff353832ff353635ff323938ff393935ff453c32ff413632ff36312fff393432ff363536ff373637ff443338ff4a3736ff3d3736ff4d3d37ff483534ff43403dff3f423fff3f4244ff464143ff4a4042ff4c4041ff514142ff524441ff564d4dff5a5251ff605658ff695342ff774b27ff84542eff7e4f33ff474559ff224b5fff264856ff655648ff70614dff6b5c4bff495d64ff316168ff336062ff656965ff706f69ff766e5fff7d654bff7c674fff7d6349ff874245ff8e2d49ff8e2641ff9a3f29ffa14b18ff9e4c1cff8e6044ff886c4dff7c684bff73594cff74524eff745049ff71553aff795d32ff79cbf7ff7acef6ff7ad1f6ff79d4f8ff92d6fdffedbdebfffba882fff7a56cfffaa166fff5985cfff29051ffd29e74ff4ea3bcff3f97b8ff3a91adff3b8aa0ff468693ff568b83ff618270ff687865ff6a6d53ff635a40ff503b27ff322510ff2b160eff321b16ff4d2f24ff834e33ffa25839ffa93e30ffe2443ffffe7c71ffdb786eff34ac85ff299f81ff258c6eff3a6d6fff3a6066ff6f5a58ff91512dff79513aff615956ff514551ff4a1f36ff4a253bff413947ff2a626dff365f6bff594444ff774b34ff724a36ff52311cff514d3bff675b51ff684c49ff3c3f4aff3c2e2dff3b2e2fff372c2aff362d2aff342d2cff352e2eff372e2eff392d2bff39302bff3a332cff3b352eff393531ff333630ff353331ff33393aff313232ff363130ff40322dff443230ff313333ff343031ff3c302fff443532ff403436ff4b3b33ff403735ff3a3937ff3f3737ff3f3a3bff423e3fff424040ff453e40ff47403fff4a4041ff504242ff554544ff544b4bff57504fff625855ff5f524eff6b3638ff924a41ff772534ff572637ff624b51ff5a3b29ff734740ff746162ff6e5651ff51575dff336163ff365c56ff68644eff72694aff786536ff7c5e39ff7e6850ff7f5e47ff8a3d41ff8b2e46ff87273dff923a2dff994127ff913f29ff82584bff846b4dff78674dff605a4dff5c524aff4b4d43ff364945ff4e5b60ff4d89c8ff5a9cdbff62aae7ff6cbaf0ff84c0f5ffdf98ccfff6966ffffc9d69fffca76cfffbb06ffffab772ffe2cda8ff86dae7ff80dfedff7adff2ff6ddbf2ff57dbeeff46e3e1ff35ded5ff2ed3c8ff2cc5bcff36b5a7ff854c73ff933f5eff9e4552ffab5750ffb9723fff91611cff633f17ff48230eff491914ff541e1bff61221eff602f22ff5a7849ff5fa77dff539f9eff58afb9ff9e7d63ffb66508ffad6410ff9c691dff8b2e37ff47535cff4b283dff3c3f50ff245f73ff385971ff5e4c59ff823417ff81381aff5d3829ff333f3eff605f62ff3a3f41ff3a3332ff3a2f2dff392d2eff382d2eff372e2eff362e2bff352f2bff372e2bff372e2bff372e2bff372e2bff3a322dff3c332eff3c332fff3c312fff3f3430ff3a3333ff383533ff3a3432ff353331ff323534ff332c2aff41322aff403130ff3b3536ff3d3839ff3b3838ff3d3837ff3f3839ff3d393bff3f3a3bff423b3cff443d3dff484142ff474341ff4e4545ff524646ff524a4aff585151ff5e5756ff605656ff69464dff821c40ff811b41ff763022ff793718ff73381bff75505cff715862ff705a65ff51595bff315d5aff325d55ff645f38ff756029ff755c25ff72603fff7c684cff7a6049ff7f4241ff7c3140ff7d293dff863434ff913a2eff913f35ff865a4aff836a4dff7e6b49ff5d5c45ff3e5240ff2c4d3eff1e4e5aff17546cff171924ff0e1724ff091a27ff07273aff123656ff271a3cff501b1cff7a2e1cffa94420ffd05b27ffdd6c2cff775d41ff3e7880ff47969eff63c2ccff73d6e5ff6adee6ff6beadbff78f4e7ff7bf5eeff7cf6f4ff7af7f3ffd696ceffda70b2ffcb5497ffc9428affdd7370ffe6c336ffddb12effd19e2bffbd9a34ff4c6c43ff546a42ff6f7349ff6d5029ff5b3820ff582c24ff64302eff773d2effae5a29ffa4661fffb88829ff822039ff3c4449ff4a263dff353d50ff285c73ff3a5a70ff5a4a5cff82331cff84381bff5c3832ff585353ff585756ff393736ff373130ff3a2f2dff372e2eff372e2eff352e2eff332f2bff352f2bff372e2bff362e2bff372e2bff372e2bff382f2dff37312eff37322fff36312fff383233ff343031ff322f2eff332f2eff2f2d2bff312d2dff352b2bff3a2d29ff3a2f2dff373233ff393435ff3b3435ff3e3835ff423b38ff413a3bff443a3cff453d3dff45403fff474341ff484442ff4e4746ff4d4847ff4e4b4cff554e4fff5d5657ff60595bff64595aff832142ff851e40ff803525ff7a3818ff773d27ff735361ff6e5a65ff6b5c6bff455858ff2e5f58ff2c5a4cff5b5834ff715c24ff6f562aff67614bff7b6950ff75664fff69463eff77353eff772a3bff7b3334ff88382cff8b3d31ff875a46ff836b51ff7e6d4bff665c40ff48553fff2e493fff235261ff225972ff6f324dff67324eff5e344cff58344cff523549ff473545ff38313dff2d2e35ff24282fff20252aff1a2126ff161c22ff0a191fff0b1720ff071520ff061923ff05252cff031f1eff072a20ff06442fff116f54ff268c78ff602a38ff903a4bffc85d78ffe77f9bffffdf92fffdf171fffcf482fffaf385ffdaeb76ff42c69dff2ebc8fff2da881ffcfb85cffd2a42affcb9325ff647c3cff3d6850ff4e5f51ff8a384cff66454fff344243ff3d4a4eff463e4cff3d3d51ff50536dff5b526bff5f445aff833617ff823619ff5e3837ff705d5bff4f4641ff3d3534ff3b312fff3a2f2dff3a2f2dff382f2fff35302fff34302fff36302fff382f2dff36302dff362e2bff342d2cff352e2eff352e2dff312c2bff2f2c2aff2f2a29ff2f2a29ff302b2aff2f2a29ff2d2928ff2c2827ff2d2928ff2f2a29ff302b2aff312d2bff332f2eff373032ff3b3434ff3e3837ff413a3bff443e3dff47403fff484141ff4a4344ff4d4645ff4f4847ff504a4bff4f4c4dff565051ff5b5453ff5b5655ff60595aff794b61ff7a3753ff7e3e36ff754831ff754935ff605a69ff5b6977ff3f646fff2c5b58ff5d5f4eff55513eff534624ff7b501eff6a4427ff5c5a47ff766f53ff6c6e4fff65573aff825838ff764728ff70432bff89562dff8e5330ff865e4bff837367ff827158ff6b5d41ff6c6139ff6b5e3aff5b5862ff665f71ffbd3455ffb13352ffab3655ffa43857ff9d3c58ff9a3e5dff8c4164ff864669ff80496cff784b6cff714f6fff655474ff416388ff336893ff386a91ff386483ff376378ff325a64ff2b5451ff234a44ff17433cff10352dff0b2a24ff08261eff082220ff11221fff20251dff2d261aff3b3116ff5a3e0fff5a3e18ff4c4720ff537b43ff71c27ffff9db50fffeef64fffcf277ff6ac071ff3fba97ff3cae90ffc93278ffcb2d76ff332435ff26383aff3f5c6fff5e384fff624c66ff694a64ff6c4252ff893814ff85381eff6a3e36ff6b5654ff403736ff413532ff40332fff39302dff3b302eff3a3131ff3c312fff39302fff3b302eff382f2aff34302fff363130ff36302fff36302fff342d2cff302b2aff2d2b29ff2d2b29ff2f2a29ff302b2aff302b2aff302b2aff2f2a29ff302b2aff302b2aff312d2bff332f2eff363130ff373233ff393435ff3a3634ff403938ff443f3eff484140ff4a4342ff4b4444ff4f4847ff514a49ff514b4dff514e4fff565051ff565250ff575455ff5f5b5cff755f6dff6d4862ff704941ff765139ff74523dff47646dff286b76ff166b72ff545c50ff6f5c42ff6d5333ff6a421cff774015ff77421eff6c6447ff7c7851ff77764dff70662fff7d6328ff785a20ff815c2fff895c2eff885b37ff82655aff81766fff7f7468ff75674aff7a6537ff7b632fff765f5dff796167fff05e72ffee5c72ffec5c72ffec5870ffec546bffe75069ffd04c7dffc34b87ffba4785ffb14380ffae4583ff9f4282ff5b8bc5ff289ae0ff2699e0ff2899ddff299adbff259ed7ff239fc2ff269cb6ff2a9aaeff3396a3ff3c8f96ff5a878aff748582ff938f7cffa89675ffc49e4fff9f9833ff748129ff47702aff1d5f30ff175236ff0e3c23ff173421ff263828ff333829ff273b2cff244431ff40543fff9e394affd25077ff2b303bff225254ff404e62ff73314eff6a4963ff6a4860ff743b41ff8a3712ff87361dff7e4e43ff564847ff3f3437ff413530ff423430ff3d3431ff3d3230ff3c3131ff3f322fff3d322eff3d342fff35332fff373231ff373231ff373231ff34302fff332c2bff302b2aff302b2aff312d2bff312d2bff312d2bff312d2bff312d2bff312c2dff322e2dff332f2eff34302fff373231ff383332ff3a3634ff3b3738ff3d3839ff3f3a3bff3f3d3eff443f40ff484445ff4b4645ff4e4a48ff4f4b4cff504d4eff514f4fff535151ff555253ff585656ff5f5d5dff6e686cff684b67ff604e4dff734f39ff654d35ff395e60ff1d6872ff166d6fff595d49ff6e5b3dff76532cff7a4517ff7c4118ff7a4119ff7d6745ff7c774fff7f7945ff7c682eff7f6625ff7d6121ff855f23ff8e632fff896137ff826a60ff79716eff74726dff746b51ff7b6737ff7f6229ff805f51ff846262fff16572fff36775fff46a77fff46d79fff46f7bfff37181ffe17096ffdf70a7ffdf73acffdf77b3ffdf79b8ffdb7dbfff95d0f4ff70ddf9ff71e1fcff6be2fbff66e9ffff61e7fbff62e4faff58e6f5ff4ee5f4ff44ddebff3bdce9ff34dbe7ff2cd3dfff26cedcff2cc6d5ffc5e5cdffe9d348ffe5ca3fffddbb33ffb6c14dff3b9469ff378964ff38835cff3ca681ff379f81ff2f9a7fff227e68ff326e58ff376653ff3f5961ff385764ff285878ff335773ff495a61ff6f3548ff773d4aff7a3523ff824726ff7b442bff785850ff414141ff3e393aff443633ff443632ff3f3633ff3d3532ff3f3333ff403331ff3d3230ff3b3431ff3a3634ff393433ff393533ff383332ff363130ff352e2eff322e2dff312e2dff322e2cff332f2dff332f2dff332f2dff332f30ff343031ff353130ff383332ff383332ff3a3636ff3b3738ff3e393aff3d3b3bff3e3c3cff413e3fff444242ff474243ff494546ff4b4748ff4c4a4aff504d4eff515050ff535151ff555253ff585656ff5b595aff615f5fff6e6a6bff5d5069ff554d52ff6e4c44ff634a41ff415958ff3c6365ff40605bff635540ff6f5937ff7a532bff7f441eff854029ff82401cff896440ff817b55ff7f7a49ff80713eff7c6f49ff7f6f3eff856e3fff876c45ff856c4cff706867ff62696bff546265ff666853ff716a3eff7a692eff866430ff966a3fffd84851ffda4b54ffe15158ffe6575effeb5d64ffe6606bffb14767ffb1486fffb54e77ffbc517effc96293ffc96aa0ff5c8cb6ff4aa3cbff49b3daff55c8e8ff5dd9f4ff52d1edff3dacb0ff4bc5c4ff56d8d1ff67e5dcff6ae0e1ff58cec2ff61dcccff7eebddff88f3ecffebebb1ffffef67fffef474fffef683ffcde995ff9bedc3ff98f1ceff83edcfff73f8ecff62f2f1ff4beeefff51dfd5ff4cc7b0ff44c0abff5fb1c4ff58a7bfff1ca3d8ff18a4d7ff2d9ea3ff76202cff88211eff7f3922ff6e4e30ff6d4c34ff755b5aff454547ff3f3b41ff46373aff443939ff473f3aff443e37ff3f3833ff463831ff403937ff403634ff413534ff3d3736ff3a3736ff3a3637ff373231ff353132ff343132ff343031ff35302fff363130ff363131ff373233ff383334ff383334ff3a3634ff3a3738ff3b3839ff3c3a3aff3e3c3cff413e3fff424040ff434141ff454343ff484546ff494647ff4c4a4aff4e4b4cff504d4eff525050ff545253ff565354ff585656ff5c5a5bff605e5eff666364ff6e6c6cff5f5062ff604752ff70474dff674648ff565253ff505b5cff4f5953ff67543fff745737ff75522eff804327ff893e2bff883f2aff856848ff7f7a53ff7d7e50ff78764bff7d7755ff7b7552ff7e7450ff7c734fff7c6f54ff696564ff405a6bff295567ff566259ff706e44ff7e7236ff896b28ff9f6f1eff33131cff3a111dff3f111bff46111dff49111cff421320ff231322ff211423ff1e1626ff1f1426ff1e1526ff1e1529ff17152dff151330ff141633ff131732ff161e36ff191e38ff171d30ff192236ff172334ff192431ff181f2dff1d232eff1f2232ff212234ff2a2533ff242634ff28232cff2f272fff31282eff2c262aff28232eff2f2432ff392734ff382f3aff343438ff2e393dff2a3740ff223b3eff294142ff394553ff455366ff4e4f73ff555472ff605257ff822430ff852122ff733c2aff704f34ff6f5038ff725d62ff494e4fff444c51ff454448ff434041ff41403cff3e3d35ff423c34ff463c36ff403a3aff3d3d3aff423836ff3f3738ff3f3a3aff3d3839ff3a3635ff383333ff393534ff393435ff393433ff3a3635ff3a3536ff3a3738ff3c3839ff3d3839ff3e3b3bff3e3c3cff403e3fff424040ff434141ff454343ff474546ff494647ff4b4949ff4c4a4aff4d4b4cff504d4eff525050ff545253ff575455ff595757ff5b5959ff5e5b5cff605e5eff646162ff696767ff736f70ff635157ff6e3e4cff714347ff734047ff624a4eff565959ff515350ff5b5242ff725836ff6f5332ff70432fff863e34ff823934ff72624fff7b7856ff737855ff6b7358ff75755bff747156ff6e6b54ff737055ff706d56ff585e5eff335769ff145161ff3f5a51ff716f48ff7a733dff826c2cff9b6e1fff362e32ff372f34ff363038ff363239ff35343dff373740ff393b4bff333c4fff353e52ff384057ff354258ff34445bff324b5dff2b4f5bff2f5163ff325666ff365766ff3d535dff44444dff464551ff4b494fff544c4dff624a48ff86554fff8c5f51ff946454ff986654ff967559ff62a289ff61a386ff5d9d80ff609581ffc7752dffc6702bffc06f2cff967d4bff3695bdff3691c1ff488dc1ffae3b83ffb33774ff925995ff2b7cc1ff5e73beffb32e80ffcc2d75ff7d374eff7c3b33ff663c2eff735239ff74553cff705f66ff604048ff4e434aff464146ff443e3dff424743ff40423eff46423eff49443fff3e3f41ff3e3d40ff413b3cff423b3bff433c3bff3f3a3bff3d3838ff3b3736ff3d3838ff3b3839ff3c3a3aff3e3b3bff3d3b3bff3e3c3cff403d3eff403e3fff424040ff434141ff444242ff464445ff494647ff4a4848ff4c4a4aff4d4b4cff4f4c4dff514f4fff535152ff545253ff585656ff595757ff5b595aff5e5b5cff605e5eff616060ff666464ff686666ff6b6b6bff767275ff74534fff7f203cff863645ff82293eff792643ff744150ff6e3643ff5d4a3eff76653aff6c5f38ff58433eff6d5054ff624952ff5a5956ff706a5eff6a6b5dff54635cff6f6764ff6f5f5eff58605dff5c685dff53665aff385651ff1d595fff0d5d5bff175247ff496547ff576840ff6b6a34ff917525ff3a5854ff3a5958ff375a59ff375c5aff355e5fff336061ff3a6b73ff3e6f8dff3e728fff407395ff407496ff3c799aff358198ff29878cff288989ff288b89ff288b88ff268d86ff25505fff304456ff314453ff344153ff404153ffd2475bffe04457ffdf4455ffe54156ffd25053ff2dd8deff25dae4ff28dce8ff35d8e1fff1ba6ffff6b659fff8b852ffe3d089ff62e9fcff5ce9f9ff7be7fbffff94ddfffc90d7ffddbef2ff7fe3fbffb5dcfefffc71b8fff762a8ff8e4e66ff6f473eff694835ff735334ff72543cff725f67ff7b4755ff5d4c54ff564d56ff57444aff494c52ff534548ff494547ff474141ff443f3eff414040ff413f3fff443d3eff443d3fff433e3fff413d3dff403c3dff403d3eff403d3eff413e3fff413e3fff424040ff434141ff444242ff454344ff474445ff484546ff4a4848ff4b4a4aff4c4c4cff504d4eff504f4fff515151ff535353ff565455ff585757ff595959ff5b5b5bff5d5c5cff605e5eff616060ff636363ff666666ff696969ff6c6b6bff707071ff7a777aff7e5955ff92163dff97193cff981740ff8e1343ff87174aff8d1b4aff7a5443ff7b6a3aff766b39ff5e564cff58535cff504f5bff59575dff6b6064ff6d6163ff655b5fff6f5564ff705563ff58555bff35605fff23625bff155b54ff0c5f59ff096056ff0a5b4cff0b604dff13644bff576b3aff927b29ff69a393ff63a799ff65ac9cff64ad9cff65b1a1ff67b5a5ff73bbbdff7fc4daff7ec4dbff80c8dfff85cbe3ff85cfe3ff78d1dfff70d4caff73d6c8ff78d9ceff7dded0ff80e3d5ff7fa0aaff8c9ba2ff8f9ea1ff95a1a3ffb5b5b7ffeb7a80fff47669fff7786afffa7c6fffdf9884ff2b8773ff21876eff2f957aff458d80ff552524ff5d211dff6b271fff532825ff44313dff4c3745ff543b49ff6e4647ff985151ff71546dff62668fff92637dffcb5428ff4c6098ff964683ff6f493dff6c4935ff755536ff73543bff785e67ff625765ff60504cff574e4bff5c4e44ff494c4bff494848ff49494cff454747ff474546ff464648ff454447ff454447ff484445ff484442ff474243ff464142ff444242ff454343ff454343ff464445ff494647ff494647ff4a4848ff4b4949ff4a4a4aff4d4d4dff4e4e4eff4f4f4fff515151ff545454ff555555ff575757ff585858ff5d5a5bff5d5c5cff5e5e5eff616160ff626262ff656464ff656565ff696969ff6b6b6bff6d6d6dff717171ff767675ff7d7c7fff815b57ff95173dff95193cff95173eff8c1640ff8c1a48ff8b1a46ff825439ff7b683bff796e3dff64604fff56555dff4e515cff5e555eff6f5e63ff745d5eff74525bff735360ff71525fff5d5257ff3b605cff28625bff106258ff0d6359ff076153ff065e4eff0d6556ff0f654fff52683aff8d7a2bff7ab89fff72bea6ff71c1a8ff6fc4a9ff72c8afff76ccb5ff7cc4c6ff7fc0d3ff7ec4d5ff81c6d7ff84cad9ff88d0ddff6ab6c8ff479682ff499882ff46967cff48997cff559c83ff15232eff202022ff232120ff252421ff2a2722ff2e2524ff362724ff392f24ff3f382cff424037ff3d4d49ff39565bff41667aff4b7085ff5b767cff6b7e7dff76847cff51847bff3a8672ff3c8871ff598b67ffd9b33cffdbb838ffb3c378ff6ebdcbffb5cbd7fff5bc72ff99e8edffbb7ab2ff745243ff6a4c41ff765757ff72565aff806d74ff636269ff675250ff57524cff604f46ff554e47ff524b48ff4f4849ff4b494bff4a4a4cff49494bff49494bff4a474aff4b4748ff4c4748ff4a4646ff484546ff494747ff4a4848ff4a4949ff4b4949ff4d4b4cff4f4c4dff504d4eff505050ff515151ff535353ff545454ff555555ff575757ff585858ff5b5b5bff5c5c5cff5e5e5eff626060ff626262ff656565ff676766ff686868ff696969ff6b6b6bff6f6f6eff707070ff727272ff767675ff7b7b7bff838183ff7e6361ff8d303fff9a4c30ff984726ff8a2a37ff9b3340ff99343bff89563fff7c6a48ff776e4bff636354ff5a585eff52505aff5f4655ff7b4b5bff814353ff82344cff7b4b5aff774b54ff654a4dff405c56ff236454ff10635dff0a6c66ff056c63ff056863ff09696aff0d6a6cff496753ff7f7448ff6c9c82ff5e9981ff589881ff589a81ff5fa187ff5f9f88ff385f5fff2f423cff2a3e35ff253d31ff243a32ff26362bff1f2a25ff1a2727ff142b2dff112d37ff13333dff103a48ff104353ff11505cff155d68ff1d6977ff247480ff2f7f89ff3a878eff438f93ff4d948fff39999bff349cd2ff359dd5ff31a0d8ff2aa3d7ff51b2d7ff5abbd7ff5fc3dbff60d3e1ff63dcc8ff7ee8d3ffaff1e5fffcf069fffef67affb5c17fff86ad9bff95888cffbd7774ff558f9eff86644dff785843ff6f5450ff765c6aff6e5664ff7d7f7fff5f6e70ff675559ff5c5b56ff6c554eff6b5a51ff66574fff5c4f4aff554a4dff524b4dff504f4fff4e4e4cff504d4eff514f4fff504d4eff4e4b4cff4d4b4cff4f4c4dff504d4eff505050ff525050ff545253ff545454ff555555ff575757ff585858ff585858ff5b5b5bff5d5d5dff5e5e5eff5f5f5fff626262ff636363ff656565ff666666ff686867ff6a6a6aff6c6c6cff6d6d6dff6f6f6eff717171ff737373ff767675ff787878ff7b7b7bff808082ff878588ff745f6aff844f47ff975b2cff9e5e20ff984531ffa03f3affa03e37ff915c4bff806f53ff797054ff65665cff585962ff51515aff624051ff81294fff8a1e4cff85304eff7e4752ff77484cff5e4c47ff3a5d4eff206250ff0d6862ff057371ff02736eff066f71ff086f76ff0b707aff3d6a66ff74745eff112124ff0c2125ff08262bff032730ff072b3cff053345ff05344bff023753ff053f5fff064d6eff065479ff075c83ff08658eff0d6e94ff0f769cff137ca1ff1784abff198caeff1f9aa5ff22a09fff26a39fff2aa8a5ff29b1acff27cec8ff1fd5cfff23dcd6ff21e2ddff2fe9e5ff6ff0ffff85f5ffffa1f8ffffb3fdffff96cfc3ff84b89dff86a780ff2b4434ff373d29ff504c27ff806427ffc28830ffd39a30ff4c955aff418f63ffa0407dffae91beff7edee7ff79634eff7c5b45ff6f5556ff6e5d6eff6d5565ff857d7bff697470ff665c5eff585c5bff675355ff664f52ff624e52ff5e4e50ff5b4f51ff5b4d50ff585150ff565250ff565251ff565352ff545253ff545253ff565354ff565354ff575455ff565555ff575656ff585757ff595959ff5a5a5aff5c5c5cff5d5d5dff60605fff626262ff626262ff646464ff656565ff686867ff6a6a6aff6c6c6cff6d6d6dff6f6f6eff707070ff727272ff737373ff767675ff777777ff7a7a7aff7b7b7bff7e7e7fff818183ff858487ff8c8b8eff6f5564ff7b5d52ff97612dff9e621fff985125ffa0433bffa14038ff8a5a4fff7e7055ff746d55ff5f5c57ff5c575eff57525bff64384cff872752ff8a1f48ff7d364cff7c4850ff734a4aff53534aff356050ff1c6354ff0e6763ff0a7672ff077574ff016e75ff057079ff0d707eff2a696fff6b7465ff1e3e54ff214359ff29475fff2d4c6aff335274ff2e567eff196592ff0f73acff1179b7ff157fc1ff1683c9ff148bd1ff1693daff1a9adfff1ca4e1ff23aee4ff28bceaff32c9ebff4decf3ff59f0f1ff66f2f2ff7af6f6ff81f7f8ff80f9f5ff7cf6e4ff6df0d7ff8af5dfff63c7bcff133b3dff1c3330ff283527ff424324ff6c5a2bff978437ffb6ab48ffc3b03bffc4ae31ffc3ab2cffdf9012ffe69810ffeda928ff7ee5c8ff98f1e5fff8c7d6ffe2d4d9ff8d9b80ff805f44ff7a5b47ff6a575dff58607dff545874ff83787bff8b847dff7b6567ff5f6864ff625a5bff695559ff625659ff615355ff5b5453ff605555ff5e5555ff5c5655ff5d5756ff5a5858ff5a5858ff5b5959ff5b5959ff5b5959ff5d5a5bff5e5b5cff5d5d5dff5e5e5eff5f5f5fff626261ff636363ff636363ff666666ff676767ff696968ff6a6a6aff6c6c6cff6e6e6eff707070ff727272ff737373ff747474ff767676ff797979ff7a7a7aff7c7c7cff7e7e7eff808080ff828282ff858487ff88888aff8c8b8eff959596ff6d576bff7d6156ff9b6731ffa0681cff935a30ff955666ff8d555dff775559ff716461ff655f5aff5d4e4cff6d4e4bff6f4646ff662f46ff71415eff6e3f57ff604349ff744f46ff755242ff4e5548ff316758ff166e5cff16685aff4a7967ff517868ff3b6c75ff396780ff38637bff2c6275ff4b6d74ff594468ff5e4869ff624a72ff674c78ff6b4e7fff6f4f85ff498cc7ff31a5e9ff39b0efff41bef2ff4eccf5ff59d9faff5de0f8ff6ce2fbff6fe7fcff76ecf8ff7ff3f8ff85f2faff5ae9dfff53dcc1ff43d0abff3ebd90ff319771ff173723ff283a1eff3d4a22ff515d27ff6c743bff7e854fff8b7a5eff916860ffc1a657ffc2aa40ffc9b539ffdec73cfff8eb5ffff7f181fff9f6aafff8d060fffed766ffddba6fff52987bff4da790ffb44654ff8ac2c2ff836253ff835d43ff755e50ff525c67ff166889ff356385ff6e6e78ff967c76ff6f5f5cff7c6460ff66645dff6c5a60ff645b61ff6a5b5cff665b59ff66595aff635a5cff615a5cff5f5b5cff5f5d5dff5c5c5cff5e5e5eff5e5e5eff5f5f5fff626060ff636162ff636363ff646464ff666666ff686867ff696969ff6a6a6aff6b6b6bff6d6d6dff6f6f6eff707070ff737373ff747474ff777777ff787878ff797979ff7b7b7bff7d7d7cff7f7f7fff808080ff828283ff838384ff868685ff888886ff8b8a8dff8e8e90ff929295ff9c9c9cff775373ff87614fff9d6828ff9e6a1eff905e51ff865f69ff7e5f6dff6d5866ff595463ff51525dff63464bff83413eff883c34ff71414dff614f5eff585662ff5c534fff6c5740ff775b39ff5c5f4eff356d5fff1e7361ff3c7263ff607a63ff717960ff6b6f68ff5c667dff535e7eff475e78ff326a7cffa45484ffac5b8affb66090ffbe699bffcc72aaffcc78b3ff91c5ebff69d7f6ff6bd9f5ff6fe0f7ff79eafbff7aecfbff5dd1f4ff47b3deff399fc1ff3494a9ff318583ff1d5b4eff2c3d21ff374923ff435934ff4a694fff4b7676ff4b85a4ff519dc7ff48aad6ff3db0d8ff99446effb83c46ffcc3a46ffde4150ffffdd90fffef59dfffffaabfffff99bff8d6c1cff6f6024ff846a36ffc36236ffaf7a44ff6fa680ff32b9abff34e9e5ffe1d8e8ffd8e1d9ff6a6758ff7f6049ff6d5e4fff33606cff196b89ff366784ff615259ff8b7a7aff7e6f6eff7d6764ff756364ff676769ff6a6466ff6d5e5fff6b605dff695f61ff626060ff646061ff646162ff646162ff636363ff646464ff646464ff656565ff656565ff696968ff6a6a6aff6b6b6bff6c6c6cff6d6d6dff70706fff717171ff727272ff737373ff757575ff787878ff7a7a7aff7b7b7bff7c7c7cff7f7f7fff808080ff818181ff848484ff868687ff888888ff8a8a8aff8c8b8eff8d8d8eff8f8f8fff909092ff939395ff9a999effa29491ff7e5275ff8b5545ff9f6726ffa0681eff8b605bff85606bff795e70ff655365ff5e5465ff5a515bff6a4545ff85423eff8c4032ff79494dff62535fff535962ff60564fff6b5c44ff745b3bff6e624dff41705fff26795fff45775fff6d7e65ff777b5aff736d5eff656477ff5d5e75ff4f5b75ff3b697cffc96c9dffcd6b99ffcc6f9bffd173a1ffd478a9ffd17ab2ff86a4d3ff4fabddff44a3d5ff3e9bbfff3d8ca5ff376c78ff2b4247ff354231ff3b4941ff35555aff36637aff357291ff3583a6ff2f95b3ff2ca1b7ff37a4b3ff2aa9c6ff1fb2dbff20bde5ff21ccebff31dcf1ffecbbdeffffabaeffffaa97fff5866aff723624ff56502eff8d4e28ffcf4433ffe65142ffe1584bffef5134ffe93e3bffd66665ffa2f9fdffbbf8f9ffcee6c3ff689390ff537379ff48645dff656359ff595f5aff135f6bff1e687fff386074ff624c54ff897c79ff867d7dff79716fff756c6aff6f6466ff76696bff6f6665ff6e6363ff6c6363ff676565ff696666ff6b6767ff6b6767ff6b6869ff6a6a6aff6a6a6aff6b6b6bff6d6d6dff6f6f6eff707070ff727272ff737373ff747474ff767675ff787878ff797979ff7a7a7aff7d7d7cff7f7f7fff808082ff828284ff828282ff858585ff888888ff89898bff8b8a8dff8c8b8eff8e8e90ff909092ff919193ff939295ff959597ff979799ff9a999cffa1a0a3ff815758ff833f5eff8d4638ffa46b24ffa1661bff805a5eff7d5d6fff795c73ff644d61ff715057ff744c4eff724442ff82524fff84534eff714f4eff535d61ff485f63ff595958ff6e6060ff7b6261ff725e55ff5c6b64ff5a6f66ff5b715dff737b68ff7a7c67ff78694cff7c5b5aff7a595fff654c5bff595d6cffaf5e83ffae5b7bffa65674ffa55670ffa2556bff905263ff41393cff2c3a33ff2c3e48ff2d4759ff295375ff1e628aff2175a0ff1c8cb0ff1b9dbcff17a6beff1bafc1ff2ba6bcff369dbbff41a6c2ff50b8d1ff67cbe1ff7ee4f0ff92f2feff94f1faff9bf2f1ff7fe5ddff354450ff403727ff8c2c2dffcd2c36ffef4255fff3555bffeb5161ffd43766ffdc3a88ffdd52b3ffffbdc6fff7b292ffd38456ff909743ff708d57ff805d6bff5e7d90ff177981ff20696eff2a6462ff216363ff146169ff196470ff335d6cff56494bff886e5eff858081ff7c7979ff717776ff6f6c6eff706d6fff6e6c6bff6f6c6aff6f6a6bff6d6b6bff6d6c6cff6f6d6dff706e6fff716f6fff707070ff717171ff717171ff737373ff747474ff767676ff787878ff7a7a7aff7b7b7bff7d7d7cff7e7e7eff808080ff818181ff848386ff868688ff878789ff89898bff8b8a8dff8d8d8dff8e8e8eff929194ff939395ff949496ff969698ff98979aff99989bff9a9a9cff9d9d9fff9e9ea0ffa3a3a5ffafaba9ff76263cff832346ff964d32ffa56c1dffa66b1dff875d5cff77586fff71546eff6f4c5cff83433fff8a3e37ff874a45ff825d55ff7d6159ff65605bff406964ff2e6a65ff4c6265ff726574ff7b6773ff766069ff79646cff796a6bff796f6bff7b7773ff7e7b75ff806f60ff895446ff914b3dff874b4fff7d5363ff462d2cff352926ff2c3135ff283c46ff20445bff194e6eff175a7eff176a92ff15769bff1982a7ff1b8bacff1a99aeff17b1b6ff1abcbfff1fc6c8ff2fd6d7ff39dfdfff69e8e9ff95e4efffa1e6f2ffaeeef0ffb1eee7ff6cb4b8ff1c4238ff422e29ff83222bffba2c43ffdc394bffe1353bffe23738ffe52e58ffeb3188fff247bdfff671ddfff490b9ffc77063ff974534ff996959ff647c68ff74816affe3ad45fff2c87bffbfb1bbff3a7789ff127c88ff1b696fff22655fff216361ff156063ff196772ff305e6dff504542ff724625ff8e8784ff837e7eff7b7a7aff787376ff787175ff777273ff747170ff747174ff727272ff757373ff757373ff767474ff777575ff777777ff787878ff7a7a7aff7b7b7bff7d7d7cff7e7e7eff7f7f7fff818181ff828282ff838483ff858585ff878787ff898989ff8b8b8aff8e8e90ff8f8f91ff909092ff939295ff969698ff9a999cff9d9da0ff9d9d9fff9e9ea0ff9e9ea0ff9f9fa1ffa1a0a3ffa2a2a4ffa3a3a5ffa7a5a7ffaaaaabffa99688ff7c2846ff802641ff8a562fffa76e21ffaa6e17ff965f46ff805c71ff73576cff7b484dff8e413dff8e4039ff87524bff826157ff7a6458ff5d605bff3b6a66ff236b66ff3b666cff6f6a79ff776877ff736173ff77616dff7c646cff78666eff7e7676ff807a78ff7e726cff8c5751ff944a40ff8f484bff8a5261ff124a5cff12576dff106378ff116c81ff157587ff1a798fff23809bff2a86a3ff318bacff3a95b4ff459fb8ff5ec1cdff63ede1ff71f1e7ff7ff6efff87f4f0ff8ef6f0ff70e5e3ff286b5eff213a2dff4b1e20ff751929ff982649ffbc346bffbf408bffbc4f9fffcd3852ffd23140ffdd364bffe94a6affff98c1fffb90acffb94c4cff853a34ffa94a67ffe52863ffed3671ffe53b7aff6dcecaffaaf7f1fff4e1b0ffb8907dff167285ff0e7e90ff117384ff25626eff59605dff555e5cff265a56ff4a5d5eff4a4d49ff3d3b2fff54412eff91887eff8e8282ff867e7eff80777bff7d767aff7d767aff78787aff78787aff787878ff7a7878ff7b7979ff7c7a7aff7d7b7bff807d7eff807f7fff808080ff818181ff838483ff858585ff868686ff888888ff8a8a89ff8a8a8aff8c8c8cff8e8e90ff909090ff929292ff949496ff979799ff9a9a9cff9c9c9eff9f9fa3ffa6a8aeffcacad0ffb6b6b9ffaaaaacffaaaaacffababadffababadffababadffaaaaacffafadb0ffb7b5b5ff534a3fff762d4bff822646ff7d522eff9a682effa16c27ff925a28ff7f5456ff77535cff7f433dff90413aff904137ff7c544dff81685aff7f6d59ff546059ff505f5cff54625dff386067ff626479ff736177ff6e5970ff77576dff7e5d6cff72586aff73687bff756f7aff716870ff82616bff8e585cff8e4947ff944850ff17727aff1b7b7dff1d8581ff22928eff28a199ff3ab0afff63bac8ff77c7d9ff86d0deff8dd6dfff95dde2ff91dfe1ff72e3cbff55ddb3ff3dc68dff4a8c57ff493c25ff5d1e2dff762544ff893d5cff875a75ff954e84ffa2478affb64186ffce3b8dffe13fa2ffff8fc1ffffada8ffffa78cffbd4628ff862c2affaa3258ffa05e7fff907390ff777691ffc97ec6fffa8ee5ffffcef8ffd18967ffeb7025ffce9a5eff6f8197ff346e89ff0d7493ff336e90ff68626eff7c5d55ff745b55ff605046ff63483dff5a4437ff3b4636ff1a463aff3b4e44ff938985ff898587ff867e84ff857e81ff7f7d80ff7d7d7eff7e7d80ff7e7e7dff808080ff827f80ff838081ff878283ff888485ff888586ff878787ff898989ff8b8b8aff8c8c8cff8e8e90ff909092ff919193ff929294ff949396ff969698ff98989aff9b9b9dff9d9d9fffa09fa2ffa4a3a8ffa6a7afffbbbcc4ffdddde2ffe1e0e3ffe0dfe2ffc9c9cbffb7b9bdffb5b5baffb4b4b6ffb3b3b5ffb1b4b5ffb8b8baffb8ae94ff6b584cff772e4aff86274eff864f3aff916339ff996537ff84542fff79503fff754f3fff7d4433ff904234ff934133ff83554aff7f7059ff80775aff736b56ff6e5756ff735455ff695566ff685a76ff6b5c76ff6b5470ff76506eff7f506bff73506aff64557aff5e587cff655b79ff786178ff7f6578ff8a5b62ff9a4c52ff36b3a8ff44c6b9ff53d9c4ff5fe6d0ff64edd5ff71e4d7ff7ed1d5ff84cdd2ff86cbcbff86ccc9ff84c5baff76968eff511f25ff621e2dff6b2d3eff734852ff6c656aff577a77ff4c867bff3b8e7bff309376ffa28f93fff371c1ffffa1e6ffffb6ebffffb0dcff80233eff6c292dffae304bffd12c58fff02865ffed346cffac91b3ff8ad9eeffc3f4fbffedded3ffc54e58ffbd809cffde4c51fff37d58fffee0a1ff7b7b92ff556982ff287496ff4a708dff705d68ff815a4fff7b5449ff704635ff694536ff634237ff464135ff114a41ff1c4944ff8b837eff938e89ff8b8a8eff8c8589ff878588ff858585ff858585ff868485ff878686ff878686ff8a8888ff8c8a8aff8e8b8cff8f8e8eff8f8f8fff919191ff939395ff959599ff97979bff98989aff9a999eff9c9c9eff9d9d9fff9e9ea0ffa1a0a3ffa4a4a6ffa8a7aaffacacb2ffbbbcc4ffd7d9e0ffe0e0e3ffe4e4e4ffe6e6e6ffe9e9eaffeaeaedffd8dadeffc8c8ccffc1c1c3ffbebec0ffc0bebfffc7c2bfff927f5aff875e4dff7f3648ff842448ff8d3b47ff956541ff946238ff7e5639ff79543fff76543fff72473bff8c4137ff914034ff8d5643ff867155ff877956ff846c4fff835c53ff7d504fff7c4959ff745772ff735771ff714f6aff78516dff7c5069ff704e6bff635478ff5d5779ff5e5776ff73627dff7d697fff83626fff995357ff62dcceff64e0d1ff6de7d1ff6deed1ff67eed2ff63dfc8ff56867bff525b49ff463531ff4b2324ff59252cff6a4e47ff707556ff74945eff79ac60ff89bb5eff61a65aff30a581ff43b897ff6ddab9ff94eecfffd7eaddffdf495dffa42422ff7b1a23ffa62a40ffcc2a4dffb3253cffd13049ffec2879fff23fb1fffa83dffff2cbddff8c523cff946a9dff6889ddff8088c0ff85b2dbfffebcd5fff8a89affb17072ff7e6c7dff5f687bff657a87ff666c78ff73555bff875142ff854936ff7b3829ff7c3f3dff72363bff424138ff0f5a5fff1b5157ff4b444aff9f9791ff909293ff8f8f91ff908c8dff8e8b8cff8c8a8aff8c8a8aff8d8b8bff8f8c8dff918f8fff939191ff949395ff969698ff979797ff9b9b9fffb0b0b7ffacacb4ffa6a6aeffa5a5aaffa5a5aaffa6a6adffa9a9aeffabadb1ffb1b2b8ffbcbfc7ffced1d9ffdddde2ffe2e2e4ffe4e4e4ffe6e6e8ffeaeaeaffecececffefefeffff1f1f2fff2f2f2ffe9e9e9ffd1d1d2ffcbc9ccffc9c8caffb69f71ffa17d4bff90644dff895661ff7f4457ff7d2950ff835b66ff845e5bff6c5241ff745e42ff786342ff5b4940ff764951ff82464bff824e39ff8e694dff90714bff916746ff8b605bff815d5eff803d48ff805066ff735163ff704a5dff6e5568ff735a6bff674d60ff5d536aff5c6076ff555973ff5e627fff716b83ff6f6674ff925752ff59d2bcff58ceb5ff63cbaaff66c499ff61b283ff49654cff4d2b2eff544a44ff506d57ff518a6cff609b65ff87af4effa3be46ffbac541ffd2d049ffe7df60ffe0e78aff93e3bbff9ae3b9ff92d89eff7da468ff612519ff931f32ffc91e48ff9f264bff643e49ff48333aff3d3244ff684a65ffffc6e1ffd75d64ffa53e5cff7268acff5597d8ff32a7e3ff1fc7edffc1f7feffbbeedaff9a9899ff8e6e72ff906d7cff856c7aff817278ff817876ff7e716eff7d504eff8f4430ff8f3c30ff8a2b30ff931f3eff852b42ff43515fff116473ff1e5f6eff3e4a55ff5f5b51ff9e9b96ff9a979aff979394ff969394ff949293ff939191ff949293ff979495ff999799ff9b999cff9d9d9eff9e9ea0ffa2a2a4ffaeaeb4ffd9dbdfffdbdbdcffdddddfffdcdbe1ffdbdae1ffdbdadfffdcdce0ffdfdfe3ffe1e0e3ffdfe1e1ffe0e2e3ffe4e4e6ffe6e6e6ffe8e8e8ffeaeaecffedededfff0f0f0fff2f2f2fff2f2f2fff4f4f4fff6f6f5ffe5e4e3ffd0d0d4ffd4c49affb2802cffad7d27ff966a4eff8d6b6dff81696dff7b4e68ff65567dff615c7dff66605eff7b7448ff7d713bff6b5f49ff60515dff63515fff715552ff9c6246ffa66641ff9d6149ff8a615fff836666ff7b4e54ff794857ff79505bff694d58ff4d5f63ff3f6565ff406364ff4f5d64ff57646aff536572ff3b677dff316d81ff416d73ff845f4bff435f48ff3b3727ff413228ff424836ff406145ff3d7857ff408c6aff3f9e78ff41ab83ff3db790ff76c299ffe6de7bfff1eb73fffbf181fffaf38cfffcf492ffe9e986ff45421eff692022ff8e232cffb91d3bffd3254dffe32f61ffe43068ffd03276ff686082ffbbb8caffdcc3b1ff905146ff704974ffb74180fff5367bffef2f80ffb7aedbffa8fcffffa6e6d5ff547e6dff56b3a0ff6cd7ccff746e79ff8a7080ff876e7aff847471ff8b7a71ff85716cff7f473aff8f3d30ff8f3838ff8f1c39ff9a2345ff882e48ff4d556fff0d6879ff196472ff385057ff484a47ff7c7665ffa39f9eff9f9b9cff9d9a9bff9a9899ff9a9899ff9d9a9bff9c9c9cff9e9ea0ffa1a1a3ffa4a4a4ffa8a8aaffaeaeb1ffcdcfd6ffe1e0e3ffe1e1e1ffe1e1e1ffe1e1e1ffe1e1e1ffe2e2e2ffe3e3e3ffe3e3e3ffe5e5e5ffe5e5e5ffe6e6e6ffe9e9e9ffeaeaeaffecececffefefeffff1f1f1fff2f2f2fff3f3f3fff4f4f4fff7f7f7fff9f6f4ffddd9daffd6d1c3ff946f49ffb2802cffb37c1eff966c4fff8b7371ff846e72ff696578ff5f6083ff57597aff67676bff7d764eff807643ff76684cff685963ff5d5462ff6e5356ff9d6148ffa96345ff9e6053ff8a6567ff836868ff796164ff74575dff72545bff68585fff4a6366ff396664ff35645eff4b6868ff506767ff48696bff346f7bff256e7bff366a6dff87614fff3b4e3eff3b6149ff396f51ff357a57ff349166ff32a781ff2fb48fff35c4a5ff49dbc6ff6beee5ffa2f1ebfff7eeacfff5ec6bfff1e259fff0c645ffab6f21ff892a1dffaa2930ffc5463bffda6247ffe53c5dffe73373ffeb4098fffa75d0ffffaef4ff7f312dff553449ff6f3f62ffef5f49fff67339ffe24152fff751c0ffffc0fdffd0a1acff7c5c5cff534e5fff3d5f73ff91faedff70d5caff646d78ff816c83ff826b7cff826e6aff96745fff90654bff824332ff923e34ff8b3035ff8b203fff9f3048ff8a374dff48566fff0f6f82ff116477ff2d545bff445b56ff54604fff908862ffaaa5a7ffa6a3a6ffa5a1a2ffa4a1a2ffa5a2a3ffa4a4a4ffa7a7a8ffaaaaaaffadadafffb4b4b6ffc6c5caffe4e4e8ffe6e6e8ffe6e6e8ffe6e6e8ffe6e6e6ffe6e6e6ffe6e6e6ffe8e8e8ffe8e8e8ffe9e9e9ffebebebffecececffedededffefefeffff0f0f0fff2f2f2fff2f2f2fff3f3f3fff5f5f5fff7f7f7fff9f8f6ffe4e0deffdedaceff88726fff845744ffb17d2bffb77f20ff8d6c4fff777671ff6e7270ff476e7aff576285ff566082ff626870ff807756ff867b4fff7c6c4cff5d6572ff576074ff5d4d5bff9c5357ffac574fff925a54ff7b686aff717074ff5d6968ff5a5e63ff665f65ff565b61ff41636cff326b72ff276662ff396a68ff516f6cff496c66ff3c6967ff406c6fff426763ff7c5d4bff316a4eff326e53ff306e53ff316d56ff378c67ff5ae0c3ff68ebd6ff74f0d9ff7cf1deff89f1e6ff82eddbffac8768ff743917ff832c24ffa53529ffc05435ffd56b39ffd6712effd6751effdd7c23fff3858cffffa5dafffea7c9ffd95f77ff643756ffc53e40fff15f35ffe97329ffeb9e34fff8dd58fffff2bcffa16153ff965248ffc74f5effd85365ffd66175ffcecac2ff3a8a7bff41797cff6c667eff816381ff80677eff93665fffa26545ff9b5e3fff8c4933ff923d32ff8e3532ff953339ffa03d40ff8d4249ff4d6371ff057281ff0a6a78ff136468ff1a6c5dff346956ff6d6d42ff9a936bffb0afafffadababffaca9acffadababffaeacacffb2afb0ffb6b4b5ffbbbbbdffc5c4c8ffe2e1e5ffeaeaecffececeeffebebedffebebebffebebebffebebebffebebebffecececffedededffeeeeeeffefefefffefefeffff1f1f1fff2f2f2fff3f3f3fff4f4f4fff5f5f4fff7f7f7fff8f8f8fffaf8f6ffe6e4e1ffe2dcd2ff817573ff6a6d7dff82674cffae7929ffb88126ff907448ff437a68ff337d6dff386f76ff516586ff546380ff656970ff847863ff897d5eff7b7468ff527388ff39738cff525c73ff94365effaa2d5dff954861ff5a7276ff3f7a79ff347372ff356b6cff366b6aff2e6869ff286976ff1e707fff1a6e78ff396c6eff4f6e6dff506962ff585e5aff6e5b5cff765755ff845348ff395d50ff4d6761ff657370ff747e7aff7ca78bff6de1bdff73e5c3ff70dfbaff75daa6ff5f9d67ff623f20ff843c2fffa06e49ffae975effb8aa67ffd9843bffe18825fff3a056fffac98affffdc95ffda755fff6a2c40ff853045ffe94632ffeb4925ffe7532affe06e0bfffdf07bfffffbb6ffceb041ffad5e38fff1a954ffec9c42fff9af5cffffc8cbffd0bdc4ff1e7d90ff377678ff486d74ff765b79ff875f83ff8a5d77ff995651ffaa6442ffa55e40ff924433ff943f32ff963d31ff9d3e30ff9f433eff984b4cff476164ff05747fff07727bff066b65ff136e5eff2d6b58ff5a6b49ff71713eff908a61ffbab5b0ffb5b4b6ffb7b5b5ffb8b6b5ffbbb9b9ffc1bfc2ffc8c8cbffdad9deffefeff1fff1f1f1fff1f1f1fff0f0f0ffefefeffff0f0f0fff0f0f0fff0f0f0fff0f0f0fff0f0f0fff0f0f0fff1f1f1fff2f2f2fff2f2f2fff3f3f3fff3f3f3fff6f6f5fff7f7f7fff8f8f8fff7f7f6ffe5e3e0ffe1dbc3ff958d68ff6f737fff6b6d7aff80755dffb07d2dffb47f22ff977942ff49836fff1d7c6bff306c6eff556586ff565f80ff61626cff827a67ff877d65ff707372ff4c7385ff3b758eff4e6485ff973e6cffaa2c5fff9a4065ff5d7279ff3a7d7bff22726fff186d69ff226f6bff1c6a6fff116d7eff0c7181ff166e7bff3f6a71ff4f6b6dff5c6362ff6b595cff7c585aff885054ff8d4946ff78736cff807a74ff8b807dff87827dff778472ff578f68ff444d29ff612719ff7a3827ff876d4aff979260ff90ac70ff75bb81ff54c59aff5bd0b6fff1d1b5fffcd080ffffcd77fff1a054ffb24737ffcb2e31ffea3938ffef3a4bfff14f2affee7314fff4b652ffffecadff825615ffc86e45ffda524bffee4858fff6cf4efffef7aefffef5b0ff95666eff63bdbdff239abcff3d6e72ff52636fff785472ff8e5d81ff8e506cff984649ffac5949ff95453eff8f3e30ff8f4028ff914022ff9a461cffa65632ff8c563aff4d625cff2d7074ff1d6d69ff0a6c60ff466f67ff46675eff47644bff697456ff546750ff65756bffb7b7b2ffc2bec1ffc1c1c0ffc5c5c5ffcccbceffdbdbddfff1f1f3fff3f3f5fff3f3f3fff3f3f3fff3f3f3fff2f2f2fff3f3f3fff2f2f2fff2f2f2fff3f3f3fff3f3f3fff3f3f3fff3f3f3fff4f4f4fff4f4f4fff6f6f5fff7f7f7fff8f8f8fffbf9f8fff3f1efffe3e3e0ffdad2a7ffa99a5cff8e886cff7c747fff796f7dff72755effa27e3fffab8237ff90743aff4f7c60ff247c67ff385a55ff5a5667ff59536dff565166ff6f6e6fff7c7a6dff636a6dff557482ff537b8bff4e637eff8c5074ff9d4366ff933c5eff616770ff3e7373ff25706cff2a6764ff466965ff206764ff246e7aff407885ff236575ff495a6aff586067ff645359ff764a54ff8b5153ff8d454eff863f52ff7c6e66ff817267ff827263ff7a5e4fff6d332aff753526ff895f38ff967d44ff9c904bff77ab61ff48c28aff40d0b2ff5fe6dcff88f4efffa2f7f5ffd9c9c7ffa04c3aff992325ffdd3627ffea333efff03157ffee3162ffed3770ffffce96ffffea99ffd37925ffd46a43ffdb4044ffee5151ffd53e5dffe459affff4dfc7ff82816aff798984ffc06fabffdfc0e0ff357a7bff38606aff565b6cff7a5775ff86597eff8c4d6fff923555ff95264aff922a4bff8b3d2cff874016ff874115ff945316ffa26c1dff8f652eff5a6254ff4c6460ff40625fff476560ff76666aff686362ff40655cff376f69ff246560ff2f6b72ff4b757dffa1aba1ffcbc6c6ffd0cdcfffe2e2e2fff5f4f7fff8f8fafff7f7f7fff6f6f5fff6f6f5fff6f6f5fff4f4f4fff4f4f4fff4f4f4fff4f4f4fff5f5f5fff6f6f5fff6f6f5fff6f6f5fff6f6f5fff7f7f7fff8f8f9fff9f9f9fff8f8f4ffecebe7ffe8e0d6ffaa9e78ffa3975cff9f9557ff918261ff8c7481ff8b6e80ff867465ff918450ff958649ff817849ff447056ff26735cff325d4eff553542ff5d2f49ff54455dff426977ff42707aff537079ff727b81ff7f8181ff787076ff726170ff7e6372ff7f5e69ff5d5763ff3c5d67ff2b5e5fff595c5fff725d5eff685e64ff60747eff748081ff6d7476ff614b5eff6f3a57ff76344eff8c3e4effa5464affa7454fff894567ff623629ff612519ff69331eff7b512bff8e6a35ff997b3effa1863cffae8e3dffc38e39ffc3bc6aff7dedd8ff86f2e5ff94f3ebff83efdfff75bd92ffa63e30ffd83930ffe93341fff13452fff03161ffe93a83fffa7ccdffffb3ecff9f3038ffde6848ffe13a3efffb4c49ffec3456ffe65fadfffec8e5ff8e616bff61a6a9ff74bec4ff8ce0eeffd4e6f1ff9e8370ff425e5bff395f68ff54586bff6c5875ff845b81ff834e73ff832c57ff912051ff91284cff7b3728ff844216ff864917ff976319ffa46d21ff966630ff625c4aff536160ff536361ff6d565aff7a6369ff726567ff496364ff0f6d67ff106c67ff247076ff29767eff26767bff4b877affbcc5b0ffdad6ceffede9e3fffaf8f6fffcfaf9fffbf9f7fffaf8f6fff9f8f7fff9f6f5fff7f7f5fff7f7f7fff7f7f7fff7f7f7fff8f8f8fff8f8f8fff9f9f9fff9f9f9fffdfbfbfff9f7f4ffe9e8e3ffe3e4d8ffd4b0abff967e92ff877b73ff9c945dff998f56ff907c64ff90707fff91697cff896864ff8f8652ff8e854bff6e764bff387156ff267159ff285d4cff573642ff5a2340ff513e57ff3c6877ff386f79ff527072ff7b827fff858378ff80786cff7b7172ff7d6d75ff71686aff525d66ff3b5b62ff364f56ff65535bff7f5a5bff825a5eff837477ff8b827cff897d6cff81575dff7d3a54ff7f2e4aff973947ffae4347ffb1444aff98516fff734b26ff846230ff947434ffa37a31ffb07e30ffc98032ffdd883effeda459fff9c071fff3cf7dff80deafff5bb98aff755e2dffb74024ffd23835ffdd3844ffd9374affd23650ffec4c7fffff9ad7ffffacd5ffe6656dffd7533effe04249fff24757fff23d69ffee3fa5ffffa2efff8e5380ff636f6fff6f8859ff50cadfff6aeefcffa2bda9ff928f6cff7f7859ff4b584eff37575aff464e5dff625874ff776086ff695577ff712f55ff872248ff74243cff6b2d2dff863f31ff7e4325ff8e6020ff9b6d49ff8e6a4bff6a5449ff5f5959ff65474fff753f4fff7e6268ff735e67ff4e5c62ff507b70ff3f716aff256c6cff507974ff51756eff1e7f74ff1c968bff4d937fffc5b19effe4daccffe6e4e0fff0eeebfff8f6f2fffaf8f5fffafaf8fffafafafffcfaf8fffbfcfafffafafafffcfaf8fffbf9f7fff8f4f2ffefebe9ffeae7e3ffe5d9b9ffc6875fffae4741ff937898ff907a95ff856466ff828a6eff878a65ff7d685eff90697bff92697cff86585eff877750ff8e7d4dff5f6c4cff496953ff446d56ff155945ff5a3946ff6c2646ff47384fff44616fff426771ff556c63ff828068ff938a6fff827b63ff727269ff7e7170ff606763ff51595bff4c575dff3e484fff6d4b56ff82545cff895352ff936c58ff9a8171ff967b61ff805756ff81485eff7e344aff923c3bffab433dffb34647ff935871ff96792dffa68830ffbc902dffd98e31ffef9b4afff8ad5bfffab867fffabf71fff8c172ffea9450ffa13612ffb74020ffce5b38ffd23c4affcd4253ffc23b59ffc24777fff189bffff68fbfffc83d2fffcb4432ffd83d50ffad7b7cff757788ffb58dbcffffb9f9ffe086a2ff656366ff704937ff6c323fff474556ffc2fefcffa171a5ff826c79ff93834dff817546ff44453bff30393fff3d4051ff45657aff466b88ff4e5e7fff5d2e53ff661f3fff5f1f39ff6f273cff812d3fff7c3a38ff886851ff85776bff7c6d64ff6a4849ff712f4bff712748ff784657ff7e6468ff715d65ff696863ff787d65ff697768ff5d7061ff868369ff7e7b68ff337d76ff2a9189ff348e85ff84737aff9c878cffa98a8bffb2a898ffd1d3beffe2dfceffe6e3d8ffe9e3deffece4dbffe9e4e1ffeae6e2ffe9e5dcffe4dacdffdac7b1ffa9968dff91676affb3405bffb33f5affa34762ff907899ff8e7897ff75656eff477d76ff56877dff696d6bff8f6479ff916c81ff835c65ff795c4aff836647ff6c6348ff67614bff72614dff4e5045ff653749ff812a4eff683853ff4f5365ff5a5a68ff636756ff94813bffaa8c3cff96824bff597061ff446d5fff47655cff604951ff79374dff72364bff784654ff825158ff895451ffa36b37ffae762dffaa753dff885d5dff765765ff744f5eff884438ffa14226ffac4637ff955c70ffcb9b2effe3bd44fff1dc63fff4d063fff6ad54fff5a856fff09f55ffe27b31ffc0460dffc0421dffcf7034ffd49e3cffccb43bffc57a4affd86e97fff099bffff1a2c0ffe37a81ffbd2e2fffdd4148ff9f6c64ff77778dff4098baff5de0f2ffc8f9feff605e6eff9a4e2bfffa5d29ff6e392bff9498b3ffae9ea9ff569dccffc19cd7ffba6cb5ff91824aff7a6e43ff343836ff2a353eff284a56ff306676ff356d86ff3a5f79ff4d2c48ff5b1f3bff671f3eff772341ff7b2541ff83424eff846a6fff7e756eff776c6cff66334dff751945ff732448ff715b63ff7c636bff726265ff78755cff7f8060ff767b60ff847d57ff8e8460ff878162ff517a6dff288b86ff348784ff707b7dff95848aff967f83ff617d7aff42908bff458e88ff938559ffc88d44ffc58e42ff928886ff4b9bb5ff4198b0ff577689ff7d7386ff827586ff865967ffa63356ffaa3859ff93557bff8b7697ff897596ff617187ff308282ff21837fff4b787cff8c687bff896779ff81636aff7c5c4fff785847ff765440ff715a48ff745742ff7d4944ff7e304aff832648ff842d51ff66546aff5a5364ff6f5d52ffa58538ffb28c2affa58531ff69765eff336e5fff3d6259ff69404dff832d48ff852e4bff864659ff8b545eff885653ffa56c36ffb37423ffb27229ff915f57ff7a5a65ff725a62ff864c43ff9e452bffab4626ff9c5968fff2e264fff5ea6afff4eb6efff4d86dffdd792cffb9430bffaf340fffc14924ffcf752fffd59b34ffd3b132ffdac637ffe9dc58fff5e087ffea909bffd16457ffad2225ffd9373effe85642ffec5426ffcb7934ff73e5f1ffb9faf8ff69a89cff6e4b26fff25d2dfff25f22fff5961afffedcabff8f6091ffc554a7ff9dc0ddffaef1faffa4795fff907848ff605c3eff1b383bff1e464cff1d5057ff2a5e6aff3a697dff365562ff3e2b3eff551e39ff5e1c3bff792042ff793e53ff7c4b60ff756674ff7c7278ff665d6eff5c2b4fff701c43ff673048ff625c5fff7c6569ff766864ff787452ff838464ff837c54ff937c3dff9b8150ff918057ff5d7765ff2a8885ff318483ff5e7d7dff82858dff7b7f86ff2c7c71ff358789ff328587ff866d51ffbc824affb77d48ff7a7886ff3994b1ff3693adff596b82ff846576ff826271ff7b3853ffa34d56ffa64d50ff825983ff817496ff877294ff4d768cff537e7bff467f78ff1f777aff816c77ff876a73ff765d60ff805348ff81533fff823e31ff825448ff775844ff803b3aff873952ff8c3f5dff812147ff784f68ff665d6bff70564dffa27a30ffb38825ffa37a24ff6c6b50ff3f6e62ff3f4f4bff733f4eff873049ff862e48ff7a484dff835355ff84564eff935f3bffb4702fffb06b2eff8e615bff7d616fff6b5d65ff7f4c50ff9e4c4effa34332ffa64e45fff4e469fff3e266fff0d756ffd5973cffa73714ffc04c27ffc8652dffd2892effdcb030ffe7cc42fff1e466fff7f186fffaf38bfff4df70ff9e271affcd423effe5523bffeb4d1dfff15b11ffee8733ffffd993ff679680ff444326ffea4f34ffed3a48fffb743efffee09affe2bb81ffba9571ffe5c059fff265c1fff9bcecff5c8b7cff807456ff856944ff605441ff1d5a54ff166663ff205e5fff4b5968ff535767ff484958ff312a38ff3c1e30ff4f1e32ff794558ff7c5c69ff745a68ff6d5b6fff6f5f78ff5d5270ff552a4cff602140ff5a3246ff605b5dff7d676aff746a66ff757156ff858363ff837d55ff9a7833ffad7e31ffa67b35ff617663ff268988ff297f7bff3a7e83ff4e919eff3f8c96ff12797dff1a8a9bff1d8793ff796659ff9c7156ff956b50ff6a7188ff358dafff328caaff656781ff96425aff9b4157ff894551ffab704effac744dff7a6071ff7b7193ff867192ff5c6e83ff787775ff807970ff4c6a6aff767170ff907373ff7c5b5cff923d3aff9f3934ff8f3630ff814d41ff7d5a49ff7f474bff8c5666ff8e6873ff80455aff6e5364ff60676aff6c6355ffa17226ffb58021ffa17320ff6d6350ff40665fff3a5551ff824046ffa34145ff9e3e44ff6f484aff565248ff605344ff8e503fffae5043ffae5241ff89656fff68728bff596d81ff6a546dff825775ff8d596eff9c4d3fffecb743ffce7d1dffb14c14ffb55325ffbd5f2affc1672fffc76738ffd47b47fff9e168fff8ee77fff8f07afff9e566ffd98f31ffc14726ffda4b34ffeb422cfff4551effee7f37ffffce90ffffd687ffb86e2fffdb4934ffe4303dffe44c54ffde3c4fffffb0beffa06767ffceb566ffd8b836fff7e56effe3a6a0ff5b927fff608372ff846446ff876645ff78644bff2c685cff1c6b64ff366061ff575360ff5c5262ff4d4859ff292632ff2c212cff49333cff716062ff76636aff715f6aff6c5568ff6b5a79ff63516dff51243eff5b223eff593043ff75555dff7d676bff786964ff7b7460ff858367ff878261ff9a7336ffaf7720ffaa7928ff5a7667ff228a84ff238381ff228390ff288fa2ff15929cff097a8bff148799ff168494ff606769ff8a6854ff836552ff577485ff3488a4ff318ca6ff6a5f73ff9e304fffa5324fffa15d48ffb07c4cffae7f48ff906956ff816e8eff886e8cff7d6873ff897973ff8e796dff806c60ff84746dff92766cff8f5e53ff9d3337ffa42629ff973835ff815348ff7b5849ff775b57ff7d656aff896e72ff7e6c70ff676467ff606867ff666c62ffa47632ffb3771affaf7730ff6f6558ff3f5e5dff395f5dff8b4d4fffab4644ffad4641ff7c4d44ff4a5144ff384e42ff894b46ffad4a45ffb1474fff8d637fff637694ff4b7692ff5d6587ff736288ff7c617fff925c62ffa34418ffb35727ffb65e2affb76330ffbc593cffb6495affd66989ffe48c9efff5d879fff0ca45ffbe5c18ffca452dffd54a2dffe3432effe13a2dffd93539ffffaf7ffffacb88ffc26d3bffcc4626ffdd3353ffd1456dffdb354affffa1b6ffe99289ffc7936aff3e8f5bff7fa781fffdfac1ffe0c5bbffd34b9bff63897cff6e7460ff8b6549ff88694bff76644eff376859ff346660ff435f60ff5a505bff664e5bff502f42ff311e2dff2c272fff3d393cff60625fff70656aff685e63ff684f5cff6e5a6fff654455ff51192aff5f2137ff5e2d39ff794750ff8d6161ff845959ff726560ff807c64ff7a755fff8f683effac7648ffa2714aff5d7467ff488a7fff408a7bff0d818dff238698ff22899bff0e7690ff15859bff178196ff44696eff826753ff7e6853ff476e72ff4b809bff497f92ff6b5a67ffa33545ffa53440ffa25d3affab7f56ffaa7e4cffa16f3dff8c6180ff8d617cff8f5858ff957465ff947664ff986348ff907168ff8c7267ff915743ff9b3b50ff9b314aff923739ff765c57ff726156ff58655cff6d706dff7f7675ff687371ff5a7674ff597070ff606c5dff977035ffb1771affab6e34ff74675fff466365ff3d6165ff89565affad5359ffa74532ff83463cff5c544aff40493eff7f4048ffad444affb14456ff915c7fff6c7293ff4d7394ff466d8fff6b6991ff71698aff84616bffa07f3fffaf7245ffb14d47ffbd536affd97392ffdf7f9bffde859effde8094ffa23a3dffb43f2dffc64d30ffdf4228ffe0402bffdb3e40fff4757bfffe9b9fffdb7d7bffa53917ffdb2c3effd2385cffc93456ffd1337efffb9fb8ffb35d4fff996736ff6b9064ff38cec4ff9bfcfbffb67f8fff79acb9ffd2aef1ff637371ff6f6d5cff8a6654ff856757ff716556ff5f665eff616860ff5b605eff6d3f4bff7b2c40ff651935ff2d1e29ff262b30ff393d3fff5b625eff606566ff555c5dff6a5a5dff6f6160ff624c4cff581e29ff6b212eff652830ff873f44ffa44e4cff99494dff79615eff877360ff78675cff876058ffa0777bff8d6967ff687666ff7d9772ff738d72ff3a727eff597594ff537596ff1f7493ff20839eff2184a0ff436d6eff8c6e4cff896e4fff4f6763ff826b86ff826b82ff7b5759ffaf4e2affaf492dffa1613effa18a65ffa08765ff976a3bffa03f57ffab4663ff984641ff94674cff947251ff916042ff976e62ff927772ff905958ff8d5674ff8b6084ff80495aff516866ff507271ff3b6c68ff2b7667ff4f8177ff4a7c73ff3a7e7bff397f7cff4f7366ff926232ffb06615ffaf6432ff74665fff456667ff366063ff7b636fff94677aff9c5d63ff85343cff8a3649ff7a3a48ff802f4fffaa335bffb1375eff905579ff806488ff6d6b8dff3c698aff30688aff4a6789ff7b6272ff809f6bff969885ffc96d8affd4738fffda7f97ffd57c8cffc05c63ff9f362dffb74d33ffcc6b48ffb97a55ffd35356ffef6f74fffb9899fff49189ffd54a2affd52f36ffc64b5cffc7385dffc92f6bffef8bc9fff4a6b6ffa67958ffe83722fff32a29ffc8a576ffc5ebe6ffb499c8ffe85796ffe18193ff5ba7a1ff567166ff69665bff85675bff89675cff7b655aff6b6559ff71675dff6f5854ff862337ff871b3bff721c37ff2d2128ff21292eff373b3cff565c5bff596462ff535d5bff65615eff69625bff675855ff662b32ff701f28ff71262cff964037ffaa4441ff9f4a47ff875f52ff866f65ff836a62ff856671ff907382ff816b79ff7f7f69ff8b946aff82916aff5b6b72ff636d91ff5e6c8eff366e8cff26819dff2382a1ff576e65ff90704aff8f7149ff7e615dff90627bff8f6479ff89554effb45121ffb45022ff9d6343ff9b8c68ff9c8d6cff906753ffb13051ffb53057ffa1434eff906747ff916d4aff886751ff8b7068ff907672ff826b72ff7d6281ff7b6483ff70637dff427070ff257775ff21756dff197c6eff158171ff297e71ff2e817cff27827fff3c7c70ff9a6435ffae5d13ffb55c1aff71625dff3f6265ff2b6067ff6e6a7aff886f82ff8e6b7cff8b495cff922b4bff94264aff9b2854ffac275effb2275eff9e4f7bff8d6085ff7c607fff656388ff31648aff186585ff695c6eff6be2bdff91d7c6ffc18499ffc16271ffa14346ff943128ffa5472fffb85e42ff9f7459ff788478ff7397a5ffe3aacffff68b89ffd14f35ffc72b25ffba4555ff956c66ff7a7379ffd781b9fff8adceffc3735aff9f4b42ffeb2c3fffe92c38ffee6a82ffeba8a7ff6bb6c0ff58cddaffc7cff6ffc27064ff54665aff5a6b5eff615d53ff7b635fff826764ff745a59ff7a5d4eff7e6455ff794339ff891a32ff891c3cff6e192dff2b1f25ff1e363eff373c3fff564e52ff5c5b5dff595554ff63615aff69645cff635c57ff652e30ff731d25ff7d282aff974032ffac4d5aff9c4a48ff895845ff856a67ff826362ff7a6578ff7e6e86ff736b7fff847f62ff9c9157ff938d57ff725f55ff6c6787ff655f7aff466377ff287b90ff287a8cff7a6555ff976945ff986c43ff924f4aff9a5872ff985770ff944745ffac553dffaf563aff935e50ff95866eff97876cff846160ffaa355cffae345dff974154ff81695cff836f61ff6a685cff7c737aff87777dff6d7182ff6f6c8eff766c8eff5e6b86ff36737dff197879ff0e706eff107b72ff0e8176ff107164ff2b7974ff2a817bff39766bff936349ffb0622fffa7540aff7b5952ff41636aff1c555fff50647fff837087ff826b80ff84556dff8c3d5dff97264effa22154ffb1245affb0205affa63861ff965d7cff8b5b72ff71516aff506480ff336178ff565066ff77e8ceff7ed9c1ff825561ff832c25ff96432effa15940ff966a57ff6f7b76ff6798a5ff8ec8dfffa6d7eeffa5adc7ffa1251dffae3646ff8d5c61ff766c74ff5e8ba5ff96dfefffc4c8deff785c4affc36772ff5f818bffa891adffffcbd0ffb4738cff61bd79ff47c08dff8cf8ffff7aa2a2ff785852ff735945ff78553fff6b5148ff656a6eff5f6b70ff675761ff905e42ff99602fff944327ff8c1a34ff871a37ff6a1a2dff293841ff1e525cff384651ff5e3d4bff683b4aff62434cff63645cff6d675fff625e58ff682c2fff761f25ff822826ff954b48ff9c6276ff8e5d62ff8c5b5bff896c77ff84636aff65657eff5a7592ff4b728cff877d5effad8a3fffa07e34ff825442ff915961ff894d51ff4e5967ff296b79ff2c6a74ff7b5c4bff9d573fff9e583eff9a3f44ff9e3c65ffa03d60ff9b484fffa26d64ffa26d62ff855855ff8e6d76ff956f76ff825e6fff975674ff9e5874ff88465eff5a7180ff637e8cff486d73ff43768dff5e839cff47758cff387b93ff4c839dff3c6f88ff277b86ff158684ff047575ff0a747bff098188ff12706fff4c6666ff646d6eff596864ff7a6662ff976f62ff9e5e45ff764b52ff43627dff205a71ff395a77ff756686ff806984ff7e5f78ff8b6173ff925063ff9a2e4cffb73a54ffb93652ffaa3241ffa95b49ffa2624dff7e4945ff766051ff6f6b50ff63495cff82ceadff799173ff8d4234ff985848ff84665cff6b756eff68979dff8cc8d6ff98d3e6ff97cbd7ffa59492ff902e38ffa14853ff8a5a5bff5f7890ff85cce0ffb4f1f5ff9ecdb6ffa04a53ff677b81ff428895ff22d4d6ffaafbf7ff6e9694ff509c67ff35b18fff77ede4ffbf86b3ff97687fff85544dff874d2eff804d35ff705a53ff3e7076ff436f77ff6f6a68ffa0682dffa3611fff944d23ff8d2138ff871a37ff74283eff21535bff1d575dff394b55ff6b314bff6d2848ff673c4bff716059ff6b675dff685d55ff68282aff792327ff7d2b2bff866070ff8a697bff856272ff7f677aff896f7fff826879ff457088ff397a97ff37758fff8f754cffb88125ffae7a20ff8f502fff9e5148ff9b4c40ff565151ff2b616bff2c5f67ff785148ff9f4d3fffa34f3eff973445ffa42b63ffa22b5eff984a5dff97746fff97756fff855e62ff8e6378ff966376ff855b71ff8e6179ff966680ff785d76ff35758eff39829aff2d778eff1c849eff2d86a3ff307f96ff238194ff1c889aff22828dff19858aff0b8a88ff068184ff0a7784ff087d8dff1d7884ff625e67ff775d63ff785f60ff7b6a66ff8c7069ff8d6e6bff695c74ff3a6180ff226283ff4f5f82ff6e6488ff76647fff7e6679ff8b6f7aff906e74ff9a5056ffb9424affbd4543ffb95233ffb3632dffba702dffa2692fff926a34ff906e34ff865d49ff7b4a2fff8b5747ff77665aff5e706cff547c83ff70a8b3ff8acad4ff90c8c7ff94978cff802c30ff933b45ffa4444fffaf3b4fff9c4a69fface8eeffa8d8d2ff625044ff925a60ff494848ff25b0a6ff61f0eeff95e8d8ff41946aff434f46ff414c41ffb2f9d9ff52a299ff6eb7cbffae6789ff865149ff8d4e32ff805545ff665e56ff3c6c6fff537172ff796d5fffa26b2affa76a22ff92562aff822438ff8a2c49ff633f51ff20575eff28575dff454f5eff672547ff742649ff703346ff73534bff75685bff704e44ff651c21ff772024ff6d323aff6a6175ff7b6a79ff71677aff6d6b86ff856f88ff716c84ff316e86ff3d798cff447180ff916840ffaf7a37ffaa732bff944d20ff9d4f3dff994d38ff59453aff2c5c66ff2c5962ff6d3a3eff9f473effa34841ff882544ff9f245cffa1245aff7f4f64ff8e7172ff8d7473ff795d67ff8f5e75ff946176ff86546fff846782ff906c8aff616983ff257693ff167e97ff1b7692ff1e7b97ff26839fff1a7e94ff1f8491ff1b8c96ff0b8481ff0e8684ff0a8985ff098789ff097e8cff097f93ff1f7485ff6d5b6aff7d5661ff7f5058ff86686cff8d726fff7d6f74ff556c81ff376380ff226382ff5b5c7cff7b6785ff776078ff796777ff89737dff847172ff95655cffba5551ffbf4d3cffb95b2dffb86b2cffba7326ffb17725ffa1762aff98762cff916f3fff756559ff617069ff527c7fff669fadff87c6d3ff89cbd3ff82969fff7c2d2cff813544ff8e3f4eff9e3b53ffa4335bffc85b91ffef96c9ff787c75ff9a4a54ff4d494cff494249ff2d3e4cffa8efcdff3c957eff326459ff464a52ff314655ffbdd2dbff41a8bdff39c7c2ff7fd7caff997c6dff7c5349ff89604cff7d6a5cff686459ff636c69ff777064ff846b53ffa8762affac7b26ff915f2cff7a3749ff72485fff4d4a59ff3e5961ff5c5c66ff554e5bff6c2444ff802443ff78293bff75403cff774d3eff6d1e1fff691922ff76212bff603444ff556376ff606e80ff3c6882ff486e8cff5e7796ff326f8dff2d6679ff6e717bff686664ff8c6144ffa27759ff94654aff95502bff975f3fff905c39ff604538ff2c5c68ff2a5962ff5e2c3dff983541ff93323eff7b1a46ffa2215fffa0215dff6f4e67ff84707aff896e79ff765a69ff916477ff8f6c7dff7d516fff527692ff687d9cff41708cff1878a3ff0b82a6ff137695ff5b7593ff72809bff347888ff457780ff67808bff2d797aff067c71ff0a7f79ff057e7dff057e90ff09879bff1f778eff7a4c5fff9a455aff924254ff785e69ff8d6f78ff7c6c76ff5b7485ff697f8fff577184ff6b5a61ff966b5fff90655eff68676eff647a7eff6c7e7bff7f6a58ffa2644affaf5f3fffb16431ffae7537ffb17d32ffac7b2bffa77e31ffa17e35ff8e7238ff567c7fff689eaaff86c0cbff85cad0ff93cacbff90a8a4ff663c47ff775562ff895d71ff963962ffaf4d80ffe98cbcffed92b1ffc75261ff6c4e54ff3e3843ff363e49ff395267ffabbdc4ff588564ff508183ff4e99a4ff4585b4ff95a8acff597c9fff2cd0d1ff57e6eeffb6a382ffa27e63ff846956ff83735dff7e7262ff776b5eff7f6c60ff856d5dff907351ffb28427ffaa8122ff936c34ff684f5aff5c5060ff54515fff6c5d63ff705e66ff68505cff7e1f3aff8a223dff7f263bff763034ff762123ff6d1c21ff6c1d24ff74242bff653541ff456875ff337385ff1f7082ff34718cff317c98ff0e7790ff5f666fff876d6cff82645dff856557ff947562ff8e6a5bff835d46ff8f6944ff8e6740ff4f4d4aff285e6aff285a63ff5f3247ff972640ff91253eff821945ffa52260ffa3225eff813e64ff82677bff8e697aff775f6cff89707aff8e747eff79677bff2f7d9bff3f82a4ff2e799cff1581aeff0689b1ff247898ff7b748eff87778dff797381ff6b767eff827b81ff6f777aff10796fff0b746eff097773ff088494ff078b9eff1e8493ff8a435bffab3153ffa93455ff8a5b73ff8b667cff896877ff7b7b85ff888a8aff8c8a81ff8d7058ffa96f40ffae733cff80776eff448181ff3f8581ff707664ff8e684aff986b43ff9e703fffa28041ffa38641ff9e8340ffa18542ffa08945ff907a44ff87b4b9ff86c0c7ff8dbfc2ff90afaaff75625dff6f4c52ff6d7577ff5e928eff65959bffc688b3ffe692b4ffcf717dff944148ff3f3a3cff413d47ff2f3943ff8597aaff95a192ff315545ff508792ff3b9cadff55cddfffb9f5faff655092ff8a4e8affc7d4d1ffb7bca9ffb69982ffa4866fff846f56ff7f7661ff827862ff7c6e5aff856756ff8e6c57ff997036ffa87e1dffac872eff8b6e45ff5b545fff5d5668ff5f5362ff6e5257ff725c61ff77424dff841933ff881e39ff7e2333ff6e2026ff761f2aff6b1a26ff731b24ff73242cff6b3440ff3b6469ff11727fff126b75ff1d7281ff1a798fff177480ff7e6159ff8d6862ff87615aff7e655cff85726cff816c69ff6b6151ff8b6b4dff836749ff38585bff256069ff275c66ff663d4eff932843ff8f263eff8d1b43ffa3255aff9f265aff8e2f59ff8b6174ff906475ff7d5e6bff86737cff8a777dff667583ff237fa0ff1783a2ff167c9bff0f80a9ff0686adff357694ff886f80ff917483ff98686dff886f78ff8e7479ff896267ff396d65ff167261ff0d6c62ff08828cff048f9cff1a868cff8c4d60ffad2b50ffb0234fffa24a6aff906275ff915d6aff987c7bff978e84ff988d74ffa48251ffb37934ffaf762cff93795eff53897fff2d817aff4e7767ff857259ff8c6e4bff847043ff96824aff9b8748ff8c8144ff948849ff9a8b47ff917c4cffa0aab1ff8ba49dff72665aff623f3fff68696bff628886ff3c9f99ff33c6bdff69ece9ffc3b9d0ff983b45ff4d4143ff35353cff3a373eff323442ff86909cff54725bff356268ff469fa1ff3ba2a4ff89ebf3ff79acb0ff41a2ceff7196d5fffcb7f4ffcca0beffb8a599ffb39b8aff9c8575ff7d7156ff828062ff807b60ff796954ff8e5d43ff9b6335ffa06a1affa88039ffa0814cff726351ff545e6cff516380ff5d586aff704e57ff7c545dff7d2f3eff881932ff8d1e3aff781b2eff631b28ff682039ff5f192eff6f1b24ff76252dff6b353dff2d625eff097878ff086c6bff296f78ff617c87ff576b6eff815e59ff8e6e75ff886368ff6d6968ff6a767cff587279ff42645fff656f60ff5b6a5eff276163ff246a6eff28666cff6a414bff8c4346ff853f42ff872642ff97455dff96455fff91264dff8c576bff8f5e6aff7f5a64ff82757dff8a747bff557983ff1c819fff0a89a2ff0a7a96ff08809fff078fabff3e718dff906a72ff957276ff995957ff9c465cffa25d64ff914c56ff6e5b49ff707e52ff2b5d49ff097f7dff069698ff178282ff80515fffb12d52ffb41e4cffaa3054ffad5864ffa0545dffa66e4bffa98a5cffa98b5affa78743ffb88b33ffb7832bff967652ff788672ff5b8776ff27746eff61797bff7a776bff64664eff67765aff81835aff6f7549ff837e48ff91844bff85714cff9b626bff5f3032ff6a5250ff647873ff459789ff28b7a9ff54e9e0ff77f3ebff7aebe0ff537575ff2e3f4aff3a3640ff37313cff4a5766ff96a6aaff6b7a6fff41787eff328a8dff288697ff73d5e5ff457098ff259dc5ff17a4d4ff44e2fdffdbc0caffd6b28cffb09d97ffa9968fff897c7aff7d7459ff858760ff83815dff876b51ffa14d27ff9f5118ff9f6832ff917c52ff877756ff6e6e64ff3e7084ff406d86ff556078ff755463ff784b57ff7d3b4bff8b1d3bff891b3aff791935ff661b39ff611c3cff5c1a34ff6e1c28ff76252cff6d3539ff237168ff077d72ff057268ff656d6dff817472ff76685fff7f6670ff89707fff876676ff567481ff3c818cff2f7c86ff2e6b6aff467571ff386f6aff236767ff257372ff277175ff5a524dff825649ff835649ff804147ff915460ff8c535dff8a4253ff8d5663ff8d5b62ff835a62ff85757bff8b737cff64757fff1189a2ff088fa3ff047d93ff09839cff0892a4ff2a7f91ff906a69ff956f6aff995e5bffaa314fffb73d59ffa73e4cff886237ff8d7734ff7d7642ff128680ff06988fff149188ff8f525effa93256ffb9234dffb5364effbe4a4effb84f4affaf6d37ffbe8027ffbb8631ffb28935ffbd9427ffc39423ff9c7c4aff908662ff918f6dff577a77ff167b8bff31818eff477270ff416e66ff4b7e6fff5a7558ff7c724bff8e7546ff8b6d50ff744048ff805755ff856859ff489d80ff4fdbc6ff73eee3ff78eee4ff81d8bbff255d46ff2b6368ff327e88ff2b3d58ff7b91a0ff93a19aff384c46ff3c8080ff238185ff38a2b9ffa0f0f9ff599dadff5f446cff58788aff86f8ffff93a792ff4dd7b1ffe2d2c8ffaa9297ff97888fff897f80ff7f7658ff878557ff89825aff916133ffa44716ffa75026ff926344ff877557ff877960ff5a6f73ff256d85ff3c708cff51667eff6e5464ff7a4e5aff774253ff861e3cff891a3cff78193bff651b40ff631d41ff651c3cff6a1c2cff74262aff613738ff117466ff0d7e6dff11796aff7d6b60ff8a7066ff84665cff72697bff827083ff7a6c7dff2e7482ff20808aff0e7a81ff286b70ff357776ff246f6bff1f6c66ff257870ff24746bff445b4dff7a594cff785a4aff62554bff895d5cff8b5d5aff6c5051ff815e67ff865c63ff7f575cff8a7177ff8f7175ff796a76ff0d8999ff0891a0ff058089ff0a8896ff04919cff11848aff866c6cff936c68ff916463ffa83048ffb62a4cffae3540ff9c6c31ff977525ff977d3dff42897aff05968fff159283ff855d62ffb03557ffb32742ffb43f43ffbf484cffba4b3cffb9652cffbf8027ffc07c16ffc28d22ffc79a23ffc69a21ffaf8d38ff9f8c60ff998d62ff868779ff3e828eff0c7f8eff187b86ff2d7978ff327871ff4a7260ff827655ff8b7147ff8e684fff945554ffa2594fffb04d41ffb7bd8fff84edd1ff80e0bfff43845cff1b514cff24837eff29a299ff1db6afff87cbdaff6f7f6fff335f62ff2d7469ff1d6f5aff59c2b9ffb7faf3ff3d88a2ff6b3967ff844682ffd06fc4ff7ba4b3ffb55c85ffdb9896ffaea3a7ffa98897ff987f91ff86717dff807258ff95874bff997b3aff97571bff9b3c28ff97463cff7f584bff7a6f60ff6c7165ff296171ff346d86ff586788ff505f7aff605d6aff65626bff5f4c5cff7d1e3dff891a3dff741a3cff68193cff701c3fff671939ff5b1b29ff622329ff2a433eff1e685dff597976ff527367ff7e6452ff906e61ff885e54ff6d677dff71758cff55728eff0d7681ff0a8186ff087e83ff25707bff297786ff207080ff196460ff1d6c60ff1a6657ff285b48ff5f594cff60594bff3b5f4bff8b6e53ff866e54ff445d4eff686879ff746879ff6a4e57ff905362ff915964ff875a66ff1c878bff129298ff057e79ff447f8aff5b8795ff1f7b7eff5b6870ff88656eff7c5e63ff9b3f3cffb8363cffa8382effad7229ffa97c21ff9d7f34ff5c857cff0e9393ff138d82ff736368ffa2557effa3364dffad483fffbc6257ffb55741ffb25932ffc48152ffb97b33ffb57a13ffc4911dffc7951dffb78c27ffb08b4bffa98855ff8e836fff75888cff49838dff17798aff3f7d7dff4b7f76ff4d7062ff7f715aff8f7653ff8e674effaf4642ffd34e4bfff27974ffe9a986ff78a171ff224b3eff256967ff209486ff17a89bff34d8d4ff76f3f4ff53c7cfff357272ff1c6d5fff0d705cff29a995ff85e8dcff347286ff58a5a3ff8c4286fff4a4e4ff8b9faaff2badc1ffb2ccdfffddacbeffb8919dffa6808fff957d99ff85647eff896f54ffa98931ffa27b22ff995821ff932b36ff893744ff784e4dff556061ff2d5b67ff305f74ff716287ff6e5e82ff5b5d78ff4c737aff427376ff4f5663ff86213fff851c3dff77183bff7e1a3bff841a3eff6e1a38ff4b1d2aff39262cff14413bff5b6d6bff707372ff726d6aff806256ff8b685cff875f55ff526d7fff4a7b8eff21768bff047a80ff0a888aff058080ff1d7488ff23809dff1f778fff16625fff176255ff175e4eff195847ff355a49ff345948ff416245ff91854eff91834cff476c59ff3b7688ff44798eff4f5667ff973657ff96405cff87495dff298487ff219295ff1d817cff72787dff857e86ff687980ff4f6275ff77606fff7e5d64ff9a4b38ffbd4824ffb64525ffb9751fffbc821effb68033ff628e8cff1c97a0ff108e94ff696b7cff866788ff945b7fff975952ffa37864ffa37964ffa26850ffa57a5effa9865effac7628ffbd8218ffc98c17ffbf862cffbb8242ffbb814effa2826eff8c8b82ff89938dff668382ff637f78ff7f8a6eff798066ff827564ff8e7d63ff8b7560ffd77415ffed8e1aff564523ff77302bffed4f3cffde342aff632112ffc87451fff7b042ffad851cff73562dfff3e858fff2df36ff735b21ffae7756fff36b51ffbf3c39ff57554affe6e5a5ffeeee9cff496745ffaf746cfff6c882ffe8982aff723026ff66abbdff85d9eeff35647bff866f71fff1a960fff09d32ff572a23ffd5895efff485abffa14865ff8b5052fff3933efff4af6aff514a54ff6d90a4ff62e8f0ff47c3d5ff70673cffa16f91ffe39ccfff5c626fff4f4d5fff695a69ff706661ff3c5445ffa54062ffed6fa4ff9e4a50ffb15c5bfff79a3efff5b155ffc03940ffb18fa6ff93d0e7ff7d9ab2ffd8615affe88dc5ffa2d9f4ffa08589ff401c0affad914dff46956bff293520ffa33c2bfff14d3bffca361fff633a1efff2da5ffff0de31ff795c19ffb49f47fff6ee56ffa69c39ff51463effe67767ffed4f4dff643633ffa1b79bff89f2e4ff1bac9dff6f433cffe3c7b8ffe7c99fff4e3e33ff718a99ff82dfeeff5891a6ff625e66ffe8a26cfff9af45ff754228ffc88354fff7727bffb73d48ff834f52fff49b3efff6b95cff514b51ff759aaeff6aedf1ff41a8a6ff7d7348ffb36e9dffe56fabff4a4a4dff644761ff777078ff6a5843ff495955ffce4979ffe8719fff7b414affdf864cfff9be58ffda7739ffd0698bff82d5eaff8acee2ffaa6c74ffea6055fff47395ffb37da3ffdc9150ff2a231eff2d271bff69a274ff3a8f67ff3a2c19ffcb5738fff48526ff935208ff917839fff7ec5affdbc62aff5f4728ffc0d176ff65c586ff2c4b3cff9f7061fff26460ffa14041ff576f67ff57ece6ff1ee4dcff2f4641ffa0b0b6ff78e9eeff246c6aff765f6bff65d8deff52a9afff495056ffdb9672fffab45bff7e4d29ffb5794ffff5797dffcd4a54ff7d4c52fff69e41fff7bc5eff544e57ff79a5b8ff71eff2ff429d93ff867e5bffca7bb0ffd6689dff425252ff744663ff868086ff555138ff83545effea6295ffc95e78ff9b6160fff6d752fff3cd5effd04c44ffadb5d1ff73eaf7ff6d829dffea6d55fff2676fffdb646effbd5f57fff6ca63ff423d38ff2c231cff373522ff8eb279ffbb9c47ff612e0fffe9912cffeb930bff6f420effc6b25bfff1ec69ff5a7a58ff51614cff4dd1a3ff29906eff464443ffc48074ff7e5359ff253f3eff76cac3ff2af2efff0a8587ff87747cff3becf2ff13adb7ff754c4eff4fc9c1ff47bea8ff243d3dffcc877ffff58b92ff6f3132ffa0714fffe9aeb2ffb26973ff704e53fff7a345fff4b760ff4f545eff81b0c3ff7cf0f4ff3c897aff7d8a71ffc5b3d2ffac688aff4f5d63ffbb5382ff9d6f78ff4a5d48ffcd515cfff37287ff894b50ffd39c65fff9f171ffc68736ffd86f8cff83e1f3ff5dbed0ffc57a6afff38d5cfff1747affbb5a58ffde597bffeea98eff3c2927ff966938ff845513ff765329fff4da39ffb58c18ff783915fff3a325ffd58714ff534524ff8cd1b7ff16c2c6ff2f4248ff5a9e7fff33c8a0ff275649ff567168ff406c6eff254448ff5c8486ff43eef2ff12b6d0ff544348ff55deeaff24dde7ff3f3434ff5eafabff55d4bbff18534cffae8582ffee67abff822741ff927a5affb9dce1ff638c9bff645055fff6ab4dffeda652ff445c6dff8ab6c8ff88e7eeff426b5aff60a394ff7eecf1ff496a72ff655f73ffe669abffa65356ff576966ffed6168ffd56357ff83585cfff2d05ffff5ea68ffbd403cffe1b3c8ff8cebf7ff7b8093fff8c457fff8de6dffc86966ffcd5b66ffed6aa7ffd67862ff4d390cff9a6929ffebbc2dff82550dffa77e24fff2dc34ff906f17ff94542cffaeba6eff2b6f51ff4b5a57ff29d6e4ff1198a7ff464249ff4fcba6ff279d7bff394548ff488d81ff366163ff234c53ff76d7deff1be3f6ff1a4c60ff7dadb7ff2bebf7ff285e69ff737f84ff5ad8c3ff1f594aff84847effe571aaffa3375aff7e7b5affb5e1e1ff67a4afff5c5558fff7b051ffe9a34cff456475ff92bbccff82d9e1ff607152ff5bb9b4ff63edf1ff256362ff925a84fff179baff7f5342ff836f75fff7767dff9e4e3effbc767ffffceb7affcf9a36ffe95d53fffcc9aaff8fa5c1ffde9461fffaed6bffc9b46affaf7563ffe66994ffdf7a80ffb19d8cffca9c22ff523a0affad7b29ffe6bf30ff40401bffb08e32ff6bb16aff384122ff707d5fff3eb98dff315441ff558e97ff3ed2e7ff355765ff617b6aff32cda4ff256c58ff477d71ff26d8c1ff178075ff6998a2ff34ecf6ff0c8fafff7e6876ff35edfaff0c859cff7f656bff4ca39fff2d4645ff67706fffcba0adff98626cff64684effcce2d3ff8bb6bbff515959fff7b556ffeba350ff446c7dff9bc1d4ff7cced8ff717647ff58c9cdff53e0e3ff316767ffbf5b97ffe472aaff536b50ff8cb0b8ffec9290ff79575dffea6dacffeea591ffc7493ffffa954effeaa954ff9b5f62fffbd456fff1e675ffa07d62ff81c298ffc69c96ffd3936fff5fd8dfff6f5419ff46925fff172e26ff6b8056ff20b291ff293623ff6b825bff369f70ff473b22ff82a176ffaabe75ff59462cff68b1b6ff52adb7ff414249ff63bd98ff24c49bff365552ff3de1d2ff1cdaceff295a62ff75e0e6ff20bccdff4d3e43ff69daeaff1ccce4ff633536ff5a8d92ff3a4e52ff495853ff80d1b3ff479c7cff4c4731fff3ec93ffbead75ff535f5afff9bb57ffcf8f4aff457385ffcfa8ceff7c9fb7ff7c713dff64acbeff39abb7ff576c70ffe466acffb06175ff3b8a84ff5fe7eeff629584ff9a6692fffa74c7ffbe3e52ffe7525cfffcbe56ffa56949ffee8349fff9df61ffba9c6cff85a77eff88d2a9ffce9648ffd5d6b0ff84e1e1ff14403aff0f3f32ff14937aff183732ff468674ff4ea48fff531a17ff969168ffcd7226ff724122ffecda4effbfab2bff635746ff6dcacfff40868dff5a6b5dff30eed9ff249481ff53978eff1df1eaff20837bff81a69fff38d6c3ff1c524fff959ba2ff33e1f0ff324440ff7a888bff4f7070ff1e4a43ff88c7a9ff58caa3ff55472ffff6eb61ffdcc548ff55675cfff7c15dffa47c3aff457a8affe76fb6ff7c4e78ff917f45ff727f8cff25565dff737681ffef76bcff755947ff2ab5bbff6cedf1ff4c6461ffc180c3fff779beffb62a46fff86aacffdf8a60ffaf5f65fffbb347ffb08562ffb47c77ff8bdbb1ffb7a767fff5cd48ffeedd7dffc69877ff1d9097ff1a1b22ff123b33ff137379ff1a2a2cff9f3b47ffc2221eff6c2417ffe58512ffca6706ff90622efff6e646ff9d6e2aff637e7aff26ced8ff3c5e60ff64b7a1ff15e4d4ff406662ff52d3c2ff36b499ff465e5fff77dcbfff36917bff84544cff4fdac5ff246651ff82847dff39e7d8ff0d564bff80bca3ff5de4c0ff495a3efff1e35cffefde5bff556a61fff8c66bffa27e3eff4f869dffea74bbff8b556fff9a884eff7d868fff2e5557ff91769cffe677b5ff507b55ff40d6daff64c5c0ff5684a0ff89e5f8ffa2536fffe4418efff873c5ff694f69fff1935effe8ac62ffa06880ffea66a6ffc79f7ffff1b53efff8ec64ffbca96bfff65c50ff12212bff2b2b2cff221d1aff102828ff627387ff4b1222ffaf2832ffbb2442ff783324ffef8f14ffa3520affa96c43ffe43d38ff7c3a2dff3faeafff20b7baff545858ffafe3caffaa8459ff677e76ff3bd6afff346652ffb6c09bffe7de75ff563828ff91bea5ff2da186ff92685bff39f2edff208677ff77bcaeff42f2e9ff22543bffe4d25cffe8d856ff5a6864ffe9d8a6ff988765ff479bb9ffdfaadbff7e5b58ffc8b252ffa59d7aff30776cff79d6edff828799ff459a78ff63e7d1ff4f7965ff58b8deff5dd6deffa73a51fff565c4ffb75e8dff5897c3ffb4dbe0ff9b8087ffdb5799ffdc748fffe4933cfff9cd4effb8ca88fff06b4cffec6f63ff362d20ff15100fff6f4f2dff7f5514ff3e0f1cffc21f52ff4b1329ffb9285fffba2655ff88402affed870bff8d4915ffc75556ffc23736ff69584cff3fadbbff41434cffa9744cfff2a711ff775648ff67bba0ff41a783ff77816dfff8f167ff89813affbc706bffb886a5ff5c392dff6ee6e4ff1ca69dff739c91ff4cf5f0ff266952ffcdb453fff1e259ff616b6cff66eaebff21919cff24b2cfff5bebf5ff44604cffece269ff97aa63ff428f8dff5aedf8ff3e7d65ff2bc2aaff6cc7a3ff727176ff85e2f7ff618e91ffe6415cffeb74a5ff67698aff5ddcf5ff7b96b9ffd39a73ffef7f9dffdf9760fffbb63affc1946fff5be3c2ffa1b3a3ffe36b5eff278062ff214835ff36260dffc38f21ff936219ff320e20ff7d113cff52202fffbd2a63ffa1244aff954f2bff373434ff5f3f32ff4f4a51ff3a3c36ff675e50ff37474aff64444bffdb9730ffab6b2eff727275ff3fd0a8ff466653ffe0df93ffcac06aff864f4bffe253aaff6d363effa2a2a8ff5db7bfff5d7363ff9cf0e6ff64866affbeac58fff7eb64ff65676bff56e9ebff1c93a1ff25bbd7ff4de9f2ff597b5efff6ee77ff86b167ff4fafacff53ebf7ff418a69ff42e5d0ff5ea676ffbf5c9bffd58fc5ffa1454cfff96678ff885e66ff52c6d7ff76ccdfffa09886fff7bf4bffc8a06efff8d751ffdfa671ff64dfc2ff55dcd2ffc9666dffe27c86ff143b2dff25896aff534345ff371e0effa23a1eff8b191aff351a21ff19545cff3f4345ffc32a62ffa62545ff684840ff316250ff695a4cff336565ff566956ff688d79ff27a38bff715c5eff414b50ff564a53ff6fb29fff549c81ff818f98ff4adff4ff43455bffed5d92ff9b3260ffad7a7dff86d6e5ff2d5756fff9c269ff9d6e1dff8d9667ffb2ad60ff625860ff57d3dfff1c798dff2cbfd2ff41cbddff718c65ffe8e37fff608658ff44cdb8ff36b4b4ff4fbb93ff48eee4ff746f53fff170c5ffa54961ffe54553ffe2737bff519097ff56eae0ff6793baffe6c978ffd2a766ffe9e26fffe0b872ff69cae1ff4ce1e0ffb9666cffdc7e87ff59c1dcff5e1818ff20221eff8b214eff831e47ff341014ff822722ff2e5b4eff1d3938ff37555aff532d38ffc52965ff932945ff577a63ff457963ff677369ff16b4bbff6d7462ff3ad8c4ff49867cff545c5dff4b655cff816c7affd7579aff655365ff70d9f1ff448baaffc2494cffe74151ff903232ffbad0e7ff4e3e43ffe8ae59ffa96d11ff576158ff5b6764ff594958ff586e77ff1a3b4dff3bbfb7ff2f938eff68744cff5f7370ff38705fff57dfbcff35875bff32dccaff5faba0ff9d707cfff26abbffa54942fff6626cff71666aff52dcd9ff7dabb0ff31d3efff99bca5ff79d3c6ffd3cf7effbd9ba8ff50e5edff88968affe5808eff47d8e4ff71d4ebffd12c34ff902e1fff2e0f0eff871e47ffbb4f2dff47200cff176258ff205c5cff2f1f2aff841c41ff89414affa42b59ff683f3cffc26f31ffaa6122ff6a9aa6ff229ac1ffa09580ffe8ca4fff926760ff37b693ff5f6f6dffbf5795ffbb4b77ff9aa59cffecd388ff964d42fff64b52ff93352bfff64a5bff9b2f2fffb29480ffbb5d3eff573e3bff5e6568ff4b3b4aff5a6a6fff1f3c4fff44c3b0ff2f968aff646a44ff576f6fff38946dff5ae4bcff478451ff48ead7ff559770ffd45fa0ff994959ffd94750ffc87070ff659aacff9bcfc6ff5bacd3ff67dbdaff6cb9bbff48e1e0ffd77460ffe7878aff5ac8bdff56ebd6ff65dde2ff7acce4fff276ccff74171affd66419ffbc5d0eff451c0bff7a3c0cffce6a09ff5e1d1fff1f1c1aff513727ff63322effac9761ff8c6e73ff8d3739ffb15854ff5e4741ff836559ff6488bbff885780ffdcb869ff8a974fff718284ff3e7871ff996d85fff5479fff8f6f6efff8ec5aff8e6e37fff57b3affa5501effdf4647ffbd3134ff8d5774ffea4998ff5e403cff515a5eff373041ff4eb89dff1d3e4fff63cdcfff2e7e7bffe1d55dff869e60ff54a97cff3da98dff61af6bff49b592ff817b58ffe55ca2ff584d42ff886369ff706f79ff89d9e2ff757988ff7cd3deffcbad6bffc7e1b6ffa68085ffde819bff68d2c3ff6cf1d2ffc5e7c7ffbbacc7fff888a2ffc0ebf5ff5a3e27ff371d0fffc0640affe17f12ff6d4217ff552118ffc32360ff7c2543ff543818ff7d753eff6b6168ffbfa1b0ffa67f89ffb17181ffbe8472ffc9983fffc68163ff915d89ff918677ff46a488ff718281ff544e5dff6b5962ffd668a7ffc05977ffbc9a6dffcf6b4bffb16d2effdf8213ffb23a33ffe94447ff6d6560fff862afff54544dff525a5dff2b2d3eff48d2b1ff20455aff75d0e7ff326564fff1eb61ff6d984dff65cf99ff3b9d6effabd587ff77a376ff50ce94ff6d755eff525654ff756d67ff515565ffaa7888ffb0a2d2ff9eb090fff2e576ff9dc9a4ffd592beffd1d783ffbbddd0ffe6b8a4ffdbe7c9fff8b4c8ffe7e4e6ffe1ebf2ff4bb099ff2f7a73ff2a2524ff88571affe5aa2cff9f6f25ff431b26ff3f5374ff1b5d7aff343841ff306b89ff9a869effae939fffd49e95ffc78e86ffcb9983ff8c9894ffa9adb1ff28a0adff9fa39eff139ec8ff8f7f93ff343b44ff8d8b98ff40af90ff8c7f83fff33e4dff954345fff6712dff94372dfff7464aff415145ff3aedd5ff284d3bffa15179ff282f42ff99c5baff26506cff79d9efff406458fff0eb6fff4d644affbf99a6ff709049fff9f05aff6b884dff57d7acffa15e4effde6969ff5f6e73ff7e6365ffe05ba0ffd4769fff67c0a4ff5dd1d4ff87d8daff4ddfe6ffbaf3daffbcebecffe9d4e0ffe3ded7ffe9d0c2ffe3d1d4ffafd8eaff175d57ff12bab1ff27a8a1ff323d37ff54371cff87854dff426c74ff342e31ff266073ff1e5747ff4b4449ff546562ffb49f9cffa3818fffc19583ffbcad96ffa89ab6ffbdb7c7ffafa5abffdb8564ff888baaff64505cff7c7884ff557873ff64a9a9ff638892ff8396bfff4b7298ffe53f4fffa12b2bffed4044ff723125ff2cead1ff1d684dffd64791ff342e49fffa52b9ff365882ff2ce3f5ff2e555eff4f5e5dff635c6fffc3557dffaac14cffbca64aff58e0aeff5a9a87ffdd635cffa5817cff4bdcecffe4853bffe8978cffefc457ff83dadfff7ddee6ff83cce4ffdbbfd5ffc7dee4ffe0c9cdffe0c0c3ffdabfa6ffe3b5a2ffd4bdc5ff9ebfe2ff2c4069ff1d3036ff1d736eff279177ff356454ff382923ff3d595eff27839fff2d4557ff364740ff136165ff916e70ffa19090ff7e8c9eff9a927fff988572ff7c8285ff7d9197ffb1978affd68671ffad90a1ffcf7749ffaf7685ff557e7fff977692ff57a1c5ff558cb1ff30abe1ffa2465affc12f3affc95347ff932723ff2ad3c3ff287d68ff9c82a3ff343f57fff751b6ff32608aff30e1f3ff305a6cff425057ff5a9ea8ff6e828fffeee752ff909047ff43eedeff609588ff7fb79bffb1cf9eff8f908cffd6a14eff73a1b9ffa4f0caff4beaf6ffdf9cc2ffc5b8c2ffcbbaa6ffb2b3b4ffbea4b3ffc9989effc79981ffcc9086ffae91a5ff9696bcff28b0edff3281afff28333aff26352dff548d6dffd4a03aff734b1dff2c3d42ff2485abff86503bff5d3e3eff902747ff8e766cff6f91a0ff6c7f7eff7f685aff7b6552ff5a6d7cff817471ff756870ff8e6584ff806875ffb69cb2ffa35f96ffb43b69ff509fbcff38809bff27b0e8ff585b79ffe83241ff8b3734ffbf3034ff26978eff107671ff20cfc6ff10696cff4b4c5fff1d7688ff13a29bffa5bd6eff8da866ff3edad8ff4b9269fff0e655ffc98e32ffc48b5eff4cdbcdffbab063fff3cc59ff965e61ffa187c2ff5ddcedffd5e5d0ff748686ffa77378ffa88087ffa28d77ff7d838dff8c7587ffae6f64ffbb6c5fffb2716dff766b7eff987881ff1f6d9cff15b4ccff24b7b6ff356d6cff40241cff955e1dffecb333ff466e5cff3e3434ff93541aff535f3eff635a58ff6a7174ff68999aff5a8484ff615b44ff695a3fff644958ff5c4b50ff634b54ff6b4f61ff4b2933ff274c5aff44647fffbe498cffa87ca1ffac337cff518fa4ff33707dffb53640ff8c413affde343fff206072ff077592ff27ada6ff177f81ff3c4e5aff177d86ff139887ffd0dc6cff74b676ff29cfc7ff29ab96ff619380fff5af29ff923e36ff8f7058ff63bb94ffe76663ffbc9dd2ffd98ac6ff5f7482ff526370ff395a69ff71534fff764e51ff7d5454ff856055ff885130ff864428ff8c4d5eff7f5051ff7f643cff98622fff2d404aff1f2228ff19736dff4cc3b9ffd37437ff893d18ff522919ff2a7271ff2c959dff70502bff344c4dff20626fff70636fff90908dff578683ff4f5f52ff585a4eff674458ff783b41ff6f4745ff675156ff253c3eff113433ff195560ff85607cff936071ff687f8fff42747bff4b5261ff704852ff5f2c30ff38a38fff17676dff13aad0ff287061ff196e6dff16bde6ff524376ff67537bff29cceeff158994ff26aba2ff2bc7a7ff805269ffd84d80ffe7477bffe89b38ffee9d64fff16385ff988172ff655d62ff745763ff65546eff535870ff735152ff724f52ff7b6153ff8c673aff815221ff773e2eff7b5a60ff816649ff8c622cff9f5926ff2dc1bcff348e8cff353f43ff371d1effa34d11ffef810fffd14f3cff732831ff654931ffbd9027ff7b732fff555450ff614359ff8e614bff6e8a7dff275d52ff1e5e5cff614566ff7d3746ff843938ff684e54ff284e4dff124f47ff135348ff584551ff6b4256ff636a86ff3687a7ff6b5d73ff3e4b57ff1e2e2dff4c6f5aff2c513bff0c9b94ff1e4038ff144548ff14b1deff5c3a74ff6f4780ff24c4ebff12a1b4ff1aa29fff16aaa7ffb43f83ffd54159fff68664ffdfca4effbfa086ffa17256ff7d604eff64514fff934740ff864d5dff775368ff764e56ff765d56ff7e6e4cff826429ff734623ff743431ff887056ff8e6a40ff945a30ff912b27ff247b71ff3ac8bcff359ba6ff4a343cff4b2325ff5e2213ffaa2847ffeb2f7dffa62a59ff5a332aff44583cff296e5cff77404eff98785dff8f8a6fff20594aff085b58ff315265ff604357ff7a3e44ff845244ff38545aff1c585cff394744ff334b5dff37516cff445979ff4d434aff5a5758ff325c65ff25574dff514b2dff574411ff125450ff17191bff0e1e28ff0f85b8ff106c9bff0e7083ff11685fff15a5b6ff2080b1ff248d9dff827186ff8a7a65ffe1c77dffaf6d42ff806364ff8e7855ff626c5cff485f5eff815541ff8c4a39ff91463fff714b57ff6e6056ff7d6b49ff595a3bff5d482cff965723ffa16c2fff925729ff713536ff734562ff67291eff292628ff28353dff393840ff4d4452ff933456ff692532ff692028ff97264effb12865ff564d52ff634a3fff813149ff8a3030ff8d6d58ff1e5345ff115249ff1d555eff3f4f5aff675050ff895734ff3d5c5cff285569ff4d3942ff354960ff2c5471ff395c7dff624645ff633e36ff6b4a51ff3c4f56ff263939ff592808ff271c18ff39200fff351f08ff0b6378ff0c5f76ff095266ff106d86ff1a80a1ff5c9e9bff1c8e7eff717d82ff755355ffb0580effa45234ff995a52ff8d7952ff6b7061ff4f646aff6f5b46ff7b4e2bff9d441cff6e4550ff655150ff776a4dff405849ff626040ff906a34ff996932ff804c36ff523e50ff4c5a77ffef7259ffd03f70ff852a43ff3f1e2aff31222eff8e2a5cffc4347fffbc5861ff854e27ff692d28ff33806fff16a295ff513e36ff895b4bff781f3fff5d4f4dff204d3dff44423eff285251ff456057ff886921ff4b5d57ff304f69ff60183cff4d3b59ff4e4662ff6a5263ff7f4e30ff7b4f22ff6e5c42ff5a4d58ff5f4a4eff202322ff462919ff372519ff211d14ff104845ff095352ff04384cff214c70ff58415bff8b7749ff2c9489ff5d4144ff872632ffa76419ffa65f28ffa35c3bff81774fff826b5dff805e63ff465c49ff655731ff9d4d14ff692a38ff654d4aff786c50ff4f6259ff566b58ff777650ff746052ff5f5454ff2f545fff21667cffc34943fff04c8cfff559a6ffc06babff446ca0ff3c3954ff412333ffa06942fff0be39ffbf9d42ff524d4bff623a2eff3d3633ff255143ff52625aff4f5d52ff234f50ff4a423eff535648ff59624eff736c3cff625f45ff515251ff4f364bff49384cff52404eff6c4c4fff844c28ff845321ff6b542bff444a54ff4c4758ff62423aff413b42ff1b2227ff1b141eff461024ff0c3647ff071215ff3b1a13ff6a2029ff435a73ff4c564bff654239ff734b3eff8a6b3fff8a693bff876c49ff817851ff88623cff9a532fff496554ff595a3dff82522eff444b5dff535a55ff7a6c52ff5b565aff455f62ff337167ff60585aff5d5157ff61535bff69596bff402c2dff47191bff85263dff74688fff43bceaff46bdf0ff479db7ff4c5955ff54372cff79684cff608f93ff3c8690ff505e5cff796352ff2d6b6fff454b67ff4c4a4eff50473bff615c40ff646644ff696e47ff696343ff685d41ff52494fff364b58ff424954ff6c4b47ff7f4a3aff773f2cff66481dff35373fff35404eff6b4f44ff5d3c50ff612b3bff2c1b22ff0f2422ff10282cff1a2522ff492611ff57534dff3e5f6bff6d4632ff6a4d3cff555b50ff626753ff5b614fff79674eff7d724eff8e6029ff9c4c1bff606a54ff5e6345ff735f3eff4b5967ff555e64ff676761ff50505fff445661ff4a6467ff78524eff884b41ff874841ff8e4259ff77a4b4ff5f9094ff506f69ff3f413fff312c2fff3c5d72ff359695ff3cd7c4ff8cc5a1ffab7925ff774d28ff545c51ff349392ff1b828cff4b686dff5b3b4bff592e2eff714c33ff665d3dff676647ff676c49ff696344ff6b5f40ff675f45ff2a5b62ff305669ff694a44ff814a32ff79402dff48122aff53131dff5e3029ff675b41ff5f444fff594a52ff204d45ff363426ff232f31ff393e45ff6d4d37ff694f3dff6f544bff85511dff665935ff226352ff184e4dff334b4cff694f4eff79644aff875431ff953f1eff80704bff7b6e3eff7a683aff7b5f62ff605f6eff356275ff4c5666ff5b5564ff725560ff925c33ff975222ff9c4024ffa22c4aff6d999eff64c0bdff62dbcdff5bd7c5ffa4b78cffaa853aff6e4e26ff433921ff746c3effcfa235fff4c73fffd17016ff94562bff7a6d5eff6e6068ffa42523ff854c2eff745241ff495750ff505d52ff795c31ff4e5a51ff565957ff79572fff33595aff2e566cff695057ff845826ff7e5220ff571031ff690f1eff6f2e23ff706053ff5e4f4eff403735ff363030ff363132ff383637ff393739ff443b3cff565c60ff796e68ff7e613dff6b5d37ff60633cff245249ff3a4548ff654b5bff6a4e4bff6f4343ff7a4740ff90613fff986128ff915d22ff7f6251ff70645fff686f6eff426c6cff4e5f62ff715050ff856760ff885f49ff944338ff9f393fff462b32ff302221ff344534ff4b856cffb9ae6ffff6de5afff3e15bff7fa96aff4c6d52ff584734ff683b26ffab642fffde9135ffdda62dff787642ff3f4f4cff624a2fff7f3e2bff4c4a4eff3f5659ff844e24ff555453ff525660ff875223ff414f4fff295366ff664f62ff745e35ff745620ff561e36ff6b2d37ff6e5d5eff4b4948ff353132ff36302fff353131ff373435ff383639ff38393cff424145ff424743ff5e544dff887158ff7a6952ff71643fff2d5b4cff21575cff525667ff6e4d46ff724743ff604e51ff92533fff98422aff945021ff7c614bff746a58ff77756aff457169ff34645dff56585aff576c72ff61595dff853c3eff9a3b34ff6ca9bbff748ea0ffaf4c70ff983246ff782a2aff5c2713ff895b1cff566745ff669c7aff53b390ff4e9f7dff6a715eff973946ff8e6359ff618a6cff349385ff9b252bff3e5c54ff43595aff44575aff853b19ff745846ff726055ff83521cff56463fff4d4455ff624765ff63563fff5c512eff574647ff64554aff454552ff36383eff353231ff363231ff343435ff353739ff37373dff373d3fff394144ff4c393dff60493cff6a474aff6c6355ff6e665eff316256ff056260ff15676aff865a29ff735841ff365c60ff8f423eff993926ff953e1cff815f4aff75665bff737169ff386e62ff14655aff16625fff25677dff4b5360ff822c3bff96371dff5da9b5ff80c5d5fff17bb8fff769aefff15b9dffed548affd54466ffa23846ff783a22ff55301eff4f4a33ff887769ffe24c84ffd65a93ff5c757dff5d444cff7d3a40ff3b6454ff622a2cff4b4f55ff803a25ff754f1fff6f5c32ff70633aff545043ff5b4547ff804d42ff444b42ff4d4f46ff524546ff483a3bff443437ff3c3133ff323436ff402f2fff383637ff363837ff37393aff403f39ff403e35ff443f3bff4c433cff47474dff484b4fff595255ff6a5957ff3d5e50ff687053ff8c6c22ff776848ff2f626eff75584dff81543fff815548ff7b5c5fff64606dff397179ff375959ff465651ff6b5f59ff706a5eff7b5648ff962d39ff9e4a24ff462c45ff37293bff5c1e2fff8b213aff9d3456ffad3e62ffe55a8cfff971aafff69e52ffea9844ff9a9a61ff467c6aff6d533fff874d37ff6f6b62ff8e5b72ffdb3575ffb85c18ff5f593aff5c5144ff713b31ff613827ff56502fff586a52ff4b5a4cff5b5544ff80502eff525045ff504443ff3d3636ff393131ff393230ff333433ff373132ff483330ff413331ff3a2f2eff353534ff3d3932ff413c35ff3e3637ff433d3eff474240ff4c4844ff4a464cff584c4eff645955ff75693eff8f691eff6e604cff216071ff5c6256ff645e54ff5e5e5eff64636eff59686eff456c6bff5c4a4cff734442ff87543aff8c6648ff8b5c43ff943f43ff96592dff70a5e4ff7691d5ff9a78b2ffbf5545ffa54935ff7c4034ff473238ff412e2cff53291aff82481cff6b7c56ff5cab95ff9dc1a1ffef9d3bffd6662bffa8322fff6f3d30ff744d35ff445138ff7d622fff384c47ff47293cff3f343cff29625eff57594aff64533aff6b5222ff5e5147ff403533ff382f2eff362e2eff382d2cff3a302eff36322fff363631ff393434ff3d3630ff373535ff373634ff3d3538ff423737ff493c37ff433f3eff454145ff4c4042ff534443ff5c5150ff685543ff80532aff634e47ff214c5fff635c4eff575e56ff2f6165ff696e6bff756b5bff7b6750ff863847ff933235ffa04b18ff8d6646ff7e614aff7a514bff7c5934ff66afe3ff70c2f1ffb8baeafff99f71fff9a367ffe8ac77ff64bcd2ff56b5ccff4eb3b9ff4aaa9cff4b907dff663a41ff693331ff86532cff7d3e23ff9f3d37ff735d4cff41926dff47868aff95633bff885d2fff5b3946ff443143ff2f5e6fff6c433aff683a25ff52514bff463f41ff3a2e2dff362c2cff342d2cff372d2bff382f2bff3a332eff38332fff373433ff3a3230ff363331ff392f2dff3f3333ff403836ff3d3837ff3f3a3cff433d3eff474140ff514444ff554d4dff5f5553ff793841ff712533ff6a3d2bff735458ff5f575bff325d59ff6c623eff765f34ff7c634aff833741ff862f36ff933e2cff83614bff6c614aff444f42ff2e515aff3e2538ff312a3eff342e48ff4b292aff6f3a27ff61412dff264f57ff38717cff378382ff3f9588ff4bb9acffa85a80ffd05c8cffefc16affe9cd57ff89ad62ff479066ff9a7933ff7a5a2cff6b573dff935a38ff4b3c44ff40374aff43566eff6f3d3aff703727ff5b5351ff3a3332ff392e2dff362e2eff342f2dff362e2cff362d2bff362f2dff332e2cff322d2dff302c2bff2e2a29ff322a29ff342e2dff373132ff3e3735ff423b3bff463f3fff494342ff4e4847ff514d4eff5c5656ff6f4755ff7f313bff764129ff665b69ff465c62ff435a4cff665226ff675538ff746a50ff714a3bff763930ff8a472eff846552ff746548ff53573cff415869ffd34862ffc94863ffc24762ffa94774ff984777ff884a79ff3d7bafff2f80b4ff2d7da3ff257683ff206a6eff2a5958ff47564fff6e5f3eff696120ff425424ff3a7246ff8c8d3fff70894fff378065ffc1396bff29373fff53445bff674963ff7c3b2eff7c3e2dff4f4242ff403430ff3b312eff3c3130ff3b312eff36302eff363130ff342e2dff2f2b29ff2f2b2aff302c2aff302b2aff312c2bff332f2eff373232ff3a3636ff403b3bff474141ff4c4745ff504b4cff524f50ff565353ff685f64ff694a55ff704f39ff31656dff36645eff705737ff754217ff765330ff7b774cff79652aff7e5d24ff895e32ff7f6d65ff776d5cff7b6431ff7c605dffe55762ffeb5f69ffed6772ffc85b84ffcb6294ffd370aaff6ab6dbff5ecfeeff5ddef6ff50ced8ff53dfe2ff4cd9dcff4cd9d8ff98e2cffff2df58ffd7d666ff69be97ff5ac3a5ff44c6b8ff3ca491ff468b88ff357e9cff307c93ff792c37ff7a4026ff755042ff403e40ff443735ff413935ff403532ff3e3532ff3c3534ff393534ff353030ff322f2fff332f2dff34302fff353132ff383433ff3a3636ff3d3a3bff3f3d3dff444242ff494546ff4d4a4bff514f50ff555253ff5b595aff686566ff5c4c5bff694846ff485a5aff56584bff745531ff834126ff855233ff7f7b50ff7c7349ff7f7147ff816e4cff5e6368ff4e605eff766c39ff916a2dff362027ff3c212aff3d232eff2c2737ff2a2a3dff292c40ff223045ff21344bff28394cff2e3141ff333640ff47383cff584142ff5f4944ff46635aff466056ff784a2eff715039ff33647cff504e70ff694567ff466495ff8c406fff7f2d34ff6e4631ff71584fff4e474cff444042ff40413cff453f39ff3e3c3dff403939ff3f3a3aff3a3535ff3a3636ff3b3737ff3b3839ff3e3a3bff403d3dff434141ff464444ff4a4748ff4d4b4bff504e4fff555353ff5a5758ff5e5c5cff646262ff6f6c6dff70404bff7b3844ff69424eff5d4944ff705b36ff6e443dff6c4f4aff727159ff686c5cff6a6659ff646a58ff37585dff1d5655ff626b42ff866e28ff507e76ff4d837aff4d8981ff5a96a5ff5f9cb7ff61a1bdff51abb3ff4eb0aaff52b6acff577380ff62707affac6d79ffea5d5fffe36966ff27b0a8ff34b5b0ffa66d42ffa67547ff538e9dff8f7e9affb87ca1ff8aa1c1ffc26188ff804859ff6f4e34ff735951ff664e56ff574b4bff4b494bff474546ff444243ff434142ff454041ff433e3fff423f40ff434041ff454343ff474545ff494748ff4c4b4bff504f4fff535353ff575656ff5a5a5aff5e5e5eff626161ff676767ff6c6c6cff777677ff893849ff96183dff8b1645ff843742ff796a3aff5c5755ff55535cff6e5e61ff6e555fff65535dff2e615cff0f5f57ff075e50ff0e634fff717231ff6daa91ff64ad94ff69b59cff58898cff538184ff558284ff3a6765ff2c6158ff2f6860ff15353fff1e4247ff2a4f53ff3a5b5aff416963ff377692ff3986abff5c98a9ff61a7acff55b49fffb7c77cffd0cc6aff8fafb2ffa8aa9cff8b6261ff715454ff77656cff645d60ff5f544dff5d524bff524a4aff4d4b4cff4c4a4bff4d4a4bff4b4849ff4c494aff4d4c4cff514f4fff535252ff555555ff585858ff5a5a5aff5e5e5eff626262ff666665ff696969ff6d6d6cff717171ff767676ff818082ff805054ff995228ff973838ff94493fff7a6d4eff5e5e5cff584956ff813552ff7f3d51ff6c4a4cff2f5f52ff0b6a65ff046d69ff0a6c71ff5e6e57ff16303dff183748ff1b415cff0b5077ff0c6191ff0d6fa5ff117fb6ff1891c0ff22a5cbff39c5caff4ccccbff54dbd8ff4ae5d7ff4fe1d7ff48949aff6f9b92ff879970ff8a914dff83782bffc1851effa2af5eff9ca1a6ffa6b7bfff7b5e47ff675a67ff726873ff756e6cff5f5c5bff645155ff5d5052ff5c5252ff595452ff575555ff585556ff595657ff595858ff5b5b5bff5e5e5eff616161ff656564ff676767ff6c6c6bff6f6f6fff727272ff757575ff797979ff7d7d7dff828284ff8c8b8eff755a5dff9b6426ff98513dff8b514fff726759ff615352ff633f4cff7b3153ff73444aff625047ff256556ff1e6f65ff257171ff206a7cff426a6fff814e77ff8f5785ff9c6198ff5db3e4ff55c9f3ff66def9ff5bd1f1ff54c1d7ff54b1b0ff439279ff43936fff37726bff3f7277ff64716affa35d4effcb8b65ffe1d370ffd8c554ffb8ac61ffdaa050ff73ac85ff85abacff939b91ff795e4aff2d6379ff4e6276ff83706eff756461ff685f63ff6a5d5cff645c5dff625d5eff605f5fff616161ff626262ff666565ff686868ff6b6b6bff6d6d6dff717170ff757575ff787878ff7b7b7bff7f7f7eff838383ff868687ff8a8a89ff8e8e90ff9a9697ff81565fff9e6822ff895f60ff725969ff585260ff754342ff7f413fff5b5460ff645748ff6d5d43ff2e725fff537862ff717460ff5c6179ff406379ffbc638dffb96388ffb5668aff507087ff36708dff2e6b86ff276172ff287885ff2c8aa1ff3696b5ff46b1c7ff56cce3ff5bdaeeff74afbeffb26d66ffc84a46ffb05144ffd94158ffeb6d7dffe27662ff97c5a4ff859493ff346e71ff42625dff176270ff48545fff867975ff767371ff70696bff6e6867ff6b6767ff6c6969ff6d6a6bff6d6d6dff6f6f6fff727272ff757575ff787877ff7b7b7bff7e7e7fff828284ff868587ff898989ff8e8d90ff919093ff949396ff979799ff9c9c9eff917177ff8a3d43ffa3691eff7e5a65ff6f5267ff7c4746ff7f4f4aff755854ff426363ff615f64ff776164ff6a6a68ff707468ff7c7361ff84544eff70515eff273d46ff1d4e5cff196077ff1e7293ff2686a8ff35a1b7ff41d2cfff55e1dfff68e8e6ff5f9b9aff878487ff775469ff8f375fffcd3348ffe23b49fff26193ffc94f86ffd25c79ffc0475dff7bb0a3ffe0b97bff478696ff186e7aff3c615eff275f62ff414a49ff796555ff847e7eff7b7477ff777475ff757476ff777575ff797777ff7b7a7aff7d7d7dff808080ff838383ff868685ff89898aff8d8d8dff919193ff969698ff9d9da1ffaeaeb1ffa4a4a6ffa5a5a7ffa6a6a8ffadacadff7b4d56ff823d39ffa26c23ff895a4dff794d54ff8f4039ff815b52ff6a6459ff406561ff516571ff726074ff795e6cff766772ff797073ff8c5655ff8e4a50ff2b9995ff3cb5a8ff4dc8bdff77c7d1ff87cfd4ff88c5c2ff5e7f74ff59715dff5a4e4cff615d65ff7b7280ffd266adffeb78bdffba6274ffce5255ffc32e54ff998eabffbcb1c9ffde8ab4ffe3704dffad9d89ff2f6f8dff55677cff7b5950ff66483bff4f4336ff204940ff8e8784ff888286ff828182ff818081ff848283ff888585ff8b8889ff8c8c8cff8f8f91ff939395ff969598ff99989bff9d9d9fffa4a3a7ffb7b7beffd7d7dbffe3e3e5ffd0d1d4ffbcbcbfffb8b8baffb2a999ff7a464aff873545ff94633aff7c5339ff764b3bff8f4034ff85624eff7f7155ff785553ff705369ff6e5570ff7a506bff6a5171ff5f5878ff79647bff90565eff5dd7c3ff68d8b9ff5db89aff52554dff4c5345ff6a6f49ff90a24effaec559ff80c587ff77d3a9ff92a88bffb72a3eff882a3dff802c41ffc85a82ffda5794ff9186a7ff5398d2ffa0c7dcffc79a9eff906d79ff71737cff746063ff8a4636ff843035ff5f3c44ff165b65ff615f60ff959495ff928f90ff8f8d8eff918f90ff969495ff99989affa0a0a3ffc4c4c9ffc0c0c6ffc0bfc5ffc3c4c8ffcbccd0ffdbdde0ffe5e5e5ffe9e9eaffefefeffff2f2f2ffe5e5e4ffcec9c1ffad8643ff8e635aff7e485eff735a6eff70614aff6e5f41ff6e4c56ff875b47ff986746ff86605fff7d4856ff714d5cff5b5c66ff545864ff566071ff4e6880ff716261ff3d513dff3c5841ff388460ff38a885ff4ccaafffbddfaafff4ea6effe4c661ff985f3cffa53a34ffd62c56ffea448cffad5c86ff967b89ffb95b4fffe14283ffdd8fc0ff87a3a3ff5ea29bff6da1a1ff846d7eff89746aff855848ff8e3834ff942341ff69435cff116778ff3c5253ff807f6cffa39fa0ff9f9c9dffa09f9fffa3a3a5ffababacffc9c9ceffe3e3e5ffe3e3e4ffe3e3e3ffe5e5e5ffe7e7e7ffe9e9e9ffedededfff1f1f1fff3f3f3fff6f6f5ffe6e2deff9d826fffb37e25ff897060ff686c75ff585e80ff716e5fff7e714aff5e5c6aff805554ffa15c4eff7e696bff685f62ff655960ff3d656aff386764ff4c6a69ff356c73ff5e635aff3a6754ff4e7264ff5ebd9cff6fe7caff76d6b4ff857b64ff915a38ffbd6d40ffdf8138ffeaa557ffcd7281ffd15f6dffbe4439ffed8c39ffebc960ffcf9666ffd07a51ffdf8e9aff579191ff5a6979ff84617eff9d614dff975239ff923b31ff9c3c39ff6e545aff06707cff116a61ff496b4eff928f6effb1afafffb2b0b0ffb9b6b7ffc8c7cbffebeaecffededeeffedededffedededffeeeeeeffefefeffff1f1f1fff2f2f2fff5f5f5fff7f7f7ffe9e6deff99948aff756d67ffb27d27ff6c7a58ff2d756eff536383ff726f69ff7e7867ff447389ff724d70ffa03860ff4b7678ff286f6dff286a6bff186d7cff296c74ff526967ff6b5a5bff83504dff7d736bff83746bff6c5e4aff70542fff847747ff6bb483ff6bd6b9ffb1d8c9ffcc8255ffda533bffe43248fff3635effeda249ffcb7b52ffd9534fffef9387ffbdbd93ffa594adff337884ff665a70ff8b5476ff9a3e4cff903a39ff8b401dff9d5620ff705f46ff356866ff436964ff4d6459ff456b5bff658382ffbbbbb9ffd0cfd0ffeeeef0fff4f4f5fff4f4f4fff3f3f3fff3f3f3fff4f4f4fff4f4f4fff5f5f5fff7f7f7fff5f4f2ffdad4c7ffb1a66dff897c73ff7e716fff9c8243ff68764eff2d6959ff594357ff565b6aff5c7173ff667a83ff716076ff8b4f67ff4d636bff346463ff506262ff4e767fff4e5f6cff684859ff8c474fff904355ff6e4126ff865c2bffa77835ffc69043ffdcb664ff77ddbdff90a086ffb25a4effda3642fff25282fff171a4ffd55d6affe84951fff4588cffb57aa0ff6b9693ff83d2d5ffa09b89ff3f5a5aff5a556cff79577cff832751ff7a2b37ff834320ff986728ff7c6043ff5a595aff76565eff5e6064ff2b716aff307275ff377c75ff7fb0a2ffe3dad0fff3f1eefff9f7f4fff9f8f7fff9f9f8fff9f8f8fff8f7f6fff3f1f0ffe3cfbbffbd9496ff8c757fff8f8d61ff8b6f6eff8c646eff8c7f4eff536e4fff29654fff5d2d43ff454f63ff486c6fff858373ff7b756aff736b6cff4a5a60ff514d55ff825659ff8e786eff88695fff7e3951ffa03e41ffa34c5cffba9633ffdeb249fff4a753fff1a457ffd8773bffbe6128ffcc7141ffd56080ffe17b9dffd64e59ffae585cff6f9aacffb7a7c8ffb66457ff775255ff839fb1ffa779aaff877a47ff343a3bff365565ff406581ff5a2545ff6b223cff7e3341ff836f66ff705459ff722447ff785a63ff716662ff757b63ff7d7c60ff627c6bff2e8c86ff897e83ff948b87ff8eb4a7ffcab694ffcab7a1ff97bfc8ffa4a2a3ff907278ffad3a58ff946283ff7b7088ff3b827cff736c76ff876472ff7c5d49ff6e5c46ff6c5446ff792d4aff68425cff615c5dffa58736ff7f7b4eff3e685cff713b4cff7d3c50ff875356ffaa702fff9d6846ff755662ff934533ffa1504dfff3e467ffebcc5bffbf4f1cffc25a23ffd9a335ffe5d255fff3e376ffc95752ffd53d2effec632bffa9b38dff948d7bffd25536fff1a355ffcaa481ffd38dccff8b9a8aff756442ff1a4f4fff2c5961ff425767ff3f2437ff672741ff794f60ff736474ff5d415eff642744ff6e6063ff756d5cff83805cff9d7c3cff7d7955ff2a8582ff5a848aff3d7f82ff27878fff957152ff8b7469ff358fadff755e74ff88485bffa75f50ff7d6787ff6d718dff647b75ff586f72ff826568ff8c473dff85453aff7c4c44ff8b4d61ff79425bff685f5dffaa7d26ff876e39ff3e5d57ff873b48ff833f48ff6f534bffa05b3bff9d604eff6a6778ff825060ff9c4d48ffc47327ffb45724ffbc5a3bffd57569fff5dc67ffde9d49ffd4582cffdf3e31fff69356ffe3955dffd04b48ffe85464ffe3847fff8a946affead688ff9d838dff776f58ff7f654aff2c685eff4a585eff574555ff2c222eff554b4eff6f6168ff6b556aff5a344aff5c283cff7e595eff7a665fff817d62ffa07237ff80744fff33887fff1e8695ff138294ff158497ff6c675fff676b66ff3e849dff85475bffa34744ffac7d4dff8f6968ff886374ff8f776aff8b6d5fff8f675aff9d313eff884743ff6f5e54ff7c6e6fff696e6eff5f6c65ffa77426ff8f6c46ff3e6061ff9b4e51ff94473cff474e43ff984647ffa05268ff597493ff60678bff806175ff99895dffc26072ffd97b93ffc66570ffb64c39ffcc5640ffe9615dffee7a73ffc64c49ffcf3258ffdf6594ffcf6b60ffaf714eff92d3dbffbd809cff798e9aff796759ff7e6658ff67665dff6f464cff761e39ff28242bff484d4cff58605fff695f5dff613b3eff6c232cff9a4442ff8e5450ff816c60ff8e6b71ff7d726bff7f926eff546f85ff417090ff22829fff6d6e5aff796956ff88677fff99523cffa85733ff9d8a67ff9d4f4dffa63f52ff926b4bff8e6957ff8d6c6bff845f7fff60606bff34726eff2a7c6fff367e76ff3a7c74ffa26223ff926241ff396265ff816879ff8e515dff8a3049ff9c2c57ffa4406bff7d6386ff406589ff51627bff7cdec4ffa15964ff9a4437ff98624fff829695ffa8b1caffc54d48ffa04e53ff80929cffc294abffa16966ffde6d7cffbb908bff65cec9ff9e8e93ff665f4fff6b5e5aff6f6063ff885f44ff882e31ff791a33ff23373fff48434bff5f4b51ff67635cff644543ff7a2226ff9c4e52ff8f5652ff84666aff6d6b83ff727672ff9e8948ff7c5c5fff605a6aff297282ff8a6049ff985443ff9c4969ff9f544dff9a5e50ff937a71ff915267ff9a4460ff707172ff5c6f75ff667889ff5a7593ff3d7284ff0f7877ff0c7c7aff26706bff47726eff94664fff8d553cff2f5d6dff606580ff81627aff8f4460ffa82b53ffae3053ff9a5d61ff6d5760ff565962ff807f65ff7e5c50ff6c7f80ff83bcc3ff90989eff9a5057ff9d4959ff8ec1ccff919a93ff5d6f70ff56cdccff679c8eff5da484ff7db2beff945d67ff844f36ff546563ff5f6d6bffa26726ff8d3a2fff792b43ff21565cff543c51ff6e2f48ff716057ff693b38ff76282cff7d6476ff78667bff806c81ff3b748cff667066ffaf7929ff974f34ff784b40ff2b5d66ff884740ff993b41ffa1275dff8e5f68ff88686aff916176ff875d76ff7f6580ff2a7a94ff207a95ff27819aff1e8695ff148486ff088686ff097c8bff426976ff7a585eff866d6aff726974ff2d6281ff646182ff796479ff897077ffa85353ffbb4f37ffb76c2bffa16f2cff8f6b39ff657b7aff70a9b1ff8cc0c5ff76545cff8b4259ffb6517affda759bff6f5357ff414651ff759b90ff43847fff546f81ff60b1c2ff71c9bfff8e6d5bff816b59ff706960ff836e59ffac7d26ff815440ff5b4c5dff5d5b63ff69384dff80253dff763734ff6b1b21ff6b2b36ff4b6a7cff356d87ff337692ff606a73ff7e6357ff966e57ff8f5d3dff73553eff295b65ff7b2e41ff882241ffa2215eff7d586fff806472ff8d6d7bff5d6a85ff45799aff0f81a9ff437593ff69788cff667982ff2c7974ff087975ff078497ff506276ffa03a55ff866373ff76707dff758187ff8d6856ff896d5dff547f7eff876b54ffa5673cffa87e3affa48037ff977c3dff8db0b3ff7c8481ff6b6767ff4e9a96ff95b0c1ffa65f6eff50393fff4a4e5aff68837fff408786ff64bfcbff749fcbffc69ec3ffb5a593ff907a63ff807a61ff816651ff986a36ffa78133ff6b6058ff5a586dff73545bff7f283cff821e35ff6b1e2cff6b1a27ff6f2c35ff206c6fff176d76ff3a7480ff866562ff7e6461ff727172ff676757ff4f6259ff26636aff7b3a48ff8a2941ff9b355cff8d4361ff865e6bff87747cff3e7b91ff10809dff0885a8ff626f84ff95696fff95616cff705d5aff2f6e57ff06898fff4f6973ffb0264fffa24d65ff9b6663ffa08b6bffad833effa37941ff548578ff56756aff7b6e51ff868051ff847e47ff907e4aff7b4a4eff667366ff4bc5b6ff70e8daff478880ff314b5aff636e77ff5d7b77ff338992ff64b9c8ff487294ff5cc9d8ffb7c6b3ffa69393ff83796aff86835bff975830ff9d5a2dff897857ff4a6e78ff486882ff75505eff812e45ff801939ff631b3dff661b31ff6d2d31ff12786bff3e7067ff816c64ff7f6b7bff616e7dff267d87ff347070ff276c68ff257470ff66574bff775149ff8c585cff80515bff855960ff8a7278ff3e7c8bff068797ff078b9cff54767cff946763ffaf324fff9e503cff8e7736ff178f85ff4f7472ffb12c4effb9414affb65b3affbd8025ffbd9028ffb48d31ff968b64ff4c7f82ff277b84ff3a776fff687355ff8c6e4bffae504bffd08b72ff67ae8fff287465ff25a9a1ff5bced2ff3c6f68ff207e6cff72c5c3ff63698cffb47db5ff839eb6ffc79da5ff9e8094ff856d69ff9e8135ff974526ff854845ff5a6663ff3f637cff5c607fff546971ff6c384eff7e1a3cff761a3cff5e1a31ff363333ff50706bff70695eff8a6459ff5e7185ff217686ff088184ff237689ff1b6b73ff196456ff355949ff435c48ff8c7950ff4b6969ff5c6171ff93485eff546b75ff158888ff657f88ff4c6f78ff7e5f68ffaa4135ffb05926ffae7f29ff3a8f8eff3f7a7eff975374ffa85e53ffaa6449ffb27f50ffb8801cffc18c21ffb3854cff8c857aff538489ff5b8176ff717561ff8d7358ffac6b21ff4e4f36ffd74233ff954127ffe1bb3bffa48e39ffc0b139ffb56752ff994540ffbfdeafff607262ffeabc80ff65686bff65abbfffb08668ffad6d30ffe18075ff994954fff4a550ff616f7dff54cfd6ff906d6cff9b6d8dff645768ff575a4fffd25a87ffaa5b50ffef9f48ffb08196ff91a9bbffe77082ffb49b9bff312a23ff59855dff885329ffd67e19ffaf963effa19c44ff70b27aff4e6353ffb55d5bff529893ff20a8a4ff76bec4ff487076ff53c1bdff856a61ffb76f52ffcc8473ff9b535bfff5ad50ff677d8bff5ac1bcffa48d93ff845f76ff946278ff7b544effcb5f78ffd7b162ffd88359ff80cfe2ffc37d6effde666bffdf8a70ff6e4d24ff996e1dffd0b02affa3671fff807d3dff45b0adff376e6dff34a182ff456b67ff365d61ff39d7e5ff4f8692ff2d969eff5fb6abff5a6d65ffbe4d7cff9fac9dff62757dfff0a84eff698c9dff6ba79eff67cdcaff596172ffbf627fffaf6b70ffac5f5bffeccf5dffe08680ff9ca8abffecd066ffca6870ffd47e85ff746f29ff857a35ff4e6d40ff508455ff5d8461ff62795eff4ba1aeff4d917bff31806dff25c4b5ff4eafb8ff3d7c8dff31c6d9ff617274ff455756ff8a9b91ff9b9f79ff7b8678ffeaa851ff7c91a8ff799584ff51bfc9ff8a6586ff88717cff8eafaeffbd6798ffd65f5fffe19950ffdfa558ffb3a970ffa7b187ffa2c8b7ff164a49ff145e56ff53635dff853c2cffbb6718ffccb33bff74836eff3f8788ff33c7b3ff40b0a7ff478e84ff40a593ff66aaa8ff546d66ff2c7d75ff6fccabffa19b4aff9d9d58ffcda04fff9978a6ff8c6a5eff506b73ffb676a3ff4b978cff5ca6acffb88cb9ffe25291ffba7262ffcc9362ffbb9693ffe5c554ffd99e6bff212221ff483a20ff6b2c45ff9b213fffaa4a2dffb1631bffba403cff419a9bff7b7c6eff9e7f49ff45a788ffc2c479ff8a795cff74716cff38c1b9ff5dcfc5ff7e904effa5a35fff81b6a4ff69b8d6ff9d9357ff6b9375ff64b1b8ff4fc2a5ff67a0abff927786ffbf679fff79b9d4ffce7b8cffe69459ffb3c381ffd87e6bff20634bff604520ff7c301cff472739ff982e54ff763b38ff525147ff4a5a50ff4a6e66ff8e6a43ff5d8f83ff7e9b7fff778c80ffb54576ff8caab2ff879e81ff938d51ff9c9563ff39b2beff37cbddffa9b56eff5eac88ff46b8a9ff57b99fffca68a1ffd85864ff60a7acff98b0a5ffdeb963ffc7bf85ff6fc0b8ffb78895ff772522ff701a3aff6e291bff20544eff4f2f3fffa12f53ff71684cff64887bff5a9e99ff858461ff587d75ffad5382ff8eb7afffcd484cffb46067ffa06b52ff845a38ff57545bff3a5360ff37aa9fff606f5bff48b190ff3db493ff89848bffc25069ffa4747cff71c0c8ff67c8caff9abda1ff93b3b6ff89b7b4ff89bbdfff76351affa8560dff824210ff6e2036ff61452aff98817bffa55f65ff997252ff906f89ff8f9e6dff5c7274ffb35d8bffc0936bffc0703affc5542affa84c53ffa54f74ff41444eff34837dff4d9fa5ffb1bd5aff4caf83ff73b77eff88867bff695c59ff7c8591ff8fa7b2ffc8cf8effca9a98ff9dd5c2ffd4cbc7ffe0d0dbff289085ff425845ff97752eff3e424fff24525dff5a6674ffb69497ffc39a88ffa6a5b0ff949b96ff637d98ff646d74ff649793ff95627affc44435ffa5413dff2aa38bff743d65ff7b6f98ff449da6ff7b8261ffa68f6dff9ebf67ff8b8c77ff8b8c91ffca7672ffabb59eff79d4deffaadbdeffd9d1d7ffe2c8b8ffc1c9d9ff28688eff245b52ff656e47ff405956ff43585fff644c56ff86888eff877f72ff73797aff9f7e76ffa27478ff977b93ff7c7c9eff3899c5ffa84053ffa93834ff22978aff407e8bff645c89ff46a699ff599c8fffa5b867ff97a56dff79b594ffb2a279ff91a9adff8dd1c5ffbc91a0ffa69f97ffb0888effbf8174ff948297ff206076ff2f9692ff8c4c21ff6b6e46ff5b5b45ff425954ff747f82ff587067ff62504fff69464aff50414aff254e5aff9f6186ff696d8aff68505bff80504dff147990ff1f827dff2e728fff5ca496ff35ae9cff4d9589ffd16056ffb29862ffca798aff846c83ff505a6dff725051ff825f4dff814929ff815755ff90602fff2fa49dff3a4a50ff8e4416ffb6334cff884d36ff4f6345ff7f5753ff507261ff2d535fff763c46ff53504fff1e504bff4b485bff4a637bff4d5661ff384f40ff28614bff152e30ff2376a9ff2c7893ff1899aeff5c7993ffcd8167ffb38e5eff836d55ff6f534bff864c4fff725556ff75653eff764628ff92673bff823f3bff933f43ff492d3aff67314cff94344eff8d3240ff406e65ff793e3eff5f4b4aff244d48ff445454ff665e42ff413d53ff3e4762ff605055ff6d4c3aff46474dff392416ff312010ff0b5761ff0f506aff567578ff457773ff944d2bffa1593aff7e7257ff615e57ff864d22ff684348ff5f644fff6f6a47ff7a5a43ff3b5468ff8e3645ffab5487ff4287b3ff5c6060ff9e7e3cff546666ff4a5149ff445d60ff424845ff5c5e46ff696642ff564b4bff444351ff764b3dff724b25ff3e414eff5a4144ff301f28ff1c242eff291d16ff504b55ff614a3cff6c5e47ff796748ff846b40ff775b3cff6a5b3bff4d565fff625e5bff416264ff6f514fff774d58ff69a3a8ff52988eff6e7159ff487c67ff9e934effa37733ff577569ff6e4950ff704633ff595d49ff656143ff685b42ff2e5764ff754f3cff652d29ff621f21ff65534cff3b3f3eff31322fff483f3cff695b54ff745a31ff2f5948ff4e4a4fff765242ff875539ff876530ff726160ff4a646dff62565dff8d5d3fff9c3a39ff55606bff715255ffa07741ff949349ff578064ff726b4bffb77440ff52785fff6e4236ff445456ff744d35ff73563cff434b52ff67524eff5f4232ff60494cff3a393aff353131ff363639ff3a3e40ff534742ff766152ff4f614fff235d63ff76513cff6d4f4bff964223ff796351ff597167ff2d605bff4a5f6aff8d3632ff567082ffb34873ffca4877ffd55178ffab6835ff6d7559ffab5163ff6d5f67ff924b48ff59483fff713e27ff635e3bff555046ff654e3dff4a4341ff3f3434ff363233ff403231ff363534ff3f3c35ff443d3aff484748ff594f51ff5f644dff7f6735ff485f60ff71594eff66616aff446062ff6a5349ff80604cff974333ff6fa9e3ffc28994ffc07551ff507480ff5b7362ff5d7c6aff9e794effa6442dff655e47ff67664aff58423dff364953ff634a38ff584c3dff3a2f2eff362d2cff38312dff373431ff393331ff3b3333ff413836ff423d3fff4d4242ff5e524cff733f39ff584e4bff455c5bff70664eff7f4e48ff923a2bff7e6249ff5a5246ff82374eff7a3952ff7c4251ff326e8dff32828cff4f757cff9c7460ff878b3fff698147ff626e47ff724149ff4f465dff753b2eff483f3dff392f2eff362f2dff352e2dff302c2aff2f2b2aff322c2bff393433ff433d3dff4c4746ff555151ff6f4852ff5f544eff4b5c50ff6d4e29ff766440ff814e2dff7b6956ff625c4cff903d46ff874356ff7c4a6eff427a96ff408596ff46898eff66918bff959d5bff6a8668ff40878dff4a6c88ff6c455bff734b3aff453e40ff413b36ff3e3737ff393434ff363232ff383435ff3d3a39ff434041ff4a4748ff535051ff5c5a5aff68575eff65474cff65543dff784937ff757253ff736b50ff405c5eff7b6b34ff5b9585ff599793ff5a8f9fff418886ff3b7172ff555b63ff916260ff3298a5ff828877ff7ba194ffa8a59fff9d6d77ff725751ff5f5253ff504a49ff474546ff484445ff474445ff4c4a4aff504f4fff565656ff5e5e5dff656564ff6e6e6eff805f65ff942e38ff825542ff595458ff774958ff4b5755ff09645dff396b52ff4f4260ff476993ff349dc8ff35a8cfff3cabafff46aa9fff4eaaa3ff898577ffb2b060ffb5923eff8da98dff8b8378ff546172ff736765ff645759ff5e5757ff5b5a5aff5e5d5dff626262ff696968ff6f6f6fff767676ff7d7d7eff858586ff867478ff965e39ff71585cff6e4547ff6b4751ff48604fff417366ff3f6677ff6e546dff4e6a86ff2f809cff39a2a9ff4aa8b5ff6695a6ff8a7c94ffd35462ffc84f66ffc17677ff90a591ff326769ff31575eff7e736eff746e6fff706e6eff737172ff777777ff7d7d7dff838384ff8b8b8dff98989aff9b9a9dffa1a1a2ff854e52ff92623cff7c494eff775952ff4c6366ff72626bff766f6bff835154ff4abfaeff5ca69dff719589ff7d955dff6c9078ffa56a7dffab4c6bffcc4c6fff8e97bbffc9969eff777b82ff735959ff653d3aff496262ff8c898bff898788ff908e8fff9f9fa2ffaaa9adffb1b1b4ffc6c7caffe4e4e6ffd8d8daffb9ab95ff834951ff7c5c4aff784d41ff88654bff7a545cff6d5367ff5c586fff71616eff40604dff4fb492ff80be9cffc99d51ffc16f3fffd75074ffbb6960ffd57e66ffc48e93ff5e8f91ff8b686cff8e4739ff813d4bff186469ff7f8672ffa8a6a6ffb3b2b4ffe1e0e3ffe8e8e8ffeaeaeaffeeeeeefff4f4f4ffd7d4ceff9d7a48ff627266ff636772ff676d69ff8c4d5cff566b6cff38656cff3f6969ff605e5dff7d6049ff926e3cff90af7aff97aa95ffdc5755ffe7586dffe56f5dffba7d82ffa1afa7ff4c606eff884463ff853a2bff885e34ff525f60ff466760ff618b89ffc8d1ccfff5f4f2fff6f5f5fff6f5f5fff0ebe5ffc5b4b3ff95876bff8c755bff446c51ff544659ff637676ff7a636cff465b60ff6b6969ff6f525dff974550ffddbe4fffd97c3affd5933bffd78262ffdd5a53ff968c84ffcb806affa58894ff8b7c6fff2c4d54ff464159ff723247ff705964ff6f4154ff77735fff7e7b56ff4e8485ff61918fffad947bff7993a2ff9a545eff7e6a87ff5a7676ff845b57ff765042ff793f58ff866f45ff606b4eff7e3c4bff8f5c42ff86615bff944c4affb46c46ffcb6b69ffd5864affe25c4bffdb6954ffd95b68ffab9784ffaf9992ff7b6854ff535b59ff482a39ff595658ff634853ff783942ff82685cff8a7058ff488381ff227e96ff6e6a5dff78606cffa4694aff96565eff8e6e5aff8f5860ff625d5bff517570ff786f48ff656453ff8f5358ff813c4aff865a7aff5c6381ff868477ff887872ff958b94ffa3696fff8c8b92ff8e8f8fff7eada5ff87665fff636462ff8f4b32ff4d3444ff5a3e4dff69504bff823f46ff82636eff5f7179ff986b40ff4a5d64ff904d43ff9a485eff916868ff8c566fff457583ff417c92ff1a7d81ff1f7479ff766761ff565f67ff6f627dff994c5fffae5145ff7c6249ff779697ff6e8587ff9e6880ff785362ff577a79ff5b94a5ff92afb5ff87735eff82694fff8f6c3cff615462ff7a283eff6d2229ff514b55ff2e7083ff786563ff7f6857ff445d59ff812c42ff913c62ff866874ff3c7793ff2f7a9aff7e6e7aff346f66ff2a7683ff9e435fff897874ff99744cff61796dff937446ff937e41ff97655cff52b3a1ff3e9293ff477570ff5a9caaff7695b5ffb09d9fff8a7a58ff944f31ff5a6b6bff5b6074ff7a2642ff671a36ff41514eff6e6a60ff576f80ff217880ff206b68ff555749ff78625bff7f5c69ff2b7d87ff427b86ff9a4e53ffa26730ff378280ffaa4757ffb36f3dffba8a25ff88856bff437d7cff7c7256ff615a35ffb25427ffb59e3dff8c8b55ff978577ff78a592ff599097ffa67252ffb86765ffac8f69ff78a2a4ff856178ff9b5967ffd18b54ffa09da8ffd57e7dff7f6827ff848137ff608a6aff409085ff34837aff44a1aeff47a1a5ff796b71ff859182ffaf9b78ff67b2adff8a667cffa97884ffe09362ffc6b176ffb9978cff244137ff773a43ffb87126ff6b7973ff629c84ff63a785ff6e8075ff4bb6a7ff989a53ff94a19bff797e67ff6c9fa2ff8392a5ffb57999ffce8d76ffd2a86aff593931ff54342fff7f3147ff5c6657ff6d7e68ff777e7effa1737cff99847aff827451ff389ea6ff6ba078ff58aa99ffc2617aff74b7b8ffb4ba8fff8eaeb7ff625c3cff714630ff5d5f5dffad7f75ff96938fff756e82ff9e7e6cffb5493bff615c6cff4f8b98ff879f6aff88a175ff8e787bff9ebfafffbac6c3ffd5caccff266e7aff666040ff505653ff767d7aff776362ff6b5f6bff6f789cff8e464bff258388ff4d8691ff60a586ffa4946effa48b8cff828388ff967366ff986e63ff51565aff8f363fff685447ff69544fff424b50ff454e4bff4c5063ff4d4d49ff293428ff1a6581ff437f8affad6d4aff746453ff794c43ff6e5e3fff725548ff7c7180ff557474ff8c7b48ff545b58ff595241ff625b44ff574d4bff5d362fff4a3c3dff2f2c2bff635245ff585949ff7d5b3dff6b5d4aff535e62ff834d47ff735a6dffb4685eff78714fff88675aff674a44ff6e4f34ff594e48ff51403cff393333ff393938ff554b45ff4a5c54ff6a5946ff79574bff4d605bff7b4d46ff8b6885ff6f666bff4e7975ff996e46ff656c47ff53444dff5d4437ff372e2dff342f2dff352f2eff3f3939ff524b49ff664a49ff5b5b48ff814e37ff6d5e4cff726b6dff56768aff45767eff6f8a7aff698d7fff7e707eff624c47ff45403eff3f3b3cff444141ff504e4eff605f5fff784a51ff6d5143ff6a5f53ff3f6550ff545a79ff3499b6ff4ca4aaff8c7f84ffbb815eff768e7fff5d6468ff696263ff686767ff727272ff818182ff8f8f90ff8c604fff744f50ff5c5a5cff5e6666ff4d9e8aff8da174ffaa6e69ffc15f68ff9e929fff80605fff514f54ff8e8f8affb0afb1ffcbcbccffe3e3e4ffc1b4a1ff705f5cff7c5b54ff5d5d66ff5a5f68ffb18243ffb49b6affcd6566ffc37d77ff687575ff713c4bff6e5553ff667867ff9ab6b4ffc4c4c1ffb3979fff7f7364ff615051ff706c5dff6f5755ff885054ffa37465ffbb7565ffb37777ff979086ff705c50ff513c48ff714349ff7b6b66ff53726eff84575aff955f5fff686d73ff3a7071ff6a6658ff864f5fff835b62ff738c86ff667079ff608f9fff948e82ff7f6349ff6b4055ff593540ff5a6b71ff406966ff774852ff5b6d7dff626c7bff4d7366ffa05c59ff8f7e52ff797856ff85652eff789060ff61938cff6f837fffa68872ff7b8691ffbd7b68ffbc9889ff513936ff7f604dff6a8f7bff7c8b84ff799379ff699986ff9b889cffb8a789ff575c49ff746c67ff7b7077ff936163ff487b87ff849e74ff94918fffaf9c95ff6c5c63ff6c5f4dff505147ff534749ff2e4044ff6a6558ff755a47ff6d574bff88646eff796f58ff635243ff4f403aff363231ff4b4a46ff685548ff6d5648ff547489ff638889ff858276ff5b5453ff575555ff706f6fff79524cff586159ff8f966affbe6b6bff7d686fff6c6a66ffb6bdbcffb5a8a1ff6f5d57ff6b585dff8d7972ff8f8887ff6a4e4dff675357ff635e60ff6e6972ff646961ff84685aff736344ff6d8c82ff808e80ffb29085ff686058ff6c5a5aff596f65ff89776dff6d7376ff645a51ff51504eff69574dff9a8073ff6e5c5eff8e8a8bff70615bff6d6a5eff858175ff766a65ff6e6460ff756e65ff
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-RenderHeads.asset.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-RenderHeads.asset.meta
new file mode 100755
index 0000000..2cb9177
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/SampleMedia/Sample-Local-MP4-RenderHeads.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7b8a48f17a76b0d449f396690db75ebf
+timeCreated: 1604318423
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: -1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes.meta
new file mode 100755
index 0000000..e9aaf1d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 071b80f70fe42d44ab5631af0998b01e
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_360Stereo.unity b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_360Stereo.unity
new file mode 100755
index 0000000..53c475a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_360Stereo.unity
@@ -0,0 +1,529 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 8
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.12731749, g: 0.13414757, b: 0.1210787, a: 1}
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_TemporalCoherenceThreshold: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 8
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_TextureWidth: 1024
+ m_TextureHeight: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 3
+ m_BakeBackend: 0
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVRFilteringMode: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_LightingDataAsset: {fileID: 0}
+ m_ShadowMaskMode: 2
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &939090645
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 939090647}
+ - component: {fileID: 939090650}
+ - component: {fileID: 939090649}
+ - component: {fileID: 939090646}
+ m_Layer: 0
+ m_Name: Sphere-ApplyToMesh
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &939090646
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 939090645}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f6d1977a52888584496b1acc7e998011, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _media: {fileID: 1516615348}
+ _automaticStereoPacking: 1
+ _overrideStereoPacking: 0
+ _stereoRedGreenTint: 0
+ _defaultTexture: {fileID: 0}
+ _renderer: {fileID: 939090649}
+ _materialIndex: -1
+ _texturePropertyName: _MainTex
+ _offset: {x: 0, y: 0}
+ _scale: {x: 1, y: 1}
+--- !u!4 &939090647
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 939090645}
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 100, y: 100, z: 100}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!23 &939090649
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 939090645}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_Materials:
+ - {fileID: 2100000, guid: db39bb6249db0924bb87d6e0bb294ed3, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &939090650
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 939090645}
+ m_Mesh: {fileID: 4300000, guid: 7ea26c1ee23534e45906e4c8dd184883, type: 2}
+--- !u!1 &1516615347
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1516615349}
+ - component: {fileID: 1516615348}
+ m_Layer: 0
+ m_Name: MediaPlayer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1516615348
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1516615347}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 638c870cac4da414fba921606d504407, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaSource: 0
+ _mediaReference: {fileID: 11400000, guid: 0d696b76d81c0e640a7dbcc2d148b9ec, type: 2}
+ _mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/BigBuckBunny-360p30-H264.mp4
+ _fallbackMediaHints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _autoOpen: 1
+ _autoPlayOnStart: 1
+ _loop: 1
+ _audioVolume: 1
+ _audioBalance: 0
+ _audioMuted: 0
+ _playbackRate: 1
+ _useResampler: 0
+ _resampleMode: 0
+ _resampleBufferSize: 5
+ _videoMapping: 0
+ _textureFilterMode: 1
+ _textureWrapMode: 1
+ _textureAnisoLevel: 0
+ _useVideoResolve: 0
+ _videoResolveOptions:
+ applyHSBC: 0
+ hue: 0
+ saturation: 0.5
+ brightness: 0.5
+ contrast: 0.5
+ gamma: 1
+ tint: {r: 1, g: 1, b: 1, a: 1}
+ generateMipmaps: 0
+ _sideloadSubtitles: 0
+ _subtitlePath:
+ _pathType: 2
+ _path: AVProVideoSamples/Cones-2D-4K60-HEVC.mp4
+ _audioHeadTransform: {fileID: 0}
+ _audioFocusEnabled: 0
+ _audioFocusTransform: {fileID: 0}
+ _audioFocusWidthDegrees: 90
+ _audioFocusOffLevelDB: 0
+ _httpHeaders:
+ httpHeaders: []
+ _keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _events:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: RenderHeads.Media.AVProVideo.MediaPlayerEvent, Assembly-CSharp, Version=0.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+ _eventMask: -1
+ _pauseMediaOnAppPause: 1
+ _playMediaOnAppUnpause: 1
+ _persistent: 0
+ _forceFileFormat: 0
+ _optionsWindows:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 0
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintAlphaChannel: 0
+ useLowLatency: 0
+ useCustomMovParser: 0
+ useHapNotchLC: 0
+ useStereoDetection: 1
+ useTextTrackSupport: 1
+ useFacebookAudio360Support: 1
+ useAudioDelay: 0
+ bufferedFrameSelection: 0
+ pauseOnPrerollComplete: 0
+ forceAudioOutputDeviceName:
+ preferredFilters: []
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ parallelFrameCount: 3
+ prerollFrameCount: 4
+ useUnityAudio: 0
+ enableAudio360: 0
+ _optionsMacOSX:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsIOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsTVOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsAndroid:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _preferredMaximumResolution: 0
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ videoApi: 2
+ useFastOesPath: 0
+ showPosterFrame: 0
+ audioOutput: 0
+ audio360ChannelMode: 0
+ preferSoftwareDecoder: 0
+ fileOffset: 0
+ startWithHighestBitrate: 0
+ minBufferMs: 50000
+ maxBufferMs: 50000
+ bufferForPlaybackMs: 2500
+ bufferForPlaybackAfterRebufferMs: 5000
+ enableAudio360: 0
+ _optionsWindowsUWP:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintOutput10Bit: 0
+ useLowLatency: 0
+ videoApi: 1
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ _optionsWebGL:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ externalLibrary: 0
+ useTextureMips: 0
+ m_VideoPath:
+ m_VideoLocation: 2
+--- !u!4 &1516615349
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1516615347}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1981163064
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1981163068}
+ - component: {fileID: 1981163067}
+ - component: {fileID: 1981163066}
+ - component: {fileID: 1981163065}
+ - component: {fileID: 1981163069}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1981163065
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0e87d2abb8af1da4aa3e1949ee6d680d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _lockPitch: 0
+ _maxSpinSpeed: 40
+ _spinDamping: 5
+--- !u!81 &1981163066
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+--- !u!20 &1981163067
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 0
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+ m_StereoMirrorMode: 0
+--- !u!4 &1981163068
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -2.31}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1981163069
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8b2366b5575fcba46a0f97038fb6c5fb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _camera: {fileID: 1981163067}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_360Stereo.unity.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_360Stereo.unity.meta
new file mode 100755
index 0000000..3c9ad26
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_360Stereo.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ca8fdd4aa85509743878be7fbacf5a4f
+timeCreated: 1601367920
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_DisplayComponents.unity b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_DisplayComponents.unity
new file mode 100755
index 0000000..a6cb9d4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_DisplayComponents.unity
@@ -0,0 +1,877 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 8
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_TemporalCoherenceThreshold: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 8
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_TextureWidth: 1024
+ m_TextureHeight: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 3
+ m_BakeBackend: 0
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVRFilteringMode: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_LightingDataAsset: {fileID: 0}
+ m_ShadowMaskMode: 2
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &57396433
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 57396436}
+ - component: {fileID: 57396435}
+ - component: {fileID: 57396434}
+ m_Layer: 5
+ m_Name: Canvas-DisplayUGUI
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &57396434
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 57396433}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0.5
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+--- !u!223 &57396435
+Canvas:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 57396433}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 1
+ m_Camera: {fileID: 1981163067}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 1
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &57396436
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 57396433}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 918178075}
+ - {fileID: 1661678278}
+ m_Father: {fileID: 0}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &109567980
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 109567982}
+ - component: {fileID: 109567981}
+ m_Layer: 0
+ m_Name: Directional light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &109567981
+Light:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 109567980}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 1
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Intensity: 0.8
+ m_Range: 10
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 0
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &109567982
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 109567980}
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 0, z: 100}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &217648247
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 217648251}
+ - component: {fileID: 217648250}
+ - component: {fileID: 217648249}
+ - component: {fileID: 217648248}
+ m_Layer: 0
+ m_Name: Cube-ApplyToMesh
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &217648248
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 217648247}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f6d1977a52888584496b1acc7e998011, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _media: {fileID: 1516615348}
+ _automaticStereoPacking: 1
+ _overrideStereoPacking: 0
+ _stereoRedGreenTint: 0
+ _defaultTexture: {fileID: 0}
+ _renderer: {fileID: 217648249}
+ _materialIndex: -1
+ _texturePropertyName: _MainTex
+ _offset: {x: 0, y: 0}
+ _scale: {x: 1, y: 1}
+--- !u!23 &217648249
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 217648247}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_MotionVectors: 2
+ m_LightProbeUsage: 0
+ m_ReflectionProbeUsage: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 3c2c8026b487d4d4a84e01da83637ceb, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 1
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &217648250
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 217648247}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &217648251
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 217648247}
+ m_LocalRotation: {x: 0.25000006, y: 0.25000006, z: -0.06698733, w: 0.9330127}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 30, y: 30, z: 0}
+--- !u!1 &918178074
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 918178075}
+ - component: {fileID: 918178077}
+ - component: {fileID: 918178076}
+ m_Layer: 5
+ m_Name: VideoDisplay
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &918178075
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 918178074}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 57396436}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 786, y: 733}
+ m_Pivot: {x: 1, y: 0}
+--- !u!114 &918178076
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 918178074}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0f17cdc186456a4469a139a104d2ca72, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ _mediaPlayer: {fileID: 1516615348}
+ _defaultTexture: {fileID: 0}
+ _uvRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ _setNativeSize: 0
+ _scaleMode: 2
+ _noDefaultDisplay: 1
+ _displayInEditor: 1
+--- !u!222 &918178077
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 918178074}
+--- !u!1 &939090645
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 939090647}
+ - component: {fileID: 939090646}
+ m_Layer: 0
+ m_Name: Skybox-ApplytoMaterial
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &939090646
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 939090645}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d2feedce2e2e63647b8f875ec0894a15, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _media: {fileID: 1516615348}
+ _automaticStereoPacking: 1
+ _overrideStereoPacking: 0
+ _stereoRedGreenTint: 0
+ _defaultTexture: {fileID: 0}
+ _material: {fileID: 2100000, guid: 276368b4e7f7f044e8288312f105954e, type: 2}
+ _texturePropertyName: _MainTex
+ _offset: {x: 0, y: 0}
+ _scale: {x: 1, y: 1}
+--- !u!4 &939090647
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 939090645}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1333834122
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1333834124}
+ - component: {fileID: 1333834123}
+ m_Layer: 0
+ m_Name: Overlay-DisplayIMGUI
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1333834123
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1333834122}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 75f3b319d2d69934d8bf545ab45c918d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 1516615348}
+ _scaleMode: 2
+ _color: {r: 1, g: 1, b: 1, a: 1}
+ _allowTransparency: 0
+ _useDepth: 0
+ _depth: 0
+ _isAreaFullScreen: 0
+ _areaX: 0
+ _areaY: 0.75
+ _areaWidth: 0.25
+ _areaHeight: 0.25
+ _showAreaInEditor: 1
+--- !u!4 &1333834124
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1333834122}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1516615347
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1516615349}
+ - component: {fileID: 1516615348}
+ m_Layer: 0
+ m_Name: MediaPlayer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1516615348
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1516615347}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 638c870cac4da414fba921606d504407, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaSource: 0
+ _mediaReference: {fileID: 11400000, guid: 9c4b497c86e965b4e8a37e8aa70b2fe0, type: 2}
+ _mediaLocation: 2
+ _mediaPath:
+ _fallbackMediaHints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _autoOpen: 1
+ _autoPlayOnStart: 1
+ _loop: 1
+ _audioVolume: 1
+ _audioBalance: 0
+ _audioMuted: 0
+ _playbackRate: 1
+ _useResampler: 0
+ _resampleMode: 0
+ _resampleBufferSize: 5
+ _videoMapping: 0
+ _textureFilterMode: 1
+ _textureWrapMode: 1
+ _textureAnisoLevel: 0
+ _sideloadSubtitles: 0
+ _subtitleLocation: 2
+ _subtitlePath:
+ _audioHeadTransform: {fileID: 0}
+ _audioFocusEnabled: 0
+ _audioFocusTransform: {fileID: 0}
+ _audioFocusWidthDegrees: 90
+ _audioFocusOffLevelDB: 0
+ _httpHeaders:
+ httpHeaders: []
+ _keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _events:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: RenderHeads.Media.AVProVideo.MediaPlayerEvent, Assembly-CSharp, Version=0.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+ _eventMask: -1
+ _pauseMediaOnAppPause: 1
+ _playMediaOnAppUnpause: 1
+ _persistent: 0
+ _forceFileFormat: 0
+ _optionsWindows:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 0
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintAlphaChannel: 0
+ useLowLatency: 0
+ forceAudioOutputDeviceName:
+ preferredFilters: []
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ _optionsMacOSX:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ flags: 0
+ _optionsIOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ flags: 0
+ _optionsTVOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ flags: 0
+ _optionsAndroid:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 2
+ useFastOesPath: 0
+ showPosterFrame: 0
+ audioOutput: 0
+ audio360ChannelMode: 0
+ preferSoftwareDecoder: 0
+ fileOffset: 0
+ startWithHighestBitrate: 0
+ minBufferMs: 50000
+ maxBufferMs: 50000
+ bufferForPlaybackMs: 2500
+ bufferForPlaybackAfterRebufferMs: 5000
+ _optionsWindowsUWP:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintOutput10Bit: 0
+ useLowLatency: 0
+ videoApi: 1
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ _optionsWebGL:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ externalLibrary: 0
+ useTextureMips: 0
+--- !u!4 &1516615349
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1516615347}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1661678277
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1661678278}
+ - component: {fileID: 1661678281}
+ - component: {fileID: 1661678280}
+ - component: {fileID: 1661678279}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1661678278
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1661678277}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 57396436}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 40, y: -40.00006}
+ m_SizeDelta: {x: 644.7, y: 430.4}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &1661678279
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1661678277}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1573420865, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_EffectColor: {r: 0, g: 0, b: 0, a: 0.753}
+ m_EffectDistance: {x: 4, y: -4}
+ m_UseGraphicAlpha: 1
+--- !u!114 &1661678280
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1661678277}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.86764705, g: 0.86764705, b: 0.86764705, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 54
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 61
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: 'Demo of 4 components used to display video:
+
+
+ DisplayUGUI (Right)
+
+ DisplayIMGUI (Left)
+
+ ApplyToMesh (Cube)
+
+ ApplyToMaterial (Skybox)'
+--- !u!222 &1661678281
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1661678277}
+--- !u!1 &1981163064
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1981163068}
+ - component: {fileID: 1981163067}
+ - component: {fileID: 1981163066}
+ - component: {fileID: 1981163065}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!45 &1981163065
+Skybox:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+ m_CustomSkybox: {fileID: 2100000, guid: 276368b4e7f7f044e8288312f105954e, type: 2}
+--- !u!81 &1981163066
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+--- !u!20 &1981163067
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 0
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+ m_StereoMirrorMode: 0
+--- !u!4 &1981163068
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1981163064}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -2.3}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_DisplayComponents.unity.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_DisplayComponents.unity.meta
new file mode 100755
index 0000000..59086f0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_DisplayComponents.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4313ef3d8aef8764ea98fd3a15361c9b
+timeCreated: 1601367920
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_MediaPlayer.unity b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_MediaPlayer.unity
new file mode 100755
index 0000000..313393f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_MediaPlayer.unity
@@ -0,0 +1,7241 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.12731704, g: 0.1341472, b: 0.121078566, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 0
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 0
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_LightingSettings: {fileID: 1212577174}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &22981400
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 22981401}
+ - component: {fileID: 22981404}
+ - component: {fileID: 22981403}
+ - component: {fileID: 22981402}
+ - component: {fileID: 22981405}
+ m_Layer: 5
+ m_Name: ButtonVolume
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &22981401
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 22981400}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &22981402
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 22981400}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 22981403}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &22981403
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 22981400}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: b246d2a0da7bbb3459e271e203c4abe1, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &22981404
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 22981400}
+ m_CullTransparentMesh: 1
+--- !u!114 &22981405
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 22981400}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 40
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &40432002
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 40432003}
+ - component: {fileID: 40432006}
+ - component: {fileID: 40432005}
+ - component: {fileID: 40432004}
+ - component: {fileID: 40432007}
+ m_Layer: 5
+ m_Name: ButtonNavForward
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &40432003
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 40432002}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &40432004
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 40432002}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 40432005}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &40432005
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 40432002}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: fc3335a6cd5229642a818d162865fe8a, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &40432006
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 40432002}
+ m_CullTransparentMesh: 1
+--- !u!114 &40432007
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 40432002}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 40
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &59539046
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 59539047}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &59539047
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 59539046}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 488596123}
+ - {fileID: 1874303459}
+ m_Father: {fileID: 885424030}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &88222860
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 88222861}
+ m_Layer: 5
+ m_Name: Fill Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &88222861
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 88222860}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 474561228}
+ - {fileID: 493180538}
+ - {fileID: 1394165240}
+ m_Father: {fileID: 780928702}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &93730164
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 93730165}
+ - component: {fileID: 93730168}
+ - component: {fileID: 93730167}
+ - component: {fileID: 93730166}
+ m_Layer: 5
+ m_Name: Text (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &93730165
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 93730164}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 545847633}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 232, y: -27}
+ m_SizeDelta: {x: 88, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &93730166
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 93730164}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 88
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &93730167
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 93730164}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 16
+ m_FontStyle: 0
+ m_BestFit: 1
+ m_MinSize: 16
+ m_MaxSize: 20
+ m_Alignment: 8
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Englishkjnknkjnjknj
+--- !u!222 &93730168
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 93730164}
+ m_CullTransparentMesh: 1
+--- !u!1 &114716514
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 114716515}
+ - component: {fileID: 114716517}
+ - component: {fileID: 114716516}
+ m_Layer: 5
+ m_Name: Fill
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &114716515
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114716514}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 2068782943}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &114716516
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114716514}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &114716517
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114716514}
+ m_CullTransparentMesh: 1
+--- !u!1 &169834369
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 169834370}
+ - component: {fileID: 169834372}
+ - component: {fileID: 169834373}
+ m_Layer: 5
+ m_Name: Controls
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &169834370
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 169834369}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1855381575}
+ - {fileID: 546037980}
+ - {fileID: 294816443}
+ - {fileID: 780928702}
+ - {fileID: 1660408040}
+ - {fileID: 1468283172}
+ m_Father: {fileID: 1242679089}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 80}
+ m_Pivot: {x: 0.5, y: 0}
+--- !u!222 &169834372
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 169834369}
+ m_CullTransparentMesh: 1
+--- !u!225 &169834373
+CanvasGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 169834369}
+ m_Enabled: 1
+ m_Alpha: 1
+ m_Interactable: 1
+ m_BlocksRaycasts: 1
+ m_IgnoreParentGroups: 0
+--- !u!1 &171654277
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 171654278}
+ - component: {fileID: 171654281}
+ - component: {fileID: 171654280}
+ - component: {fileID: 171654279}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &171654278
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 171654277}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1830688492}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 26, y: -27.17338}
+ m_SizeDelta: {x: 20, y: 22.34676}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &171654279
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 171654277}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 20
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &171654280
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 171654277}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: <
+--- !u!222 &171654281
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 171654277}
+ m_CullTransparentMesh: 1
+--- !u!1 &175670189
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 175670190}
+ m_Layer: 5
+ m_Name: Handle Slide Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &175670190
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 175670189}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 2080579700}
+ m_Father: {fileID: 780928702}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &179482993
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 179482994}
+ - component: {fileID: 179482998}
+ - component: {fileID: 179482997}
+ - component: {fileID: 179482996}
+ - component: {fileID: 179482995}
+ m_Layer: 5
+ m_Name: ButtonOptions
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &179482994
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 179482993}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 10
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &179482995
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 179482993}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 40
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &179482996
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 179482993}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 179482997}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &179482997
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 179482993}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: dced9abe5e3da3e47bbaa9d7febe796e, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &179482998
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 179482993}
+ m_CullTransparentMesh: 1
+--- !u!1 &238888637
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 238888642}
+ - component: {fileID: 238888641}
+ - component: {fileID: 238888638}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &238888638
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 238888637}
+ m_Enabled: 1
+--- !u!20 &238888641
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 238888637}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.16911763, g: 0.16911763, b: 0.16911763, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 0
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 0
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &238888642
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 238888637}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &294816442
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 294816443}
+ m_Layer: 5
+ m_Name: Timline-Hovers
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &294816443
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 294816442}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 603292265}
+ - {fileID: 796205621}
+ m_Father: {fileID: 169834370}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 0, y: 0.5}
+ m_AnchoredPosition: {x: 320, y: 120}
+ m_SizeDelta: {x: 80, y: 80}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &318960223
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 318960224}
+ - component: {fileID: 318960225}
+ m_Layer: 5
+ m_Name: Overlays
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &318960224
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 318960223}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 780993444}
+ - {fileID: 1803395928}
+ m_Father: {fileID: 1242679089}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 100, y: 100}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &318960225
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 318960223}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 382afb28aa5a7f1428ffeab5b7d15625, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _stalledImage: {fileID: 1803395929}
+ _feedbackImage: {fileID: 324349377}
+ _feedbackCanvas: {fileID: 780993445}
+ _startScale: 0.25
+ _endScale: 1
+ _animationSpeed: 2
+--- !u!1 &324349375
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 324349376}
+ - component: {fileID: 324349378}
+ - component: {fileID: 324349377}
+ m_Layer: 5
+ m_Name: Foreground
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &324349376
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 324349375}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 780993444}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 100, y: 100}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &324349377
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 324349375}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: 1d9b78c72d0d96c4ea3ffb49880bf0c6, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &324349378
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 324349375}
+ m_CullTransparentMesh: 1
+--- !u!1 &335631776
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 335631777}
+ - component: {fileID: 335631780}
+ - component: {fileID: 335631779}
+ - component: {fileID: 335631778}
+ m_Layer: 5
+ m_Name: Text (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &335631777
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 335631776}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1830688492}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 232, y: -27.17338}
+ m_SizeDelta: {x: 88, y: 22.34676}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &335631778
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 335631776}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 88
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &335631779
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 335631776}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 16
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 5
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text:
+--- !u!222 &335631780
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 335631776}
+ m_CullTransparentMesh: 1
+--- !u!1 &355505466
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 355505467}
+ - component: {fileID: 355505470}
+ - component: {fileID: 355505469}
+ - component: {fileID: 355505468}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &355505467
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 355505466}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 454297276}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 26, y: -27}
+ m_SizeDelta: {x: 20, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &355505468
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 355505466}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 20
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &355505469
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 355505466}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 7
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: "\u2714"
+--- !u!222 &355505470
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 355505466}
+ m_CullTransparentMesh: 1
+--- !u!1 &367235318
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 367235319}
+ - component: {fileID: 367235321}
+ - component: {fileID: 367235320}
+ m_Layer: 5
+ m_Name: ImageLive
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &367235319
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 367235318}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1029213876}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 0, y: -21.6}
+ m_SizeDelta: {x: 10, y: 10}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &367235320
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 367235318}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 0, b: 0, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &367235321
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 367235318}
+ m_CullTransparentMesh: 1
+--- !u!1 &446188616
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 446188617}
+ - component: {fileID: 446188620}
+ - component: {fileID: 446188619}
+ - component: {fileID: 446188618}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &446188617
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 446188616}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1274673524}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 26, y: -27}
+ m_SizeDelta: {x: 20, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &446188618
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 446188616}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 20
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &446188619
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 446188616}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 7
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: "\u2714"
+--- !u!222 &446188620
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 446188616}
+ m_CullTransparentMesh: 1
+--- !u!1 &454297275
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 454297276}
+ - component: {fileID: 454297281}
+ - component: {fileID: 454297280}
+ - component: {fileID: 454297279}
+ - component: {fileID: 454297278}
+ - component: {fileID: 454297277}
+ m_Layer: 5
+ m_Name: Button (5)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &454297276
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 454297275}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 355505467}
+ - {fileID: 1057449822}
+ - {fileID: 859638721}
+ m_Father: {fileID: 589857994}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 146, y: -244.34676}
+ m_SizeDelta: {x: 292, y: 54}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &454297277
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 454297275}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &454297278
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 454297275}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 16
+ m_Right: 16
+ m_Top: 16
+ m_Bottom: 16
+ m_ChildAlignment: 4
+ m_Spacing: 16
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &454297279
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 454297275}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_HighlightedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_PressedColor: {r: 0.36764705, g: 0.36764705, b: 0.36764705, a: 0.972549}
+ m_SelectedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_DisabledColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 454297280}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &454297280
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 454297275}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &454297281
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 454297275}
+ m_CullTransparentMesh: 1
+--- !u!1 &471157561
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 471157562}
+ - component: {fileID: 471157565}
+ - component: {fileID: 471157564}
+ - component: {fileID: 471157563}
+ - component: {fileID: 471157566}
+ m_Layer: 5
+ m_Name: SubtitleText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &471157562
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 471157561}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 2026627456}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0}
+ m_AnchorMax: {x: 0.5, y: 0}
+ m_AnchoredPosition: {x: 0, y: 39}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &471157563
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 471157561}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_EffectColor: {r: 0, g: 0, b: 0, a: 0.828}
+ m_EffectDistance: {x: 2, y: -2}
+ m_UseGraphicAlpha: 0
+--- !u!114 &471157564
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 471157561}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 40
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 0
+ m_MaxSize: 60
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: 'BOLD SUBTITLE Line 1
+
+ GREEN SUBTITLE
+ Line 2'
+--- !u!222 &471157565
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 471157561}
+ m_CullTransparentMesh: 1
+--- !u!114 &471157566
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 471157561}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!1 &474561227
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 474561228}
+ - component: {fileID: 474561229}
+ - component: {fileID: 474561230}
+ m_Layer: 5
+ m_Name: Fill-Seek
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &474561228
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 474561227}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 88222861}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &474561229
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 474561227}
+ m_CullTransparentMesh: 1
+--- !u!114 &474561230
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 474561227}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a922ae46315cc884c879056759d73251, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &488596122
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 488596123}
+ - component: {fileID: 488596125}
+ - component: {fileID: 488596124}
+ m_Layer: 5
+ m_Name: Touch Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &488596123
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 488596122}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 59539047}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: 1.5299999, y: -0.00000023841858}
+ m_SizeDelta: {x: 14.940001, y: 16}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &488596124
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 488596122}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 0}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &488596125
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 488596122}
+ m_CullTransparentMesh: 1
+--- !u!1 &493180535
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 493180538}
+ - component: {fileID: 493180537}
+ - component: {fileID: 493180536}
+ m_Layer: 5
+ m_Name: Fill-Buffered
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &493180536
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 493180535}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a922ae46315cc884c879056759d73251, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.080233596, g: 0.7794118, b: 0.46116525, a: 0.222}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &493180537
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 493180535}
+ m_CullTransparentMesh: 1
+--- !u!224 &493180538
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 493180535}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 88222861}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &499385376
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 499385377}
+ - component: {fileID: 499385380}
+ - component: {fileID: 499385379}
+ - component: {fileID: 499385378}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &499385377
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 499385376}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 545847633}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 26, y: -27}
+ m_SizeDelta: {x: 20, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &499385378
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 499385376}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 20
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &499385379
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 499385376}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 7
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: "\u2714"
+--- !u!222 &499385380
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 499385376}
+ m_CullTransparentMesh: 1
+--- !u!1 &545847632
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 545847633}
+ - component: {fileID: 545847638}
+ - component: {fileID: 545847637}
+ - component: {fileID: 545847636}
+ - component: {fileID: 545847635}
+ - component: {fileID: 545847634}
+ m_Layer: 5
+ m_Name: Button (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &545847633
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 545847632}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 499385377}
+ - {fileID: 1705561393}
+ - {fileID: 93730165}
+ m_Father: {fileID: 589857994}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 146, y: -82.346756}
+ m_SizeDelta: {x: 292, y: 54}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &545847634
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 545847632}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &545847635
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 545847632}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 16
+ m_Right: 16
+ m_Top: 16
+ m_Bottom: 16
+ m_ChildAlignment: 4
+ m_Spacing: 16
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &545847636
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 545847632}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_HighlightedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_PressedColor: {r: 0.36764705, g: 0.36764705, b: 0.36764705, a: 0.972549}
+ m_SelectedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_DisabledColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 545847637}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &545847637
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 545847632}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &545847638
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 545847632}
+ m_CullTransparentMesh: 1
+--- !u!1 &546037979
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 546037980}
+ - component: {fileID: 546037982}
+ - component: {fileID: 546037981}
+ m_Layer: 5
+ m_Name: Background-Gradient
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &546037980
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 546037979}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 169834370}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 93.5}
+ m_SizeDelta: {x: 0, y: 187}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &546037981
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 546037979}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 0.941}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: e8fa92438398bb240b71be8b23d90df5, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &546037982
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 546037979}
+ m_CullTransparentMesh: 1
+--- !u!1 &563840792
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 563840793}
+ - component: {fileID: 563840796}
+ - component: {fileID: 563840795}
+ m_Layer: 5
+ m_Name: SubtitleBackground
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &563840793
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 563840792}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 2026627456}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0}
+ m_AnchorMax: {x: 0.5, y: 0}
+ m_AnchoredPosition: {x: 0, y: 39}
+ m_SizeDelta: {x: 480.9, y: 103.7}
+ m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &563840795
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 563840792}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 0.816}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &563840796
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 563840792}
+ m_CullTransparentMesh: 1
+--- !u!1 &589857993
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 589857994}
+ - component: {fileID: 589857998}
+ - component: {fileID: 589857997}
+ - component: {fileID: 589857996}
+ - component: {fileID: 589857995}
+ m_Layer: 5
+ m_Name: SubtitlesMenu
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &589857994
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 589857993}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1830688492}
+ - {fileID: 801010164}
+ - {fileID: 545847633}
+ - {fileID: 1274673524}
+ - {fileID: 1854404335}
+ - {fileID: 454297276}
+ m_Father: {fileID: 1468283172}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 292, y: 271.34674}
+ m_Pivot: {x: 1, y: 0}
+--- !u!114 &589857995
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 589857993}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &589857996
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 589857993}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 1
+ m_Spacing: 0
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &589857997
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 589857993}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.2205882, g: 0.2205882, b: 0.2205882, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 0
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &589857998
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 589857993}
+ m_CullTransparentMesh: 1
+--- !u!1 &603292264
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 603292265}
+ - component: {fileID: 603292267}
+ - component: {fileID: 603292266}
+ m_Layer: 5
+ m_Name: HoverThumbnail
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &603292265
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 603292264}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 294816443}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 37.78}
+ m_SizeDelta: {x: 192, y: 108}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &603292266
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 603292264}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0f17cdc186456a4469a139a104d2ca72, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ _mediaPlayer: {fileID: 0}
+ _defaultTexture: {fileID: 0}
+ _uvRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ _setNativeSize: 0
+ _scaleMode: 2
+ _noDefaultDisplay: 1
+ _displayInEditor: 0
+--- !u!222 &603292267
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 603292264}
+ m_CullTransparentMesh: 1
+--- !u!1 &656515031
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 656515032}
+ - component: {fileID: 656515035}
+ - component: {fileID: 656515034}
+ - component: {fileID: 656515033}
+ m_Layer: 5
+ m_Name: Text (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &656515032
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 656515031}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1274673524}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 112, y: -27}
+ m_SizeDelta: {x: 120, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &656515033
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 656515031}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 120
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &656515034
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 656515031}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 1
+ m_BestFit: 1
+ m_MinSize: 18
+ m_MaxSize: 20
+ m_Alignment: 6
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Spanishkjnkjnkjnkjn
+--- !u!222 &656515035
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 656515031}
+ m_CullTransparentMesh: 1
+--- !u!1 &665104916
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 665104917}
+ - component: {fileID: 665104919}
+ - component: {fileID: 665104918}
+ - component: {fileID: 665104920}
+ m_Layer: 0
+ m_Name: VideoDisplay
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &665104917
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 665104916}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1016508853}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0.00012207031, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &665104918
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 665104916}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0f17cdc186456a4469a139a104d2ca72, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ _mediaPlayer: {fileID: 2022425658}
+ _defaultTexture: {fileID: 0}
+ _uvRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ _setNativeSize: 0
+ _scaleMode: 2
+ _noDefaultDisplay: 1
+ _displayInEditor: 0
+--- !u!222 &665104919
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 665104916}
+ m_CullTransparentMesh: 1
+--- !u!114 &665104920
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 665104916}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Delegates: []
+--- !u!1 &780928701
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 780928702}
+ - component: {fileID: 780928703}
+ - component: {fileID: 780928704}
+ m_Layer: 5
+ m_Name: Timeline
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &780928702
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 780928701}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1621595376}
+ - {fileID: 88222861}
+ - {fileID: 175670190}
+ m_Father: {fileID: 169834370}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 1, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 46.5}
+ m_SizeDelta: {x: -32.00001, y: 10}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &780928703
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 780928701}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 2080579701}
+ m_FillRect: {fileID: 0}
+ m_HandleRect: {fileID: 2080579700}
+ m_Direction: 0
+ m_MinValue: 0
+ m_MaxValue: 1
+ m_WholeNumbers: 0
+ m_Value: 0
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &780928704
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 780928701}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Delegates: []
+--- !u!1 &780993443
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 780993444}
+ - component: {fileID: 780993446}
+ - component: {fileID: 780993445}
+ m_Layer: 5
+ m_Name: Feedback
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &780993444
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 780993443}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1689714635}
+ - {fileID: 324349376}
+ m_Father: {fileID: 318960224}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 150, y: 150}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &780993445
+CanvasGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 780993443}
+ m_Enabled: 1
+ m_Alpha: 1
+ m_Interactable: 0
+ m_BlocksRaycasts: 0
+ m_IgnoreParentGroups: 1
+--- !u!222 &780993446
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 780993443}
+ m_CullTransparentMesh: 1
+--- !u!1 &796205620
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 796205621}
+ - component: {fileID: 796205623}
+ - component: {fileID: 796205622}
+ - component: {fileID: 796205624}
+ m_Layer: 5
+ m_Name: HoverTime
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &796205621
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 796205620}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 294816443}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 100, y: 100}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &796205622
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 796205620}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 40
+ m_Alignment: 7
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: 01:23
+--- !u!222 &796205623
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 796205620}
+ m_CullTransparentMesh: 1
+--- !u!114 &796205624
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 796205620}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5}
+ m_EffectDistance: {x: 1, y: -1}
+ m_UseGraphicAlpha: 1
+--- !u!1 &801010163
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 801010164}
+ - component: {fileID: 801010167}
+ - component: {fileID: 801010166}
+ - component: {fileID: 801010165}
+ m_Layer: 5
+ m_Name: HorizLine
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &801010164
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 801010163}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 589857994}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 146, y: -54.84676}
+ m_SizeDelta: {x: 290.8, y: 1}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &801010165
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 801010163}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: 1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &801010166
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 801010163}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.066176474, g: 0.066176474, b: 0.066176474, a: 0.809}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &801010167
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 801010163}
+ m_CullTransparentMesh: 1
+--- !u!1 &859638720
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 859638721}
+ - component: {fileID: 859638724}
+ - component: {fileID: 859638723}
+ - component: {fileID: 859638722}
+ m_Layer: 5
+ m_Name: Text (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &859638721
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 859638720}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 454297276}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 232, y: -27}
+ m_SizeDelta: {x: 88, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &859638722
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 859638720}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 88
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &859638723
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 859638720}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 16
+ m_FontStyle: 0
+ m_BestFit: 1
+ m_MinSize: 16
+ m_MaxSize: 20
+ m_Alignment: 8
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Englishkjnknkjnjknj
+--- !u!222 &859638724
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 859638720}
+ m_CullTransparentMesh: 1
+--- !u!1 &869096221
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 869096222}
+ - component: {fileID: 869096224}
+ - component: {fileID: 869096223}
+ m_Layer: 5
+ m_Name: TextMediaName
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &869096222
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 869096221}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 11
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 100}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &869096223
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 869096221}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 40
+ m_Alignment: 3
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: 1080p
+--- !u!222 &869096224
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 869096221}
+ m_CullTransparentMesh: 1
+--- !u!1 &885424029
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 885424030}
+ - component: {fileID: 885424031}
+ - component: {fileID: 885424032}
+ - component: {fileID: 885424033}
+ m_Layer: 5
+ m_Name: SliderVolume
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &885424030
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 885424029}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 59539047}
+ - {fileID: 2068782943}
+ - {fileID: 1092541543}
+ m_Father: {fileID: 1005533424}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 0, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 100, y: 20}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &885424031
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 885424029}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1133995414}
+ m_FillRect: {fileID: 114716515}
+ m_HandleRect: {fileID: 1133995413}
+ m_Direction: 0
+ m_MinValue: 0
+ m_MaxValue: 1
+ m_WholeNumbers: 0
+ m_Value: 0.24
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &885424032
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 885424029}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 100
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &885424033
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 885424029}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Delegates: []
+--- !u!1 &937675613
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 937675614}
+ - component: {fileID: 937675617}
+ - component: {fileID: 937675616}
+ - component: {fileID: 937675615}
+ m_Layer: 5
+ m_Name: Text (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &937675614
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 937675613}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1830688492}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 112, y: -27.17338}
+ m_SizeDelta: {x: 120, y: 22.34676}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &937675615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 937675613}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 120
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &937675616
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 937675613}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 1
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 3
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Subtitles/CC
+--- !u!222 &937675617
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 937675613}
+ m_CullTransparentMesh: 1
+--- !u!1 &991206228
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 991206229}
+ - component: {fileID: 991206231}
+ - component: {fileID: 991206230}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &991206229
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 991206228}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1621595376}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &991206230
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 991206228}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.5514706, g: 0.5514706, b: 0.5514706, a: 0.122}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &991206231
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 991206228}
+ m_CullTransparentMesh: 1
+--- !u!1 &1005533423
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1005533424}
+ - component: {fileID: 1005533426}
+ - component: {fileID: 1005533425}
+ m_Layer: 5
+ m_Name: VolumeMask
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1005533424
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1005533423}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 885424030}
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1005533425
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1005533423}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 100
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1005533426
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1005533423}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding: {x: 0, y: 0, z: 0, w: 0}
+ m_Softness: {x: 0, y: 0}
+--- !u!1 &1016508852
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1016508853}
+ m_Layer: 5
+ m_Name: Video
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1016508853
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1016508852}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 665104917}
+ m_Father: {fileID: 1242679089}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -0.00012207031, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1020354602
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1020354603}
+ - component: {fileID: 1020354607}
+ - component: {fileID: 1020354606}
+ - component: {fileID: 1020354605}
+ - component: {fileID: 1020354604}
+ m_Layer: 5
+ m_Name: ButtonNavBack
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1020354603
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1020354602}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1020354604
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1020354602}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 40
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1020354605
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1020354602}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1020354606}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1020354606
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1020354602}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: 3defb26db59b1fa489c3d83b2dda2210, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1020354607
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1020354602}
+ m_CullTransparentMesh: 1
+--- !u!1 &1029213875
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1029213876}
+ - component: {fileID: 1029213878}
+ - component: {fileID: 1029213877}
+ - component: {fileID: 1029213879}
+ - component: {fileID: 1029213880}
+ m_Layer: 5
+ m_Name: TextLive
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1029213876
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1029213875}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 367235319}
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1029213877
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1029213875}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 2
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: ' LIVE'
+--- !u!222 &1029213878
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1029213875}
+ m_CullTransparentMesh: 1
+--- !u!114 &1029213879
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1029213875}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5}
+ m_EffectDistance: {x: 1, y: -1}
+ m_UseGraphicAlpha: 1
+--- !u!114 &1029213880
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1029213875}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 60
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &1055124374
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1055124375}
+ - component: {fileID: 1055124377}
+ - component: {fileID: 1055124376}
+ m_Layer: 5
+ m_Name: TouchArea
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1055124375
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1055124374}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1621595376}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 14}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1055124376
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1055124374}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 0}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1055124377
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1055124374}
+ m_CullTransparentMesh: 1
+--- !u!1 &1057449821
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1057449822}
+ - component: {fileID: 1057449825}
+ - component: {fileID: 1057449824}
+ - component: {fileID: 1057449823}
+ m_Layer: 5
+ m_Name: Text (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1057449822
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1057449821}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 454297276}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 112, y: -27}
+ m_SizeDelta: {x: 120, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1057449823
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1057449821}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 120
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1057449824
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1057449821}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 1
+ m_BestFit: 1
+ m_MinSize: 18
+ m_MaxSize: 20
+ m_Alignment: 6
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Spanishkjnkjnkjnkjn
+--- !u!222 &1057449825
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1057449821}
+ m_CullTransparentMesh: 1
+--- !u!1 &1061065829
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1061065832}
+ - component: {fileID: 1061065831}
+ - component: {fileID: 1061065830}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1061065830
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1061065829}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &1061065831
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1061065829}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 5
+--- !u!4 &1061065832
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1061065829}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1085041938
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1085041939}
+ - component: {fileID: 1085041942}
+ - component: {fileID: 1085041941}
+ - component: {fileID: 1085041940}
+ m_Layer: 5
+ m_Name: Text (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1085041939
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1085041938}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1854404335}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 232, y: -27}
+ m_SizeDelta: {x: 88, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1085041940
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1085041938}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 88
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1085041941
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1085041938}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 16
+ m_FontStyle: 0
+ m_BestFit: 1
+ m_MinSize: 16
+ m_MaxSize: 20
+ m_Alignment: 8
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Englishkjnknkjnjknj
+--- !u!222 &1085041942
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1085041938}
+ m_CullTransparentMesh: 1
+--- !u!1 &1092541542
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1092541543}
+ m_Layer: 5
+ m_Name: Handle Slide Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1092541543
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1092541542}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1133995413}
+ m_Father: {fileID: 885424030}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1095210082
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1095210083}
+ - component: {fileID: 1095210085}
+ - component: {fileID: 1095210084}
+ - component: {fileID: 1095210086}
+ m_Layer: 5
+ m_Name: TextTimeDuration
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1095210083
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1095210082}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1095210084
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1095210082}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 2
+ m_MaxSize: 40
+ m_Alignment: 3
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: 00:00 / 32:00
+--- !u!222 &1095210085
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1095210082}
+ m_CullTransparentMesh: 1
+--- !u!114 &1095210086
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1095210082}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5}
+ m_EffectDistance: {x: 1, y: -1}
+ m_UseGraphicAlpha: 1
+--- !u!1 &1133995412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1133995413}
+ - component: {fileID: 1133995415}
+ - component: {fileID: 1133995414}
+ m_Layer: 5
+ m_Name: Handle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1133995413
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1133995412}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1092541543}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1133995414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1133995412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1133995415
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1133995412}
+ m_CullTransparentMesh: 1
+--- !u!1 &1142278101
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1142278102}
+ - component: {fileID: 1142278105}
+ - component: {fileID: 1142278104}
+ - component: {fileID: 1142278103}
+ m_Layer: 5
+ m_Name: Text (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1142278102
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1142278101}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1854404335}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 112, y: -27}
+ m_SizeDelta: {x: 120, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1142278103
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1142278101}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 120
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1142278104
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1142278101}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 1
+ m_BestFit: 1
+ m_MinSize: 18
+ m_MaxSize: 20
+ m_Alignment: 6
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Spanishkjnkjnkjnkjn
+--- !u!222 &1142278105
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1142278101}
+ m_CullTransparentMesh: 1
+--- !u!850595691 &1212577174
+LightingSettings:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Settings.lighting
+ serializedVersion: 4
+ m_GIWorkflowMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_RealtimeEnvironmentLighting: 1
+ m_BounceScale: 1
+ m_AlbedoBoost: 1
+ m_IndirectOutputScale: 1
+ m_UsingShadowmask: 1
+ m_BakeBackend: 0
+ m_LightmapMaxSize: 1024
+ m_BakeResolution: 40
+ m_Padding: 2
+ m_LightmapCompression: 3
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAO: 0
+ m_MixedBakeMode: 2
+ m_LightmapsBakeMode: 1
+ m_FilterMode: 1
+ m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_RealtimeResolution: 2
+ m_ForceWhiteAlbedo: 0
+ m_ForceUpdates: 0
+ m_FinalGather: 0
+ m_FinalGatherRayCount: 256
+ m_FinalGatherFiltering: 1
+ m_PVRCulling: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_LightProbeSampleCountMultiplier: 4
+ m_PVRBounces: 2
+ m_PVRMinBounces: 2
+ m_PVREnvironmentMIS: 0
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_PVRTiledBaking: 0
+--- !u!1 &1242679085
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1242679089}
+ - component: {fileID: 1242679088}
+ - component: {fileID: 1242679087}
+ - component: {fileID: 1242679086}
+ - component: {fileID: 1242679090}
+ m_Layer: 5
+ m_Name: MediaPlayerUI
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1242679086
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1242679085}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1242679087
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1242679085}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1280, y: 720}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0.25
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &1242679088
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1242679085}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &1242679089
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1242679085}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1016508853}
+ - {fileID: 2026627456}
+ - {fileID: 169834370}
+ - {fileID: 318960224}
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!114 &1242679090
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1242679085}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 35bb2f3708dd0394cb564ca3557a37fc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 2022425658}
+ _keyVolumeDelta: 0.05
+ _jumpDeltaTime: 5
+ _showOptions: 0
+ _autoHide: 1
+ _userInactiveDuration: 3
+ _useAudioFading: 1
+ _enableKeyboardControls: 1
+ KeyVolumeUp: 273
+ KeyVolumeDown: 274
+ KeyTogglePlayPause: 32
+ KeyToggleMute: 109
+ KeyJumpForward: 275
+ KeyJumpBack: 276
+ _overlayManager: {fileID: 318960225}
+ _thumbnailMediaPlayer: {fileID: 0}
+ _timelineTip: {fileID: 294816443}
+ _canvasTransform: {fileID: 1242679089}
+ _sliderTime: {fileID: 780928703}
+ _videoTouch: {fileID: 665104920}
+ _controlsGroup: {fileID: 169834373}
+ _liveItem: {fileID: 1029213875}
+ _textMediaName: {fileID: 869096223}
+ _textTimeDuration: {fileID: 1095210084}
+ _sliderVolume: {fileID: 885424031}
+ _buttonPlayPause: {fileID: 1716524900}
+ _buttonVolume: {fileID: 22981402}
+ _buttonSubtitles: {fileID: 1414769514}
+ _buttonOptions: {fileID: 179482996}
+ _buttonTimeBack: {fileID: 1020354605}
+ _buttonTimeForward: {fileID: 40432004}
+ _imageAudioSpectrum: {fileID: 2122776264}
+ _optionsMenuRoot: {fileID: 1468283171}
+ _segmentsSeek: {fileID: 474561230}
+ _segmentsBuffered: {fileID: 493180536}
+ _segmentsProgress: {fileID: 1394165242}
+--- !u!1 &1274673523
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1274673524}
+ - component: {fileID: 1274673529}
+ - component: {fileID: 1274673528}
+ - component: {fileID: 1274673527}
+ - component: {fileID: 1274673526}
+ - component: {fileID: 1274673525}
+ m_Layer: 5
+ m_Name: Button (3)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1274673524
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1274673523}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 446188617}
+ - {fileID: 656515032}
+ - {fileID: 1306575570}
+ m_Father: {fileID: 589857994}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 146, y: -136.34676}
+ m_SizeDelta: {x: 292, y: 54}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1274673525
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1274673523}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &1274673526
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1274673523}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 16
+ m_Right: 16
+ m_Top: 16
+ m_Bottom: 16
+ m_ChildAlignment: 4
+ m_Spacing: 16
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &1274673527
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1274673523}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_HighlightedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_PressedColor: {r: 0.36764705, g: 0.36764705, b: 0.36764705, a: 0.972549}
+ m_SelectedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_DisabledColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1274673528}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1274673528
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1274673523}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1274673529
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1274673523}
+ m_CullTransparentMesh: 1
+--- !u!1 &1306575569
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1306575570}
+ - component: {fileID: 1306575573}
+ - component: {fileID: 1306575572}
+ - component: {fileID: 1306575571}
+ m_Layer: 5
+ m_Name: Text (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1306575570
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1306575569}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1274673524}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 232, y: -27}
+ m_SizeDelta: {x: 88, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1306575571
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1306575569}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 88
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1306575572
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1306575569}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 16
+ m_FontStyle: 0
+ m_BestFit: 1
+ m_MinSize: 16
+ m_MaxSize: 20
+ m_Alignment: 8
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Englishkjnknkjnjknj
+--- !u!222 &1306575573
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1306575569}
+ m_CullTransparentMesh: 1
+--- !u!1 &1394165239
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1394165240}
+ - component: {fileID: 1394165241}
+ - component: {fileID: 1394165242}
+ m_Layer: 5
+ m_Name: Fill-Progress
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1394165240
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1394165239}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 88222861}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1394165241
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1394165239}
+ m_CullTransparentMesh: 1
+--- !u!114 &1394165242
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1394165239}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a922ae46315cc884c879056759d73251, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.080233596, g: 0.7794118, b: 0.46116525, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &1414769511
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414769512}
+ - component: {fileID: 1414769516}
+ - component: {fileID: 1414769515}
+ - component: {fileID: 1414769514}
+ - component: {fileID: 1414769513}
+ m_Layer: 5
+ m_Name: ButtonSubtitles
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1414769512
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414769511}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1.0000005, y: 1.0000005, z: 1.0000005}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 9
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1414769513
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414769511}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 40
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1414769514
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414769511}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1414769515}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1414769515
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414769511}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: 8e67518da82e8334685a53cd09579095, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1414769516
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414769511}
+ m_CullTransparentMesh: 1
+--- !u!1 &1427968808
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1427968809}
+ - component: {fileID: 1427968812}
+ - component: {fileID: 1427968811}
+ - component: {fileID: 1427968810}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1427968809
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1427968808}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1854404335}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 26, y: -27}
+ m_SizeDelta: {x: 20, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1427968810
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1427968808}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 20
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1427968811
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1427968808}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 1
+ m_MaxSize: 54
+ m_Alignment: 7
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: "\u2714"
+--- !u!222 &1427968812
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1427968808}
+ m_CullTransparentMesh: 1
+--- !u!1 &1468283171
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1468283172}
+ m_Layer: 5
+ m_Name: OptionsMenu
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &1468283172
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1468283171}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 589857994}
+ m_Father: {fileID: 169834370}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 80}
+ m_SizeDelta: {x: 1280, y: 640}
+ m_Pivot: {x: 1, y: 0}
+--- !u!1 &1621595375
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1621595376}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1621595376
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1621595375}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1055124375}
+ - {fileID: 991206229}
+ m_Father: {fileID: 780928702}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1660408039
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1660408040}
+ - component: {fileID: 1660408041}
+ m_Layer: 5
+ m_Name: BottomRow
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1660408040
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1660408039}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1716524899}
+ - {fileID: 1020354603}
+ - {fileID: 40432003}
+ - {fileID: 22981401}
+ - {fileID: 1005533424}
+ - {fileID: 1095210083}
+ - {fileID: 1029213876}
+ - {fileID: 1692025617}
+ - {fileID: 2122776261}
+ - {fileID: 1414769512}
+ - {fileID: 179482994}
+ - {fileID: 869096222}
+ m_Father: {fileID: 169834370}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 1, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1660408041
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1660408039}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 16
+ m_Right: 34
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 3
+ m_Spacing: 16
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 1
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!1 &1689714634
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1689714635}
+ - component: {fileID: 1689714637}
+ - component: {fileID: 1689714636}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1689714635
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1689714634}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 780993444}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 150, y: 150}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1689714636
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1689714634}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: 42d01ca03bef81a4db5efcc72b712aca, type: 2}
+ m_Color: {r: 0, g: 0, b: 0, a: 0.685}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1689714637
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1689714634}
+ m_CullTransparentMesh: 1
+--- !u!1 &1692025616
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1692025617}
+ - component: {fileID: 1692025618}
+ m_Layer: 5
+ m_Name: Spacer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1692025617
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1692025616}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 7
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1692025618
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1692025616}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: 1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &1705561392
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1705561393}
+ - component: {fileID: 1705561396}
+ - component: {fileID: 1705561395}
+ - component: {fileID: 1705561394}
+ m_Layer: 5
+ m_Name: Text (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1705561393
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1705561392}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 545847633}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 112, y: -27}
+ m_SizeDelta: {x: 120, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1705561394
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1705561392}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: 120
+ m_PreferredHeight: 22
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &1705561395
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1705561392}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 20
+ m_FontStyle: 1
+ m_BestFit: 1
+ m_MinSize: 18
+ m_MaxSize: 20
+ m_Alignment: 6
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Spanishkjnkjnkjnkjn
+--- !u!222 &1705561396
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1705561392}
+ m_CullTransparentMesh: 1
+--- !u!1 &1716524898
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1716524899}
+ - component: {fileID: 1716524902}
+ - component: {fileID: 1716524901}
+ - component: {fileID: 1716524900}
+ - component: {fileID: 1716524903}
+ m_Layer: 5
+ m_Name: ButtonPlayPause
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1716524899
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1716524898}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 40}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1716524900
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1716524898}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 0
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1716524901}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1716524901
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1716524898}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: 82d37723c9304fa4e9f2cd4daf2351ad, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1716524902
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1716524898}
+ m_CullTransparentMesh: 1
+--- !u!114 &1716524903
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1716524898}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 40
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &1803395927
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1803395928}
+ - component: {fileID: 1803395930}
+ - component: {fileID: 1803395929}
+ m_Layer: 5
+ m_Name: StalledRing
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1803395928
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1803395927}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 318960224}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 200, y: 200}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1803395929
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1803395927}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: 9c36a7d03d5746f4bab781d213a86f49, type: 2}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1803395930
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1803395927}
+ m_CullTransparentMesh: 1
+--- !u!1 &1830688491
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1830688492}
+ - component: {fileID: 1830688497}
+ - component: {fileID: 1830688496}
+ - component: {fileID: 1830688494}
+ - component: {fileID: 1830688493}
+ m_Layer: 5
+ m_Name: Title
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1830688492
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1830688491}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 171654278}
+ - {fileID: 937675614}
+ - {fileID: 335631777}
+ m_Father: {fileID: 589857994}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 146, y: -27.17338}
+ m_SizeDelta: {x: 292, y: 54.34676}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1830688493
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1830688491}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &1830688494
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1830688491}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 16
+ m_Right: 16
+ m_Top: 16
+ m_Bottom: 16
+ m_ChildAlignment: 4
+ m_Spacing: 16
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &1830688496
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1830688491}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1830688497
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1830688491}
+ m_CullTransparentMesh: 1
+--- !u!1 &1854404334
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1854404335}
+ - component: {fileID: 1854404340}
+ - component: {fileID: 1854404339}
+ - component: {fileID: 1854404338}
+ - component: {fileID: 1854404337}
+ - component: {fileID: 1854404336}
+ m_Layer: 5
+ m_Name: Button (4)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1854404335
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1854404334}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1427968809}
+ - {fileID: 1142278102}
+ - {fileID: 1085041939}
+ m_Father: {fileID: 589857994}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 146, y: -190.34676}
+ m_SizeDelta: {x: 292, y: 54}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1854404336
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1854404334}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &1854404337
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1854404334}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 16
+ m_Right: 16
+ m_Top: 16
+ m_Bottom: 16
+ m_ChildAlignment: 4
+ m_Spacing: 16
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &1854404338
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1854404334}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_HighlightedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_PressedColor: {r: 0.36764705, g: 0.36764705, b: 0.36764705, a: 0.972549}
+ m_SelectedColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_DisabledColor: {r: 0.08088237, g: 0.08088237, b: 0.08088237, a: 0.972549}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Highlighted
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1854404339}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1854404339
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1854404334}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1854404340
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1854404334}
+ m_CullTransparentMesh: 1
+--- !u!1 &1855381574
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1855381575}
+ - component: {fileID: 1855381577}
+ - component: {fileID: 1855381576}
+ m_Layer: 5
+ m_Name: Background-InputBlocker
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1855381575
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1855381574}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 169834370}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 15}
+ m_SizeDelta: {x: 0, y: 30}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1855381576
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1855381574}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 0}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1855381577
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1855381574}
+ m_CullTransparentMesh: 1
+--- !u!1 &1874303458
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1874303459}
+ - component: {fileID: 1874303461}
+ - component: {fileID: 1874303460}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1874303459
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1874303458}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1.0000026, y: 1.0000026, z: 1.0000026}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 59539047}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: -0.000015258789, y: -0.0000076293945}
+ m_SizeDelta: {x: 0, y: 5}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1874303460
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1874303458}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1874303461
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1874303458}
+ m_CullTransparentMesh: 1
+--- !u!1 &2022425657
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2022425659}
+ - component: {fileID: 2022425658}
+ - component: {fileID: 2022425661}
+ - component: {fileID: 2022425660}
+ m_Layer: 0
+ m_Name: MediaPlayer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &2022425658
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2022425657}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 638c870cac4da414fba921606d504407, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaSource: 0
+ _mediaReference: {fileID: 11400000, guid: 7b8a48f17a76b0d449f396690db75ebf, type: 2}
+ _mediaPath:
+ _pathType: 0
+ _path:
+ _fallbackMediaHints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _autoOpen: 1
+ _autoPlayOnStart: 1
+ _loop: 1
+ _audioVolume: 1
+ _audioBalance: 0
+ _audioMuted: 0
+ _playbackRate: 1
+ _useResampler: 0
+ _resampleMode: 0
+ _resampleBufferSize: 5
+ _videoMapping: 0
+ _textureFilterMode: 1
+ _textureWrapMode: 1
+ _textureAnisoLevel: 0
+ _useVideoResolve: 0
+ _videoResolveOptions:
+ applyHSBC: 0
+ hue: 0
+ saturation: 0.5
+ brightness: 0.5
+ contrast: 0.5
+ gamma: 1
+ tint: {r: 1, g: 1, b: 1, a: 1}
+ generateMipmaps: 0
+ _sideloadSubtitles: 0
+ _subtitlePath:
+ _pathType: 2
+ _path:
+ _audioHeadTransform: {fileID: 0}
+ _audioFocusEnabled: 0
+ _audioFocusTransform: {fileID: 0}
+ _audioFocusWidthDegrees: 90
+ _audioFocusOffLevelDB: 0
+ _httpHeaders:
+ httpHeaders: []
+ _keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _events:
+ m_PersistentCalls:
+ m_Calls: []
+ _eventMask: -1
+ _pauseMediaOnAppPause: 1
+ _playMediaOnAppUnpause: 1
+ _persistent: 0
+ _forceFileFormat: 0
+ _optionsWindows:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 0
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintAlphaChannel: 0
+ useLowLatency: 0
+ useCustomMovParser: 0
+ useHapNotchLC: 0
+ useStereoDetection: 1
+ useTextTrackSupport: 1
+ useFacebookAudio360Support: 1
+ useAudioDelay: 0
+ bufferedFrameSelection: 0
+ pauseOnPrerollComplete: 0
+ forceAudioOutputDeviceName:
+ preferredFilters: []
+ audioOutput: 1
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ parallelFrameCount: 3
+ prerollFrameCount: 4
+ useUnityAudio: 0
+ enableAudio360: 0
+ _optionsMacOSX:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ _audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _customPreferredMaximumResolution: {x: 0, y: 0}
+ _optionsIOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ _audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _customPreferredMaximumResolution: {x: 0, y: 0}
+ _optionsTVOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ _audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _customPreferredMaximumResolution: {x: 0, y: 0}
+ _optionsAndroid:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _preferredMaximumResolution: 0
+ _customPreferredMaximumResolution: {x: 0, y: 0}
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ videoApi: 2
+ useFastOesPath: 0
+ showPosterFrame: 0
+ audioOutput: 0
+ audio360ChannelMode: 0
+ preferSoftwareDecoder: 0
+ blitTextureFiltering: 0
+ fileOffset: 0
+ startWithHighestBitrate: 0
+ minBufferMs: 50000
+ maxBufferMs: 50000
+ bufferForPlaybackMs: 2500
+ bufferForPlaybackAfterRebufferMs: 5000
+ enableAudio360: 0
+ _optionsWindowsUWP:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintOutput10Bit: 0
+ useLowLatency: 0
+ videoApi: 1
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ _optionsWebGL:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ externalLibrary: 0
+ useTextureMips: 0
+ m_VideoPath:
+ m_VideoLocation: 2
+--- !u!4 &2022425659
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2022425657}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 657, y: 357, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &2022425660
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2022425657}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3b05a64a5de3f8546bf586f42e37b979, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 2022425658}
+ _audioOutputMode: 1
+ _channelMask: -1
+ _supportPositionalAudio: 0
+--- !u!82 &2022425661
+AudioSource:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2022425657}
+ m_Enabled: 1
+ serializedVersion: 4
+ OutputAudioMixerGroup: {fileID: 0}
+ m_audioClip: {fileID: 0}
+ m_PlayOnAwake: 1
+ m_Volume: 1
+ m_Pitch: 1
+ Loop: 0
+ Mute: 0
+ Spatialize: 0
+ SpatializePostEffects: 0
+ Priority: 128
+ DopplerLevel: 1
+ MinDistance: 1
+ MaxDistance: 500
+ Pan2D: 0
+ rolloffMode: 0
+ BypassEffects: 0
+ BypassListenerEffects: 0
+ BypassReverbZones: 0
+ rolloffCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 1
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ panLevelCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ spreadCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ reverbZoneMixCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+--- !u!1 &2026627455
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2026627456}
+ - component: {fileID: 2026627457}
+ m_Layer: 5
+ m_Name: Subtitles
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2026627456
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2026627455}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 563840793}
+ - {fileID: 471157562}
+ m_Father: {fileID: 1242679089}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2026627457
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2026627455}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2d4bbe43657314a49a5f730e66dafebd, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 2022425658}
+ _text: {fileID: 471157564}
+ _backgroundImage: {fileID: 563840795}
+ _backgroundHorizontalPadding: 32
+ _backgroundVerticalPadding: 16
+ _maxCharacters: 256
+--- !u!1 &2068782942
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2068782943}
+ m_Layer: 5
+ m_Name: Fill Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2068782943
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2068782942}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 114716515}
+ m_Father: {fileID: 885424030}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: -5, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &2080579699
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2080579700}
+ - component: {fileID: 2080579702}
+ - component: {fileID: 2080579701}
+ m_Layer: 5
+ m_Name: Handle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2080579700
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2080579699}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 175670190}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 14, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2080579701
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2080579699}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.080233596, g: 0.7794118, b: 0.46116525, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &2080579702
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2080579699}
+ m_CullTransparentMesh: 1
+--- !u!1 &2122776260
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2122776261}
+ - component: {fileID: 2122776263}
+ - component: {fileID: 2122776264}
+ - component: {fileID: 2122776262}
+ m_Layer: 5
+ m_Name: AudioSpectrum
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2122776261
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2122776260}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660408040}
+ m_RootOrder: 8
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 42.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2122776262
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2122776260}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 128
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!222 &2122776263
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2122776260}
+ m_CullTransparentMesh: 1
+--- !u!114 &2122776264
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2122776260}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 2100000, guid: af11c0475fc59fd46ae3d7101e9cb7ad, type: 2}
+ m_Color: {r: 0.080233596, g: 0.7794118, b: 0.46116525, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Texture: {fileID: 0}
+ m_UVRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_MediaPlayer.unity.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_MediaPlayer.unity.meta
new file mode 100755
index 0000000..4666121
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_MediaPlayer.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 839cc75f049d0ea44a78c639e529d44a
+timeCreated: 1546679505
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_Playlist.unity b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_Playlist.unity
new file mode 100755
index 0000000..6e6d517
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_Playlist.unity
@@ -0,0 +1,1152 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 8
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.12731749, g: 0.13414757, b: 0.1210787, a: 1}
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_TemporalCoherenceThreshold: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 8
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_TextureWidth: 1024
+ m_TextureHeight: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 3
+ m_BakeBackend: 0
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVRFilteringMode: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_LightingDataAsset: {fileID: 0}
+ m_ShadowMaskMode: 2
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &48640724
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 48640726}
+ - component: {fileID: 48640725}
+ - component: {fileID: 48640728}
+ - component: {fileID: 48640727}
+ m_Layer: 0
+ m_Name: PlayerB
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &48640725
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 48640724}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 638c870cac4da414fba921606d504407, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaSource: 1
+ _mediaReference: {fileID: 0}
+ _mediaPath:
+ _pathType: 2
+ _path:
+ _fallbackMediaHints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _autoOpen: 0
+ _autoPlayOnStart: 1
+ _loop: 0
+ _audioVolume: 1
+ _audioBalance: 0
+ _audioMuted: 0
+ _playbackRate: 1
+ _useResampler: 0
+ _resampleMode: 0
+ _resampleBufferSize: 5
+ _videoMapping: 0
+ _textureFilterMode: 1
+ _textureWrapMode: 1
+ _textureAnisoLevel: 0
+ _useVideoResolve: 0
+ _videoResolveOptions:
+ applyHSBC: 0
+ hue: 0
+ saturation: 0.5
+ brightness: 0.5
+ contrast: 0.5
+ gamma: 1
+ tint: {r: 1, g: 1, b: 1, a: 1}
+ generateMipmaps: 0
+ _sideloadSubtitles: 0
+ _subtitlePath:
+ _pathType: 2
+ _path:
+ _audioHeadTransform: {fileID: 0}
+ _audioFocusEnabled: 0
+ _audioFocusTransform: {fileID: 0}
+ _audioFocusWidthDegrees: 90
+ _audioFocusOffLevelDB: 0
+ _httpHeaders:
+ httpHeaders: []
+ _keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _events:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: RenderHeads.Media.AVProVideo.MediaPlayerEvent, Assembly-CSharp, Version=0.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+ _eventMask: -1
+ _pauseMediaOnAppPause: 1
+ _playMediaOnAppUnpause: 1
+ _persistent: 0
+ _forceFileFormat: 0
+ _optionsWindows:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 0
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintAlphaChannel: 0
+ useLowLatency: 0
+ useCustomMovParser: 0
+ useHapNotchLC: 1
+ useStereoDetection: 1
+ useTextTrackSupport: 1
+ useFacebookAudio360Support: 1
+ useAudioDelay: 0
+ bufferedFrameSelection: 0
+ pauseOnPrerollComplete: 0
+ forceAudioOutputDeviceName:
+ preferredFilters: []
+ audioOutput: 1
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ parallelFrameCount: 3
+ prerollFrameCount: 4
+ useUnityAudio: 0
+ enableAudio360: 0
+ _optionsMacOSX:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsIOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsTVOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsAndroid:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _preferredMaximumResolution: 0
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ videoApi: 2
+ useFastOesPath: 0
+ showPosterFrame: 0
+ audioOutput: 0
+ audio360ChannelMode: 0
+ preferSoftwareDecoder: 0
+ fileOffset: 0
+ startWithHighestBitrate: 0
+ minBufferMs: 50000
+ maxBufferMs: 50000
+ bufferForPlaybackMs: 2500
+ bufferForPlaybackAfterRebufferMs: 5000
+ enableAudio360: 0
+ _optionsWindowsUWP:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintOutput10Bit: 0
+ useLowLatency: 0
+ videoApi: 1
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ _optionsWebGL:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ externalLibrary: 0
+ useTextureMips: 0
+ m_VideoPath:
+ m_VideoLocation: 2
+--- !u!4 &48640726
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 48640724}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1709421728}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &48640727
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 48640724}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3b05a64a5de3f8546bf586f42e37b979, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 48640725}
+ _audioOutputMode: 1
+ _channelMask: -1
+ _supportPositionalAudio: 0
+--- !u!82 &48640728
+AudioSource:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 48640724}
+ m_Enabled: 1
+ serializedVersion: 4
+ OutputAudioMixerGroup: {fileID: 0}
+ m_audioClip: {fileID: 0}
+ m_PlayOnAwake: 1
+ m_Volume: 0
+ m_Pitch: 1
+ Loop: 0
+ Mute: 0
+ Spatialize: 0
+ SpatializePostEffects: 0
+ Priority: 128
+ DopplerLevel: 1
+ MinDistance: 1
+ MaxDistance: 500
+ Pan2D: 0
+ rolloffMode: 0
+ BypassEffects: 0
+ BypassListenerEffects: 0
+ BypassReverbZones: 0
+ rolloffCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ - serializedVersion: 2
+ time: 1
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ panLevelCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ spreadCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ reverbZoneMixCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+--- !u!1 &934318870
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 934318873}
+ - component: {fileID: 934318872}
+ - component: {fileID: 934318871}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &934318871
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 934318870}
+ m_Enabled: 1
+--- !u!20 &934318872
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 934318870}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 0
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+ m_StereoMirrorMode: 0
+--- !u!4 &934318873
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 934318870}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &951410097
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 951410098}
+ - component: {fileID: 951410099}
+ - component: {fileID: 951410101}
+ - component: {fileID: 951410100}
+ m_Layer: 0
+ m_Name: PlayerA
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &951410098
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 951410097}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1709421728}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &951410099
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 951410097}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 638c870cac4da414fba921606d504407, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaSource: 1
+ _mediaReference: {fileID: 0}
+ _mediaPath:
+ _pathType: 2
+ _path:
+ _fallbackMediaHints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _autoOpen: 0
+ _autoPlayOnStart: 1
+ _loop: 0
+ _audioVolume: 1
+ _audioBalance: 0
+ _audioMuted: 0
+ _playbackRate: 1
+ _useResampler: 0
+ _resampleMode: 0
+ _resampleBufferSize: 5
+ _videoMapping: 0
+ _textureFilterMode: 1
+ _textureWrapMode: 1
+ _textureAnisoLevel: 0
+ _useVideoResolve: 0
+ _videoResolveOptions:
+ applyHSBC: 0
+ hue: 0
+ saturation: 0.5
+ brightness: 0.5
+ contrast: 0.5
+ gamma: 1
+ tint: {r: 1, g: 1, b: 1, a: 1}
+ generateMipmaps: 0
+ _sideloadSubtitles: 0
+ _subtitlePath:
+ _pathType: 2
+ _path:
+ _audioHeadTransform: {fileID: 0}
+ _audioFocusEnabled: 0
+ _audioFocusTransform: {fileID: 0}
+ _audioFocusWidthDegrees: 90
+ _audioFocusOffLevelDB: 0
+ _httpHeaders:
+ httpHeaders: []
+ _keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _events:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: RenderHeads.Media.AVProVideo.MediaPlayerEvent, Assembly-CSharp, Version=0.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+ _eventMask: -1
+ _pauseMediaOnAppPause: 1
+ _playMediaOnAppUnpause: 1
+ _persistent: 0
+ _forceFileFormat: 0
+ _optionsWindows:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 0
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintAlphaChannel: 0
+ useLowLatency: 0
+ useCustomMovParser: 0
+ useHapNotchLC: 1
+ useStereoDetection: 1
+ useTextTrackSupport: 1
+ useFacebookAudio360Support: 1
+ useAudioDelay: 0
+ bufferedFrameSelection: 0
+ pauseOnPrerollComplete: 0
+ forceAudioOutputDeviceName:
+ preferredFilters: []
+ audioOutput: 1
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ parallelFrameCount: 3
+ prerollFrameCount: 4
+ useUnityAudio: 0
+ enableAudio360: 0
+ _optionsMacOSX:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 1
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsIOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 1
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsTVOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 1
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsAndroid:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _preferredMaximumResolution: 0
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ videoApi: 2
+ useFastOesPath: 0
+ showPosterFrame: 0
+ audioOutput: 1
+ audio360ChannelMode: 0
+ preferSoftwareDecoder: 0
+ fileOffset: 0
+ startWithHighestBitrate: 0
+ minBufferMs: 50000
+ maxBufferMs: 50000
+ bufferForPlaybackMs: 2500
+ bufferForPlaybackAfterRebufferMs: 5000
+ enableAudio360: 0
+ _optionsWindowsUWP:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintOutput10Bit: 0
+ useLowLatency: 0
+ videoApi: 0
+ audioOutput: 1
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ _optionsWebGL:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ externalLibrary: 0
+ useTextureMips: 0
+ m_VideoPath:
+ m_VideoLocation: 2
+--- !u!114 &951410100
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 951410097}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3b05a64a5de3f8546bf586f42e37b979, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 951410099}
+ _audioOutputMode: 1
+ _channelMask: -1
+ _supportPositionalAudio: 0
+--- !u!82 &951410101
+AudioSource:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 951410097}
+ m_Enabled: 1
+ serializedVersion: 4
+ OutputAudioMixerGroup: {fileID: 0}
+ m_audioClip: {fileID: 0}
+ m_PlayOnAwake: 1
+ m_Volume: 0
+ m_Pitch: 1
+ Loop: 0
+ Mute: 0
+ Spatialize: 0
+ SpatializePostEffects: 0
+ Priority: 128
+ DopplerLevel: 1
+ MinDistance: 1
+ MaxDistance: 500
+ Pan2D: 0
+ rolloffMode: 0
+ BypassEffects: 0
+ BypassListenerEffects: 0
+ BypassReverbZones: 0
+ rolloffCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ - serializedVersion: 2
+ time: 1
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ panLevelCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ spreadCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ reverbZoneMixCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 2
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+--- !u!1 &1709421726
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1709421728}
+ - component: {fileID: 1709421727}
+ m_Layer: 0
+ m_Name: PlaylistPlayer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1709421727
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1709421726}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: e9ea31f33222f4b418e4e051a8a5ed24, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaSource: 0
+ _mediaReference: {fileID: 0}
+ _mediaPath:
+ _pathType: 2
+ _path:
+ _fallbackMediaHints:
+ transparency: 0
+ alphaPacking: 0
+ stereoPacking: 0
+ _autoOpen: 1
+ _autoPlayOnStart: 1
+ _loop: 0
+ _audioVolume: 1
+ _audioBalance: 0
+ _audioMuted: 0
+ _playbackRate: 1
+ _useResampler: 0
+ _resampleMode: 0
+ _resampleBufferSize: 5
+ _videoMapping: 0
+ _textureFilterMode: 1
+ _textureWrapMode: 1
+ _textureAnisoLevel: 0
+ _useVideoResolve: 0
+ _videoResolveOptions:
+ applyHSBC: 0
+ hue: 0
+ saturation: 0.5
+ brightness: 0.5
+ contrast: 0.5
+ gamma: 1
+ tint: {r: 1, g: 1, b: 1, a: 1}
+ generateMipmaps: 0
+ _sideloadSubtitles: 0
+ _subtitlePath:
+ _pathType: 2
+ _path:
+ _audioHeadTransform: {fileID: 0}
+ _audioFocusEnabled: 0
+ _audioFocusTransform: {fileID: 0}
+ _audioFocusWidthDegrees: 90
+ _audioFocusOffLevelDB: 0
+ _httpHeaders:
+ httpHeaders: []
+ _keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _events:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: RenderHeads.Media.AVProVideo.MediaPlayerEvent, Assembly-CSharp, Version=0.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+ _eventMask: -1
+ _pauseMediaOnAppPause: 1
+ _playMediaOnAppUnpause: 1
+ _persistent: 0
+ _forceFileFormat: 0
+ _optionsWindows:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ videoApi: 0
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintAlphaChannel: 0
+ useLowLatency: 0
+ useCustomMovParser: 0
+ useHapNotchLC: 1
+ useStereoDetection: 1
+ useTextTrackSupport: 1
+ useFacebookAudio360Support: 1
+ useAudioDelay: 0
+ bufferedFrameSelection: 0
+ pauseOnPrerollComplete: 0
+ forceAudioOutputDeviceName:
+ preferredFilters: []
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ parallelFrameCount: 3
+ prerollFrameCount: 4
+ useUnityAudio: 0
+ enableAudio360: 0
+ _optionsMacOSX:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsIOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsTVOS:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ textureFormat: 0
+ audioMode: 0
+ _flags: 0
+ maximumPlaybackRate: 2
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ _preferredForwardBufferDuration: 0
+ _preferredMaximumResolution: 0
+ _optionsAndroid:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ _preferredMaximumResolution: 0
+ _preferredPeakBitRate: 0
+ _preferredPeakBitRateUnits: 1
+ videoApi: 2
+ useFastOesPath: 0
+ showPosterFrame: 0
+ audioOutput: 0
+ audio360ChannelMode: 0
+ preferSoftwareDecoder: 0
+ fileOffset: 0
+ startWithHighestBitrate: 0
+ minBufferMs: 50000
+ maxBufferMs: 50000
+ bufferForPlaybackMs: 2500
+ bufferForPlaybackAfterRebufferMs: 5000
+ enableAudio360: 0
+ _optionsWindowsUWP:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ useHardwareDecoding: 1
+ useTextureMips: 0
+ use10BitTextures: 0
+ hintOutput10Bit: 0
+ useLowLatency: 0
+ videoApi: 1
+ audioOutput: 0
+ audio360ChannelMode: 0
+ startWithHighestBitrate: 0
+ useLowLiveLatency: 0
+ _optionsWebGL:
+ httpHeaders:
+ httpHeaders: []
+ keyAuth:
+ keyServerToken:
+ overrideDecryptionKeyBase64:
+ overrideDecryptionKey:
+ externalLibrary: 0
+ useTextureMips: 0
+ m_VideoPath:
+ m_VideoLocation: 2
+ _transitionShader: {fileID: 4800000, guid: 73f378cafe7b4a745907b70e76bb3259, type: 3}
+ _playerA: {fileID: 951410099}
+ _playerB: {fileID: 48640725}
+ _playlistAutoProgress: 1
+ _autoCloseVideo: 0
+ _playlistLoopMode: 1
+ _playlist:
+ _items:
+ - name: INTRO
+ sourceType: 0
+ mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/Cones-2D-1080p60-H264.mp4
+ texture: {fileID: 0}
+ textureDuration: 0
+ loop: 0
+ startMode: 0
+ progressMode: 1
+ progressTimeSeconds: 0.5
+ isOverrideTransition: 0
+ overrideTransition: 0
+ overrideTransitionDuration: 0
+ overrideTransitionEasing: 1
+ - name: OUTRO
+ sourceType: 0
+ mediaPath:
+ _pathType: 2
+ _path: AVProVideoSamples/RenderHeads-1080p30-H264.mp4
+ texture: {fileID: 0}
+ textureDuration: 0
+ loop: 0
+ startMode: 0
+ progressMode: 1
+ progressTimeSeconds: 3
+ isOverrideTransition: 0
+ overrideTransition: 0
+ overrideTransitionDuration: 0
+ overrideTransitionEasing: 1
+ _pausePreviousOnTransition: 0
+ _defaultTransition: 2
+ _defaultTransitionDuration: 1
+ _defaultTransitionEasing: 1
+ _playlistAudioVolume: 1
+ _playlistAudioMuted: 0
+--- !u!4 &1709421728
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1709421726}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 951410098}
+ - {fileID: 48640726}
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1925614746
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1925614748}
+ - component: {fileID: 1925614747}
+ m_Layer: 0
+ m_Name: Display
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1925614747
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1925614746}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 75f3b319d2d69934d8bf545ab45c918d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _mediaPlayer: {fileID: 1709421727}
+ _scaleMode: 2
+ _color: {r: 1, g: 1, b: 1, a: 1}
+ _allowTransparency: 0
+ _useDepth: 0
+ _depth: 0
+ _isAreaFullScreen: 1
+ _areaX: 0
+ _areaY: 0
+ _areaWidth: 1
+ _areaHeight: 1
+ _showAreaInEditor: 1
+--- !u!4 &1925614748
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1925614746}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_Playlist.unity.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_Playlist.unity.meta
new file mode 100755
index 0000000..174f85c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/Scenes/Demo_Playlist.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0317dfde9ab745b4e9ef01be5f43c7ce
+timeCreated: 1614604940
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/_AVProVideo.Demos.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Demos/_AVProVideo.Demos.asmdef
new file mode 100755
index 0000000..1a556e1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/_AVProVideo.Demos.asmdef
@@ -0,0 +1,14 @@
+{
+ "name": "AVProVideo.Demos",
+ "references": [
+ "AVProVideo.Runtime"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Demos/_AVProVideo.Demos.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Demos/_AVProVideo.Demos.asmdef.meta
new file mode 100755
index 0000000..5b62c45
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Demos/_AVProVideo.Demos.asmdef.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5bd17dc1ff50f4c4fa776d3217f7bc99
+timeCreated: 1546681558
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Docs.meta b/Viagg-io/Assets/Packages/AVProVideo/Docs.meta
new file mode 100755
index 0000000..1756ccc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Docs.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a55421118ec262a4f98e9ad575b052b1
+folderAsset: yes
+timeCreated: 1606945622
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Docs/AVPro Video - User Manual.pdf b/Viagg-io/Assets/Packages/AVProVideo/Docs/AVPro Video - User Manual.pdf
new file mode 100755
index 0000000..1563616
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Docs/AVPro Video - User Manual.pdf differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Docs/AVPro Video - User Manual.pdf.meta b/Viagg-io/Assets/Packages/AVProVideo/Docs/AVPro Video - User Manual.pdf.meta
new file mode 100755
index 0000000..d7c30ff
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Docs/AVPro Video - User Manual.pdf.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 07174a511872628448e2ac649a06da70
+timeCreated: 1607701805
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Docs/Documentation.txt b/Viagg-io/Assets/Packages/AVProVideo/Docs/Documentation.txt
new file mode 100755
index 0000000..7f0c30e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Docs/Documentation.txt
@@ -0,0 +1 @@
+Please visit https://www.renderheads.com/content/docs/AVProVideo/ for full documentation
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Docs/Documentation.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Docs/Documentation.txt.meta
new file mode 100755
index 0000000..b65bc1d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Docs/Documentation.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8e59b18f5f75b614cba8c1c963515435
+timeCreated: 1606945622
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor.meta
new file mode 100755
index 0000000..25b9dba
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 78f6caa0eb99b0947a68c3abfc4b0287
+folderAsset: yes
+timeCreated: 1551709592
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources.meta
new file mode 100755
index 0000000..02fc354
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 44c1fb33835a7a040a58adb2e708afb4
+folderAsset: yes
+timeCreated: 1551713189
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources/AVProVideoIcon.png b/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources/AVProVideoIcon.png
new file mode 100755
index 0000000..035c518
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources/AVProVideoIcon.png differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources/AVProVideoIcon.png.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources/AVProVideoIcon.png.meta
new file mode 100755
index 0000000..6706072
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Resources/AVProVideoIcon.png.meta
@@ -0,0 +1,90 @@
+fileFormatVersion: 2
+guid: bb83b41b53a59874692b83eab5873998
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 1
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 1024
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 0
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 1024
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 1024
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: iPhone
+ maxTextureSize: 1024
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 1024
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts.meta
new file mode 100755
index 0000000..637c5f4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fa40b7e33f12f754586d06e6df3d98ba
+folderAsset: yes
+timeCreated: 1551712689
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/AnimCollapseSection.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/AnimCollapseSection.cs
new file mode 100755
index 0000000..cfd41c3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/AnimCollapseSection.cs
@@ -0,0 +1,194 @@
+#define AVPROVIDEO_SUPPORT_LIVEEDITMODE
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ /// A collapsable GUI section that animates during open and close
+ internal class AnimCollapseSection
+ {
+ internal const string SettingsPrefix = "AVProVideo-MediaPlayerEditor-";
+ private const float CollapseSpeed = 2f;
+ private static GUIStyle _styleCollapsableSection = null;
+ private static GUIStyle _styleButtonFoldout = null;
+ private static GUIStyle _styleHelpBoxNoPad = null;
+
+ public AnimCollapseSection(string label, bool showOnlyInEditMode, bool isDefaultExpanded, System.Action action, UnityEditor.Editor editor, Color backgroundColor, List groupItems = null)
+ : this(new GUIContent(label), showOnlyInEditMode, isDefaultExpanded, action, editor, backgroundColor, groupItems)
+ {
+ }
+ public AnimCollapseSection(GUIContent label, bool showOnlyInEditMode, bool isDefaultExpanded, System.Action action, UnityEditor.Editor editor, Color backgroundColor, List groupItems = null)
+ {
+ Label = label;
+ _name = Label.text;
+ Label.text = " " + Label.text; // Add a space for aesthetics
+ ShowOnlyInEditMode = showOnlyInEditMode;
+ _action = action;
+ isDefaultExpanded = EditorPrefs.GetBool(PrefName, isDefaultExpanded);
+ BackgroundColor = backgroundColor;
+ _groupItems = groupItems;
+ _anim = new UnityEditor.AnimatedValues.AnimBool(isDefaultExpanded);
+ _anim.speed = CollapseSpeed;
+ _anim.valueChanged.AddListener(editor.Repaint);
+ }
+ ~AnimCollapseSection()
+ {
+ _anim.valueChanged.RemoveAllListeners();
+ }
+
+ private string _name;
+ private UnityEditor.AnimatedValues.AnimBool _anim;
+ private System.Action _action;
+ private List _groupItems;
+
+ public void Invoke()
+ {
+ _action.Invoke();
+ }
+
+ public bool IsExpanded { get { return _anim.target; } set { if (_anim.target != value) { _anim.target = value; if (value) CollapseSiblings(); } } }
+ public float Faded { get { return _anim.faded; } }
+ public GUIContent Label { get; private set; }
+ public bool ShowOnlyInEditMode { get; private set; }
+ public Color BackgroundColor { get; private set; }
+ private string PrefName { get { return GetPrefName(_name); } }
+
+ public void Save()
+ {
+ EditorPrefs.SetBool(PrefName, IsExpanded);
+ }
+
+ private void CollapseSiblings()
+ {
+ // Ensure only a single item is in an expanded state
+ if (_groupItems != null)
+ {
+ foreach (AnimCollapseSection section in _groupItems)
+ {
+ if (section != this && section.IsExpanded)
+ {
+ section.IsExpanded = false;
+ }
+ }
+ }
+ }
+
+ internal static string GetPrefName(string label)
+ {
+ return SettingsPrefix + "Expand-" + label;
+ }
+
+ internal static void CreateStyles()
+ {
+ if (_styleCollapsableSection == null)
+ {
+ _styleCollapsableSection = new GUIStyle(GUI.skin.box);
+ _styleCollapsableSection.padding.top = 0;
+ _styleCollapsableSection.padding.bottom = 0;
+ }
+ if (_styleButtonFoldout == null)
+ {
+ _styleButtonFoldout = new GUIStyle(EditorStyles.foldout);
+ _styleButtonFoldout.margin = new RectOffset();
+ _styleButtonFoldout.fontStyle = FontStyle.Bold;
+ _styleButtonFoldout.alignment = TextAnchor.MiddleLeft;
+ }
+ if (_styleHelpBoxNoPad == null)
+ {
+ _styleHelpBoxNoPad = new GUIStyle(EditorStyles.helpBox);
+ _styleHelpBoxNoPad.padding = new RectOffset();
+ //_styleHelpBoxNoPad.border = new RectOffset();
+ _styleHelpBoxNoPad.overflow = new RectOffset();
+ _styleHelpBoxNoPad.margin = new RectOffset();
+ _styleHelpBoxNoPad.margin = new RectOffset(8, 0, 0, 0);
+ _styleHelpBoxNoPad.stretchWidth = false;
+ _styleHelpBoxNoPad.stretchHeight = false;
+ //_styleHelpBoxNoPad.normal.background = Texture2D.whiteTexture;
+ }
+ }
+
+ internal static void Show(AnimCollapseSection section, int indentLevel = 0)
+ {
+ if (section.ShowOnlyInEditMode && Application.isPlaying) return;
+
+ float headerGlow = Mathf.Lerp(0.5f, 0.85f, section.Faded);
+ //float headerGlow = Mathf.Lerp(0.85f, 1f, section.Faded);
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = section.BackgroundColor * new Color(headerGlow, headerGlow, headerGlow, 1f);
+ }
+ else
+ {
+ headerGlow = Mathf.Lerp(0.75f, 1f, section.Faded);
+ GUI.backgroundColor = section.BackgroundColor * new Color(headerGlow, headerGlow, headerGlow, 1f);
+ }
+ GUILayout.BeginVertical(_styleHelpBoxNoPad);
+ GUILayout.Box(GUIContent.none, EditorStyles.miniButton, GUILayout.ExpandWidth(true));
+ GUI.backgroundColor = Color.white;
+ Rect buttonRect = GUILayoutUtility.GetLastRect();
+ if (Event.current.type != EventType.Layout)
+ {
+ buttonRect.xMin += indentLevel * EditorGUIUtility.fieldWidth / 3f;
+ EditorGUI.indentLevel++;
+ EditorGUIUtility.SetIconSize(new Vector2(16f, 16f));
+ section.IsExpanded = EditorGUI.Foldout(buttonRect, section.IsExpanded, section.Label, true, _styleButtonFoldout);
+ EditorGUIUtility.SetIconSize(Vector2.zero);
+ EditorGUI.indentLevel--;
+ }
+
+ if (EditorGUILayout.BeginFadeGroup(section.Faded))
+ {
+ section.Invoke();
+ }
+ EditorGUILayout.EndFadeGroup();
+ GUILayout.EndVertical();
+ }
+
+ internal static void Show(string label, ref bool isExpanded, System.Action action, bool showOnlyInEditMode)
+ {
+ if (showOnlyInEditMode && Application.isPlaying) return;
+
+ if (BeginShow(label, ref isExpanded, Color.white))
+ {
+ action.Invoke();
+ }
+ EndShow();
+ }
+
+ internal static bool BeginShow(string label, ref bool isExpanded, Color tintColor)
+ {
+ GUI.color = Color.white;
+ GUI.backgroundColor = Color.clear;
+ if (isExpanded)
+ {
+ GUI.color = Color.white;
+ GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f, 0.1f);
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = Color.black;
+ }
+ }
+
+ GUILayout.BeginVertical(_styleCollapsableSection);
+ GUI.color = tintColor;
+ GUI.backgroundColor = Color.white;
+ if (GUILayout.Button(label, EditorStyles.toolbarButton))
+ {
+ isExpanded = !isExpanded;
+ }
+ GUI.color = Color.white;
+
+ return isExpanded;
+ }
+
+ internal static void EndShow()
+ {
+ GUILayout.EndVertical();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/AnimCollapseSection.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/AnimCollapseSection.cs.meta
new file mode 100755
index 0000000..77a5182
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/AnimCollapseSection.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7ca21d2c4a039f347a66568bb23b62bc
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components.meta
new file mode 100755
index 0000000..48160c0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: df15cc9892e0644469f075f3a1c0c8f4
+folderAsset: yes
+timeCreated: 1591790246
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMaterialEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMaterialEditor.cs
new file mode 100755
index 0000000..6e90906
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMaterialEditor.cs
@@ -0,0 +1,108 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the ApplyToMaterial component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(ApplyToMaterial))]
+ public class ApplyToMaterialEditor : UnityEditor.Editor
+ {
+ private static readonly GUIContent _guiTextTextureProperty = new GUIContent("Texture Property");
+
+ private SerializedProperty _propTextureOffset;
+ private SerializedProperty _propTextureScale;
+ private SerializedProperty _propMediaPlayer;
+ private SerializedProperty _propMaterial;
+ private SerializedProperty _propTexturePropertyName;
+ private SerializedProperty _propDefaultTexture;
+ private GUIContent[] _materialTextureProperties = new GUIContent[0];
+
+ void OnEnable()
+ {
+ _propTextureOffset = this.CheckFindProperty("_offset");
+ _propTextureScale = this.CheckFindProperty("_scale");
+ _propMediaPlayer = this.CheckFindProperty("_media");
+ _propMaterial = this.CheckFindProperty("_material");
+ _propTexturePropertyName = this.CheckFindProperty("_texturePropertyName");
+ _propDefaultTexture = this.CheckFindProperty("_defaultTexture");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ if (_propMaterial == null)
+ {
+ return;
+ }
+
+ EditorGUI.BeginChangeCheck();
+
+ EditorGUILayout.PropertyField(_propMediaPlayer);
+ EditorGUILayout.PropertyField(_propDefaultTexture);
+ EditorGUILayout.PropertyField(_propMaterial);
+
+ bool hasKeywords = false;
+ int texturePropertyIndex = 0;
+ if (_propMaterial.objectReferenceValue != null)
+ {
+ Material mat = (Material)(_propMaterial.objectReferenceValue);
+
+ if (mat.shaderKeywords.Length > 0)
+ {
+ hasKeywords = true;
+ }
+
+ MaterialProperty[] matProps = MaterialEditor.GetMaterialProperties(new UnityEngine.Object[] { mat });
+
+ List items = new List(16);
+ foreach (MaterialProperty matProp in matProps)
+ {
+ if (matProp.type == MaterialProperty.PropType.Texture)
+ {
+ if (matProp.name == _propTexturePropertyName.stringValue)
+ {
+ texturePropertyIndex = items.Count;
+ }
+ items.Add(new GUIContent(matProp.name));
+ }
+ }
+ _materialTextureProperties = items.ToArray();
+ }
+
+ int newTexturePropertyIndex = EditorGUILayout.Popup(_guiTextTextureProperty, texturePropertyIndex, _materialTextureProperties);
+ if (newTexturePropertyIndex >= 0 && newTexturePropertyIndex < _materialTextureProperties.Length)
+ {
+ _propTexturePropertyName.stringValue = _materialTextureProperties[newTexturePropertyIndex].text;
+ }
+
+ if (hasKeywords && _propTexturePropertyName.stringValue != Helper.UnityBaseTextureName)
+ {
+ EditorGUILayout.HelpBox("When using an uber shader you may need to enable the keywords on a material for certain texture slots to take effect. You can sometimes achieve this (eg with Standard shader) by putting a dummy texture into the texture slot.", MessageType.Info);
+ }
+
+ EditorGUILayout.PropertyField(_propTextureOffset);
+ EditorGUILayout.PropertyField(_propTextureScale);
+
+ serializedObject.ApplyModifiedProperties();
+
+ bool wasModified = EditorGUI.EndChangeCheck();
+
+ if (Application.isPlaying && wasModified)
+ {
+ foreach (Object obj in this.targets)
+ {
+ ((ApplyToMaterial)obj).ForceUpdate();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMaterialEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMaterialEditor.cs.meta
new file mode 100755
index 0000000..3be44ad
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMaterialEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 60268ddd706f2f1469acb32edab1dea9
+timeCreated: 1591790256
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMeshEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMeshEditor.cs
new file mode 100755
index 0000000..356c0a1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMeshEditor.cs
@@ -0,0 +1,183 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the ApplyToMesh component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(ApplyToMesh))]
+ public class ApplyToMeshEditor : UnityEditor.Editor
+ {
+ private static readonly GUIContent _guiTextTextureProperty = new GUIContent("Texture Property");
+
+ private SerializedProperty _propTextureOffset;
+ private SerializedProperty _propTextureScale;
+ private SerializedProperty _propMediaPlayer;
+ private SerializedProperty _propRenderer;
+ private SerializedProperty _propMaterialIndex;
+ private SerializedProperty _propTexturePropertyName;
+ private SerializedProperty _propDefaultTexture;
+ private SerializedProperty _propAutomaticStereoPacking;
+ private SerializedProperty _propOverrideStereoPacking;
+ private SerializedProperty _propStereoRedGreenTint;
+ private GUIContent[] _materialTextureProperties = new GUIContent[0];
+
+ void OnEnable()
+ {
+ _propTextureOffset = this.CheckFindProperty("_offset");
+ _propTextureScale = this.CheckFindProperty("_scale");
+ _propMediaPlayer = this.CheckFindProperty("_media");
+ _propRenderer = this.CheckFindProperty("_renderer");
+ _propMaterialIndex = this.CheckFindProperty("_materialIndex");
+ _propTexturePropertyName = this.CheckFindProperty("_texturePropertyName");
+ _propDefaultTexture = this.CheckFindProperty("_defaultTexture");
+ _propAutomaticStereoPacking = this.CheckFindProperty("_automaticStereoPacking");
+ _propOverrideStereoPacking = this.CheckFindProperty("_overrideStereoPacking");
+ _propStereoRedGreenTint = this.CheckFindProperty("_stereoRedGreenTint");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ if (_propRenderer == null)
+ {
+ return;
+ }
+
+ EditorGUI.BeginChangeCheck();
+
+ EditorGUILayout.PropertyField(_propMediaPlayer);
+ EditorGUILayout.PropertyField(_propDefaultTexture);
+ EditorGUILayout.PropertyField(_propRenderer);
+
+ bool hasKeywords = false;
+ int materialCount = 0;
+ int texturePropertyIndex = 0;
+ _materialTextureProperties = new GUIContent[0];
+ if (_propRenderer.objectReferenceValue != null)
+ {
+ Renderer r = (Renderer)(_propRenderer.objectReferenceValue);
+
+ materialCount = r.sharedMaterials.Length;
+ List nonNullMaterials = new List(r.sharedMaterials);
+ // Remove any null materials (otherwise MaterialEditor.GetMaterialProperties() errors)
+ for (int i = 0; i < nonNullMaterials.Count; i++)
+ {
+ if (nonNullMaterials[i] == null)
+ {
+ nonNullMaterials.RemoveAt(i);
+ i--;
+ }
+ }
+
+ if (nonNullMaterials.Count > 0)
+ {
+ // Detect if there are any keywords
+ foreach (Material mat in nonNullMaterials)
+ {
+ if (mat.shaderKeywords.Length > 0)
+ {
+ hasKeywords = true;
+ break;
+ }
+ }
+
+ // Get unique list of texture property names
+ List items = new List(16);
+ List textureNames = new List(8);
+ foreach (Material mat in nonNullMaterials)
+ {
+ // NOTE: we process each material separately instead of passing them all into MaterialEditor.GetMaterialProperties() as it errors if the materials have different properties
+ MaterialProperty[] matProps = MaterialEditor.GetMaterialProperties(new Object[] { mat });
+ foreach (MaterialProperty matProp in matProps)
+ {
+ if (matProp.type == MaterialProperty.PropType.Texture)
+ {
+ if (!textureNames.Contains(matProp.name))
+ {
+ if (matProp.name == _propTexturePropertyName.stringValue)
+ {
+ texturePropertyIndex = items.Count;
+ }
+ textureNames.Add(matProp.name);
+ items.Add(new GUIContent(matProp.name));
+ }
+ }
+ }
+ }
+ _materialTextureProperties = items.ToArray();
+ }
+ }
+
+ if (materialCount > 0)
+ {
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.PrefixLabel("All Materials");
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.Toggle(_propMaterialIndex.intValue < 0);
+ if (EditorGUI.EndChangeCheck())
+ {
+ if (_propMaterialIndex.intValue < 0)
+ {
+ _propMaterialIndex.intValue = 0;
+ }
+ else
+ {
+ _propMaterialIndex.intValue = -1;
+ }
+ }
+ GUILayout.EndHorizontal();
+
+ if (_propMaterialIndex.intValue >= 0)
+ {
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.PrefixLabel("Material Index");
+ _propMaterialIndex.intValue = EditorGUILayout.IntSlider(_propMaterialIndex.intValue, 0, materialCount - 1);
+ GUILayout.EndHorizontal();
+ }
+ }
+
+ int newTexturePropertyIndex = EditorGUILayout.Popup(_guiTextTextureProperty, texturePropertyIndex, _materialTextureProperties);
+ if (newTexturePropertyIndex >= 0 && newTexturePropertyIndex < _materialTextureProperties.Length)
+ {
+ _propTexturePropertyName.stringValue = _materialTextureProperties[newTexturePropertyIndex].text;
+ }
+
+ if (hasKeywords && _propTexturePropertyName.stringValue != Helper.UnityBaseTextureName)
+ {
+ EditorGUILayout.HelpBox("When using an uber shader you may need to enable the keywords on a material for certain texture slots to take effect. You can sometimes achieve this (eg with Standard shader) by putting a dummy texture into the texture slot.", MessageType.Info);
+ }
+
+ EditorGUILayout.PropertyField(_propTextureOffset);
+ EditorGUILayout.PropertyField(_propTextureScale);
+
+
+ EditorGUILayout.PropertyField(_propAutomaticStereoPacking);
+ if (!_propAutomaticStereoPacking.boolValue)
+ {
+ EditorGUILayout.PropertyField(_propOverrideStereoPacking);
+ }
+ EditorGUILayout.PropertyField(_propStereoRedGreenTint);
+
+ serializedObject.ApplyModifiedProperties();
+
+ bool wasModified = EditorGUI.EndChangeCheck();
+
+ if (Application.isPlaying && wasModified)
+ {
+ foreach (Object obj in this.targets)
+ {
+ ((ApplyToMesh)obj).ForceUpdate();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMeshEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMeshEditor.cs.meta
new file mode 100755
index 0000000..62838bc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ApplyToMeshEditor.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 114ac842bfcaf0745a5e45cb2a7d6559
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/AudioOutputEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/AudioOutputEditor.cs
new file mode 100755
index 0000000..8085a49
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/AudioOutputEditor.cs
@@ -0,0 +1,103 @@
+using UnityEditor;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the AudioOutput component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(AudioOutput))]
+ public class AudioOutputEditor : UnityEditor.Editor
+ {
+ private static readonly GUIContent _guiTextChannel = new GUIContent("Channel");
+ private static readonly GUIContent _guiTextChannels = new GUIContent("Channels");
+ private static readonly string[] _channelMaskOptions = { "1", "2", "3", "4", "5", "6", "7", "8" };
+
+ private SerializedProperty _propMediaPlayer;
+ private SerializedProperty _propAudioOutputMode;
+ private SerializedProperty _propSupportPositionalAudio;
+ private SerializedProperty _propChannelMask;
+ private int _unityAudioSampleRate;
+ private int _unityAudioSpeakerCount;
+ private string _bufferedMs;
+
+ void OnEnable()
+ {
+ _propMediaPlayer = this.CheckFindProperty("_mediaPlayer");
+ _propAudioOutputMode = this.CheckFindProperty("_audioOutputMode");
+ _propSupportPositionalAudio = this.CheckFindProperty("_supportPositionalAudio");
+ _propChannelMask = this.CheckFindProperty("_channelMask");
+ _unityAudioSampleRate = Helper.GetUnityAudioSampleRate();
+ _unityAudioSpeakerCount = Helper.GetUnityAudioSpeakerCount();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ AudioOutput audioOutput = (AudioOutput)this.target;
+
+ EditorGUILayout.PropertyField(_propMediaPlayer);
+ EditorGUILayout.PropertyField(_propAudioOutputMode);
+ EditorGUILayout.PropertyField(_propSupportPositionalAudio);
+
+ // Display the channel mask as either a bitfield or value slider
+ if ((AudioOutput.AudioOutputMode)_propAudioOutputMode.enumValueIndex == AudioOutput.AudioOutputMode.MultipleChannels)
+ {
+ _propChannelMask.intValue = EditorGUILayout.MaskField(_guiTextChannels, _propChannelMask.intValue, _channelMaskOptions);
+ }
+ else
+ {
+ int prevVal = 0;
+ for(int i = 0; i < 8; ++i)
+ {
+ if((_propChannelMask.intValue & (1 << i)) > 0)
+ {
+ prevVal = i;
+ break;
+ }
+ }
+
+ int newVal = Mathf.Clamp(EditorGUILayout.IntSlider(_guiTextChannel, prevVal, 0, 7), 0, 7);
+ _propChannelMask.intValue = 1 << newVal;
+ }
+
+ GUILayout.Label("Unity Audio", EditorStyles.boldLabel);
+ EditorGUILayout.LabelField("Speakers", _unityAudioSpeakerCount.ToString());
+ EditorGUILayout.LabelField("Sample Rate", _unityAudioSampleRate.ToString() + "hz");
+ EditorGUILayout.Space();
+
+ if (audioOutput != null)
+ {
+ if (audioOutput.Player != null && audioOutput.Player.Control != null)
+ {
+ int channelCount = audioOutput.Player.Control.GetAudioChannelCount();
+ if (channelCount >= 0)
+ {
+ GUILayout.Label("Media Audio", EditorStyles.boldLabel);
+ EditorGUILayout.LabelField("Channels: " + channelCount);
+ AudioChannelMaskFlags audioChannels = audioOutput.Player.Control.GetAudioChannelMask();
+ GUILayout.Label(audioChannels.ToString(), EditorHelper.IMGUI.GetWordWrappedTextAreaStyle());
+
+ if (Time.frameCount % 4 == 0)
+ {
+ int bufferedSampleCount = audioOutput.Player.Control.GetAudioBufferedSampleCount();
+ float bufferedMs = (bufferedSampleCount * 1000f) / (_unityAudioSampleRate * channelCount);
+ _bufferedMs = "Buffered: " + bufferedMs.ToString("F2") + "ms";
+ }
+
+ EditorGUILayout.LabelField(_bufferedMs);
+ EditorGUILayout.Space();
+ }
+ }
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/AudioOutputEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/AudioOutputEditor.cs.meta
new file mode 100755
index 0000000..6c35d19
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/AudioOutputEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f7852924144fc064aad785e5985b5402
+timeCreated: 1495783665
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/DisplayIMGUIEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/DisplayIMGUIEditor.cs
new file mode 100755
index 0000000..7a57619
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/DisplayIMGUIEditor.cs
@@ -0,0 +1,86 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the DisplayIMGUI component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(DisplayIMGUI))]
+ public class DisplayIMGUIEditor : UnityEditor.Editor
+ {
+ private SerializedProperty _propMediaPlayer;
+ private SerializedProperty _propScaleMode;
+ private SerializedProperty _propColor;
+ private SerializedProperty _propAllowTransparency;
+ private SerializedProperty _propUseDepth;
+ private SerializedProperty _propDepth;
+ private SerializedProperty _propAreaFullscreen;
+ private SerializedProperty _propAreaX;
+ private SerializedProperty _propAreaY;
+ private SerializedProperty _propAreaWidth;
+ private SerializedProperty _propAreaHeight;
+ private SerializedProperty _propShowAreaInEditor;
+
+ void OnEnable()
+ {
+ _propMediaPlayer = this.CheckFindProperty("_mediaPlayer");
+ _propScaleMode = this.CheckFindProperty("_scaleMode");
+ _propColor = this.CheckFindProperty("_color");
+ _propAllowTransparency = this.CheckFindProperty("_allowTransparency");
+ _propUseDepth = this.CheckFindProperty("_useDepth");
+ _propDepth = this.CheckFindProperty("_depth");
+ _propAreaFullscreen = this.CheckFindProperty("_isAreaFullScreen");
+ _propAreaX = this.CheckFindProperty("_areaX");
+ _propAreaY = this.CheckFindProperty("_areaY");
+ _propAreaWidth = this.CheckFindProperty("_areaWidth");
+ _propAreaHeight = this.CheckFindProperty("_areaHeight");
+ _propShowAreaInEditor = this.CheckFindProperty("_showAreaInEditor");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ EditorGUI.BeginChangeCheck();
+
+ EditorGUILayout.PropertyField(_propMediaPlayer);
+ EditorGUILayout.PropertyField(_propScaleMode);
+ EditorGUILayout.PropertyField(_propColor);
+ EditorGUILayout.PropertyField(_propAllowTransparency);
+ EditorGUILayout.PropertyField(_propUseDepth);
+ if (_propUseDepth.boolValue)
+ {
+ EditorGUILayout.PropertyField(_propDepth);
+ }
+
+ // Area
+ EditorGUILayout.PropertyField(_propAreaFullscreen, new GUIContent("Full Screen"));
+ if (!_propAreaFullscreen.boolValue)
+ {
+ EditorGUILayout.PropertyField(_propAreaX, new GUIContent("X"));
+ EditorGUILayout.PropertyField(_propAreaY, new GUIContent("Y"));
+ EditorGUILayout.PropertyField(_propAreaWidth, new GUIContent("Width"));
+ EditorGUILayout.PropertyField(_propAreaHeight, new GUIContent("Height"));
+ }
+ EditorGUILayout.PropertyField(_propShowAreaInEditor, new GUIContent("Show in Editor"));
+
+ serializedObject.ApplyModifiedProperties();
+
+ // Force update
+ bool unhandledChanges = (EditorGUI.EndChangeCheck() && Application.isPlaying);
+ if (unhandledChanges)
+ {
+ foreach (Object obj in this.targets)
+ {
+ ((DisplayIMGUI)obj).Update();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/DisplayIMGUIEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/DisplayIMGUIEditor.cs.meta
new file mode 100755
index 0000000..44ac4d3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/DisplayIMGUIEditor.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8c822ced482d9444aa15d55b5f9d6e7a
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor.cs
new file mode 100755
index 0000000..e00bbc5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor.cs
@@ -0,0 +1,682 @@
+#define AVPROVIDEO_SUPPORT_LIVEEDITMODE
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(MediaPlayer))]
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ internal const string SettingsPrefix = "AVProVideo-MediaPlayerEditor-";
+
+ private SerializedProperty _propAutoOpen;
+ private SerializedProperty _propAutoStart;
+ private SerializedProperty _propLoop;
+ private SerializedProperty _propRate;
+ private SerializedProperty _propPersistent;
+ private SerializedProperty _propFilter;
+ private SerializedProperty _propWrap;
+ private SerializedProperty _propAniso;
+#if AVPRO_FEATURE_VIDEORESOLVE
+ private SerializedProperty _propUseVideoResolve;
+ private SerializedProperty _propVideoResolve;
+ private SerializedProperty _propVideoResolveOptions;
+#endif
+ private SerializedProperty _propResample;
+ private SerializedProperty _propResampleMode;
+ private SerializedProperty _propResampleBufferSize;
+ private SerializedProperty _propVideoMapping;
+ private SerializedProperty _propForceFileFormat;
+ private SerializedProperty _propFallbackMediaHints;
+
+ private static Texture2D _icon;
+ private static bool _isTrialVersion = false;
+ private static GUIStyle _styleSectionBox = null;
+
+ private AnimCollapseSection _sectionMediaInfo;
+ private AnimCollapseSection _sectionDebug;
+ private AnimCollapseSection _sectionSettings;
+ private AnimCollapseSection _sectionAboutHelp;
+ private List _settingSections = new List(16);
+ private List _platformSections = new List(8);
+
+ [MenuItem("GameObject/Video/AVPro Video - Media Player", false, 100)]
+ public static void CreateMediaPlayerEditor()
+ {
+ GameObject go = new GameObject("MediaPlayer");
+ go.AddComponent();
+ Selection.activeGameObject = go;
+ }
+
+ [MenuItem("GameObject/Video/AVPro Video - Media Player with Unity Audio", false, 101)]
+ public static void CreateMediaPlayerWithUnityAudioEditor()
+ {
+ GameObject go = new GameObject("MediaPlayer");
+ go.AddComponent();
+ go.AddComponent();
+ AudioOutput ao = go.AddComponent();
+ // Move the AudioOutput component above the AudioSource so that it acts as the audio generator
+ UnityEditorInternal.ComponentUtility.MoveComponentUp(ao);
+ Selection.activeGameObject = go;
+ }
+
+ private static void LoadSettings()
+ {
+ _platformIndex = EditorPrefs.GetInt(SettingsPrefix + "PlatformIndex", -1);
+ _showAlpha = EditorPrefs.GetBool(SettingsPrefix + "ShowAlphaChannel", false);
+ _showPreview = EditorPrefs.GetBool(SettingsPrefix + "ShowPreview", true);
+ _allowDeveloperMode = EditorPrefs.GetBool(SettingsPrefix + "AllowDeveloperMode", false);
+ _HTTPHeadersToggle = EditorPrefs.GetBool(SettingsPrefix + "HTTPHeadersToggle", false);
+ RecentItems.Load();
+ }
+
+ private void SaveSettings()
+ {
+ _sectionMediaInfo.Save();
+ _sectionDebug.Save();
+ _sectionSettings.Save();
+ _sectionAboutHelp.Save();
+
+ foreach (AnimCollapseSection section in _settingSections)
+ {
+ section.Save();
+ }
+ foreach (AnimCollapseSection section in _platformSections)
+ {
+ section.Save();
+ }
+
+ _sectionDevModeState.Save();
+ _sectionDevModeTexture.Save();
+ _sectionDevModePlaybackQuality.Save();
+ _sectionDevModeHapNotchLCDecoder.Save();
+ _sectionDevModeBufferedFrames.Save();
+
+ EditorPrefs.SetInt(SettingsPrefix + "PlatformIndex", _platformIndex);
+ EditorPrefs.SetBool(SettingsPrefix + "ShowAlphaChannel", _showAlpha);
+ EditorPrefs.SetBool(SettingsPrefix + "ShowPreview", _showPreview);
+ EditorPrefs.SetBool(SettingsPrefix + "AllowDeveloperMode", _allowDeveloperMode);
+ EditorPrefs.SetBool(SettingsPrefix + "HTTPHeadersToggle", _HTTPHeadersToggle);
+ RecentItems.Save();
+ }
+
+ //[MenuItem("RenderHeads/AVPro Video/Reset Settings", false, 101)]
+ internal static void DeleteSettings()
+ {
+ EditorPrefs.DeleteKey(SettingsPrefix + "PlatformIndex");
+ EditorPrefs.DeleteKey(SettingsPrefix + "ShowAlphaChannel");
+ EditorPrefs.DeleteKey(SettingsPrefix + "AllowDeveloperMode");
+ EditorPrefs.DeleteKey(SettingsPrefix + "HTTPHeadersToggle");
+
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Media"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Debug"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Settings"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("About / Help"));
+
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Source"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Main"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Audio"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Visual"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Network"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Media"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Subtitles"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Events"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Platform Specific"));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Global"));
+
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.Windows).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.macOS).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.Android).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.iOS).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.tvOS).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.visionOS).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.WindowsUWP).text));
+ EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.WebGL).text));
+ }
+
+ private void CreateSections()
+ {
+ const float colorSaturation = 0.66f;
+ Color mediaInfoColor = Color.HSVToRGB(0.55f, colorSaturation, 1f);
+ Color sourceColor = Color.HSVToRGB(0.4f, colorSaturation, 1f);
+ Color platformSpecificColor = Color.HSVToRGB(0.85f, colorSaturation, 1f);
+ Color platformColor = platformSpecificColor;
+ if (EditorGUIUtility.isProSkin)
+ {
+ platformColor *= 0.66f;
+ }
+
+ _sectionMediaInfo = new AnimCollapseSection("Media Info", false, false, OnInspectorGUI_MediaInfo, this, mediaInfoColor);
+ _sectionDebug = new AnimCollapseSection("Debug", false, true, OnInspectorGUI_Debug, this, Color.white);
+ _sectionSettings = new AnimCollapseSection("Settings", false, true, OnInspectorGUI_Settings, this, Color.white);
+ _sectionAboutHelp = new AnimCollapseSection("About / Help", false, false, OnInspectorGUI_About, this, Color.white);
+
+ _settingSections.Clear();
+ _settingSections.Add(new AnimCollapseSection("Source", false, true, OnInspectorGUI_Source, this, sourceColor));
+ _settingSections.Add(new AnimCollapseSection("Main", false, false, OnInspectorGUI_Main, this, Color.white));
+ _settingSections.Add(new AnimCollapseSection("Audio", false, false, OnInspectorGUI_Audio, this, Color.white));
+ _settingSections.Add(new AnimCollapseSection("Visual", true, false, OnInspectorGUI_Visual, this, Color.white));
+ //_settingSections.Add(new AnimCollapseSection("Network", true, false, OnInspectorGUI_Network, this, Color.white));
+ _settingSections.Add(new AnimCollapseSection("Subtitles", true, false, OnInspectorGUI_Subtitles, this, Color.white));
+ _settingSections.Add(new AnimCollapseSection("Events", true, false, OnInspectorGUI_Events, this, Color.white));
+ _settingSections.Add(new AnimCollapseSection("Platform Specific", true, false, OnInspectorGUI_PlatformOverrides, this, platformSpecificColor));
+ _settingSections.Add(new AnimCollapseSection("Global", true, false, OnInspectorGUI_GlobalSettings, this, Color.white));
+
+ _platformSections.Clear();
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.Windows), true, false, OnInspectorGUI_Override_Windows, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.macOS), true, false, OnInspectorGUI_Override_MacOSX, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.Android), true, false, OnInspectorGUI_Override_Android, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.iOS), true, false, OnInspectorGUI_Override_iOS, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.tvOS), true, false, OnInspectorGUI_Override_tvOS, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.visionOS), true, false, OnInspectorGUI_Override_visionOS, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.WindowsUWP), true, false, OnInspectorGUI_Override_WindowsUWP, this, platformColor, _platformSections));
+ _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.WebGL), true, false, OnInspectorGUI_Override_WebGL, this, platformColor, _platformSections));
+
+ _sectionDevModeState = new AnimCollapseSection("State", false, false, OnInspectorGUI_DevMode_State, this, Color.white);
+ _sectionDevModeTexture = new AnimCollapseSection("Texture", false, false, OnInspectorGUI_DevMode_Texture, this, Color.white);
+ _sectionDevModePlaybackQuality = new AnimCollapseSection("Presentation Quality", false, false, OnInspectorGUI_DevMode_PresentationQuality, this, Color.white);
+ _sectionDevModeHapNotchLCDecoder = new AnimCollapseSection("Hap/NotchLC Decoder", false, false, OnInspectorGUI_DevMode_HapNotchLCDecoder, this, Color.white);
+ _sectionDevModeBufferedFrames = new AnimCollapseSection("Buffers", false, false, OnInspectorGUI_DevMode_BufferedFrames, this, Color.white);
+ }
+
+ private void ResolveProperties()
+ {
+ _propMediaSource = this.CheckFindProperty("_mediaSource");
+ _propMediaReference = this.CheckFindProperty("_mediaReference");
+ _propMediaPath = this.CheckFindProperty("_mediaPath");
+ _propAutoOpen = this.CheckFindProperty("_autoOpen");
+ _propAutoStart = this.CheckFindProperty("_autoPlayOnStart");
+ _propLoop = this.CheckFindProperty("_loop");
+ _propRate = this.CheckFindProperty("_playbackRate");
+ _propVolume = this.CheckFindProperty("_audioVolume");
+ _propBalance = this.CheckFindProperty("_audioBalance");
+ _propMuted = this.CheckFindProperty("_audioMuted");
+ _propPersistent = this.CheckFindProperty("_persistent");
+ _propEvents = this.CheckFindProperty("_events");
+ _propEventMask = this.CheckFindProperty("_eventMask");
+ _propPauseMediaOnAppPause = this.CheckFindProperty("_pauseMediaOnAppPause");
+ _propPlayMediaOnAppUnpause = this.CheckFindProperty("_playMediaOnAppUnpause");
+ _propFilter = this.CheckFindProperty("_textureFilterMode");
+ _propWrap = this.CheckFindProperty("_textureWrapMode");
+ _propAniso = this.CheckFindProperty("_textureAnisoLevel");
+#if AVPRO_FEATURE_VIDEORESOLVE
+ _propUseVideoResolve = this.CheckFindProperty("_useVideoResolve");
+ _propVideoResolve = this.CheckFindProperty("_videoResolve");
+ _propVideoResolveOptions = this.CheckFindProperty("_videoResolveOptions");
+#endif
+ _propVideoMapping = this.CheckFindProperty("_videoMapping");
+ _propForceFileFormat = this.CheckFindProperty("_forceFileFormat");
+ _propFallbackMediaHints = this.CheckFindProperty("_fallbackMediaHints");
+ _propSubtitles = this.CheckFindProperty("_sideloadSubtitles");
+ _propSubtitlePath = this.CheckFindProperty("_subtitlePath");
+ _propResample = this.CheckFindProperty("_useResampler");
+ _propResampleMode = this.CheckFindProperty("_resampleMode");
+ _propResampleBufferSize = this.CheckFindProperty("_resampleBufferSize");
+ _propAudioHeadTransform = this.CheckFindProperty("_audioHeadTransform");
+ _propAudioEnableFocus = this.CheckFindProperty("_audioFocusEnabled");
+ _propAudioFocusOffLevelDB = this.CheckFindProperty("_audioFocusOffLevelDB");
+ _propAudioFocusWidthDegrees = this.CheckFindProperty("_audioFocusWidthDegrees");
+ _propAudioFocusTransform = this.CheckFindProperty("_audioFocusTransform");
+ }
+
+ private static Texture GetPlatformIcon(Platform platform)
+ {
+ string iconName = string.Empty;
+ switch (platform)
+ {
+ case Platform.Windows:
+ case Platform.macOS:
+ iconName = "BuildSettings.Standalone.Small";
+ break;
+ case Platform.Android:
+ iconName = "BuildSettings.Android.Small";
+ break;
+ case Platform.iOS:
+ iconName = "BuildSettings.iPhone.Small";
+ break;
+ case Platform.tvOS:
+ iconName = "BuildSettings.tvOS.Small";
+ break;
+ case Platform.visionOS:
+ iconName = "BuildSettings.visionOS.Small";
+ break;
+ case Platform.WindowsUWP:
+ iconName = "BuildSettings.Metro.Small";
+ break;
+ case Platform.WebGL:
+ iconName = "BuildSettings.WebGL.Small";
+ break;
+ }
+ Texture iconTexture = null;
+ if (!string.IsNullOrEmpty(iconName))
+ {
+ iconTexture = EditorGUIUtility.IconContent(iconName).image;
+ }
+ return iconTexture;
+ }
+
+ private static GUIContent GetPlatformButtonContent(Platform platform)
+ {
+ return new GUIContent(Helper.GetPlatformName(platform), GetPlatformIcon(platform));
+ }
+
+ private void FixRogueEditorBug()
+ {
+ // NOTE: There seems to be a bug in Unity where the editor script will call OnEnable and OnDisable twice.
+ // This is resolved by setting the Window Layout mode to Default.
+ // It causes a problem (at least in Unity 2020.1.11) where the System.Action invocations (usd by AnimCollapseSection)
+ // seem to be in a different 'this' context and so their pointers to serializedObject is not the same, resulting in
+ // properties modified not marking the serialisedObject as dirty. To get around this issue we use this static bool
+ // so that OnEnable can only be called once.
+ // https://answers.unity.com/questions/1216599/custom-editor-gets-created-multiple-times-and-rece.html
+ var remainingBuggedEditors = FindObjectsOfType();
+ foreach(var editor in remainingBuggedEditors)
+ {
+ if (editor == this)
+ {
+ continue;
+ }
+ DestroyImmediate(editor);
+ }
+ }
+
+ private void OnEnable()
+ {
+ FixRogueEditorBug();
+
+ CreateSections();
+
+ LoadSettings();
+
+ _isTrialVersion = IsTrialVersion();
+
+ if (_platformNames == null)
+ {
+ _platformNames = new GUIContent[]
+ {
+ GetPlatformButtonContent(Platform.Windows),
+ GetPlatformButtonContent(Platform.macOS),
+ GetPlatformButtonContent(Platform.iOS),
+ GetPlatformButtonContent(Platform.tvOS),
+ GetPlatformButtonContent(Platform.visionOS),
+ GetPlatformButtonContent(Platform.Android),
+ GetPlatformButtonContent(Platform.WindowsUWP),
+ GetPlatformButtonContent(Platform.WebGL)
+ };
+ }
+
+ ResolveProperties();
+ }
+
+ private void OnDisable()
+ {
+ ClosePreview();
+ SaveSettings();
+
+ if (!Application.isPlaying)
+ {
+ // NOTE: For some reason when transitioning into Play mode, Dispose() is not called in the MediaPlayer if
+ // it was playing before the transition because all members are reset to null. So we must force this
+ // dispose of all resources to handle this case.
+ // Sadly it means we can't keep persistent playback in the inspector when it loses focus, but
+ // hopefully we can find a way to achieve this in the future
+ /*if (EditorApplication.isPlayingOrWillChangePlaymode)
+ {
+ // NOTE: This seems to work for the above issue, but
+ // we'd need to move it to the global event for when the play state changes
+ MediaPlayer.EditorAllPlayersDispose();
+ }*/
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.ForceDispose();
+ }
+ }
+ }
+
+ private void CreateStyles()
+ {
+ if (_styleSectionBox == null)
+ {
+ _styleSectionBox = new GUIStyle(GUI.skin.box);
+ if (!EditorGUIUtility.isProSkin)
+ {
+ _styleSectionBox = new GUIStyle(GUI.skin.box);
+ //_styleSectionBox.normal.background = Texture2D.redTexture;
+ }
+ }
+
+ _iconPlayButton = EditorGUIUtility.IconContent("d_PlayButton");
+ _iconPauseButton = EditorGUIUtility.IconContent("d_PauseButton");
+ _iconSceneViewAudio = EditorGUIUtility.IconContent("d_SceneViewAudio");
+ _iconProject = EditorGUIUtility.IconContent("d_Project");
+ _iconRotateTool = EditorGUIUtility.IconContent("d_RotateTool");
+
+ AnimCollapseSection.CreateStyles();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ MediaPlayer media = (this.target) as MediaPlayer;
+
+ // NOTE: It is important that serializedObject.Update() is called before media.EditorUpdate()
+ // as otherwise the serializedPropertys are not correctly detected as modified
+ serializedObject.Update();
+
+#if AVPROVIDEO_SUPPORT_LIVEEDITMODE
+ bool isPlayingInEditor = false;
+ // Update only during the layout event so that nothing updates for the render event
+ if (!Application.isPlaying && Event.current.type == EventType.Layout)
+ {
+ isPlayingInEditor = media.EditorUpdate();
+ }
+#endif
+
+ if (media == null || _propMediaPath == null)
+ {
+ return;
+ }
+
+ CreateStyles();
+
+ _icon = GetIcon(_icon);
+
+ ShowImportantMessages();
+
+ if (media != null)
+ {
+ OnInspectorGUI_Player(media, media.TextureProducer);
+ }
+
+ AnimCollapseSection.Show(_sectionMediaInfo);
+ if (_allowDeveloperMode)
+ {
+ AnimCollapseSection.Show(_sectionDebug);
+ }
+ AnimCollapseSection.Show(_sectionSettings);
+
+ if (serializedObject.ApplyModifiedProperties())
+ {
+ EditorUtility.SetDirty(target);
+ }
+
+ AnimCollapseSection.Show(_sectionAboutHelp);
+#if AVPROVIDEO_SUPPORT_LIVEEDITMODE
+ if (isPlayingInEditor)
+ {
+ GL.InvalidateState();
+ // NOTE: there seems to be a bug in Unity (2019.3.13) where if you don't have
+ // GL.sRGBWrite = true and then call RepaintAllViews() it makes the current Inspector
+ // background turn black. This only happens when using D3D12
+ // UPDATE: this is happening in Unity 2019.4.15 as well, and in D3D11 mode. It only
+ // happens when loading a video via the Recent Menu.
+
+ bool originalSRGBWrite = GL.sRGBWrite;
+ GL.sRGBWrite = true;
+ //this.Repaint();
+ UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
+ GL.sRGBWrite = originalSRGBWrite;
+ }
+ // TODO: OnDisable - stop the video if it's playing (and unload it?)
+#endif
+ }
+
+ private void OnInspectorGUI_Settings()
+ {
+ foreach (AnimCollapseSection section in _settingSections)
+ {
+ AnimCollapseSection.Show(section, indentLevel:1);
+ }
+ }
+
+ private void ShowSupportWindowButton()
+ {
+ //GUI.backgroundColor = new Color(0.96f, 0.25f, 0.47f);
+ //if (GUILayout.Button("◄ AVPro Video ►\nHelp & Support"))
+ if (GUILayout.Button("Click here for \nHelp & Support"))
+ {
+ SupportWindow.Init();
+ }
+ //GUI.backgroundColor = Color.white;
+ }
+
+ private void ShowImportantMessages()
+ {
+ // Describe the watermark for trial version
+ if (_isTrialVersion)
+ {
+ string message = string.Empty;
+ if (Application.isPlaying)
+ {
+ #if UNITY_EDITOR_WIN
+ MediaPlayer media = (this.target) as MediaPlayer;
+ message = "The watermark is the horizontal bar that moves vertically and the small 'AVPRO TRIAL' text.";
+ if (media.Info != null && media.Info.GetPlayerDescription().Contains("MF-MediaEngine-Hardware"))
+ {
+ message = "The watermark is the RenderHeads logo that moves around the image.";
+ }
+ #elif UNITY_EDITOR_OSX
+ message = "The RenderHeads logo is the watermark.";
+ #endif
+ }
+
+ EditorHelper.IMGUI.BeginWarningTextBox("AVPRO VIDEO - TRIAL WATERMARK", message, Color.yellow, Color.yellow, Color.white);
+ if (GUILayout.Button("Purchase"))
+ {
+ Application.OpenURL(LinkPurchase);
+ }
+ EditorHelper.IMGUI.EndWarningTextBox();
+ }
+
+ // Warning about not using multi-threaded rendering
+ {
+ bool showWarningMT = false;
+
+ if (/*EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.iOS ||
+ EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.tvOS ||*/
+ EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.Android)
+ {
+#if UNITY_2017_2_OR_NEWER
+ showWarningMT = !UnityEditor.PlayerSettings.GetMobileMTRendering(BuildTargetGroup.Android);
+#else
+ showWarningMT = !UnityEditor.PlayerSettings.mobileMTRendering;
+#endif
+ }
+ /*if (EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.WSA)
+ {
+ }*/
+ if (showWarningMT)
+ {
+ EditorHelper.IMGUI.WarningTextBox("Performance Warning", "Deploying to Android with multi-threaded rendering disabled is not recommended. Enable multi-threaded rendering in the Player Settings > Other Settings panel.", Color.yellow, Color.yellow, Color.white);
+ }
+ }
+
+#if !UNITY_2019_3_OR_NEWER
+ if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12)
+ {
+ EditorHelper.IMGUI.WarningTextBox("Compatibility Warning", "Direct3D 12 is not supported until Unity 2019.3", Color.yellow, Color.yellow, Color.white);
+ }
+#endif
+ }
+
+ private void OnInspectorGUI_Main()
+ {
+ /////////////////// STARTUP FIELDS
+
+ EditorGUILayout.BeginVertical(_styleSectionBox);
+ GUILayout.Label("Startup", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propAutoOpen);
+ EditorGUILayout.PropertyField(_propAutoStart, new GUIContent("Auto Play"));
+ EditorGUILayout.EndVertical();
+
+ /////////////////// PLAYBACK FIELDS
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Playback", EditorStyles.boldLabel);
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propLoop);
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "Loop");
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.Loop = _propLoop.boolValue;
+ }
+ }
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propRate);
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "PlaybackRate");
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.PlaybackRate = _propRate.floatValue;
+ }
+ }
+
+ EditorGUILayout.EndVertical();
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Other", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propPersistent, new GUIContent("Persistent", "Use DontDestroyOnLoad so this object isn't destroyed between level loads"));
+
+ if (_propForceFileFormat != null)
+ {
+ GUIContent label = new GUIContent("Force File Format", "Override automatic format detection when using non-standard file extensions");
+ _propForceFileFormat.enumValueIndex = EditorGUILayout.Popup(label, _propForceFileFormat.enumValueIndex, _fileFormatGuiNames);
+ }
+
+ EditorGUILayout.EndVertical();
+ }
+
+ private void OnInspectorGUI_Visual()
+ {
+#if AVPRO_FEATURE_VIDEORESOLVE
+
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Resolve", EditorStyles.boldLabel);
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propUseVideoResolve);
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "UseVideoResolve");
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.UseVideoResolve = _propUseVideoResolve.boolValue;
+ }
+ }
+
+ if (_propUseVideoResolve.boolValue)
+ {
+ EditorGUILayout.PropertyField(_propVideoResolve);
+ /*EditorGUI.indentLevel++;
+ EditorGUILayout.PropertyField(_propVideoResolveOptions, true);
+ EditorGUI.indentLevel--;*/
+ }
+
+ GUILayout.EndVertical();
+ }
+#endif
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Texture", EditorStyles.boldLabel);
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propFilter, new GUIContent("Filter"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "TextureFilterMode");
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.TextureFilterMode = (FilterMode)_propFilter.enumValueIndex;
+ }
+ }
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propWrap, new GUIContent("Wrap"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "TextureWrapMode");
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.TextureWrapMode = (TextureWrapMode)_propWrap.enumValueIndex;
+ }
+ }
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propAniso, new GUIContent("Aniso"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "TextureAnisoLevel");
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.TextureAnisoLevel = _propAniso.intValue;
+ }
+ }
+
+ EditorGUILayout.EndVertical();
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Layout Mapping", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propVideoMapping);
+ EditorGUILayout.EndVertical();
+
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Resampler (BETA)", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propResample);
+ EditorGUI.BeginDisabledGroup(!_propResample.boolValue);
+
+ EditorGUILayout.PropertyField(_propResampleMode);
+ EditorGUILayout.PropertyField(_propResampleBufferSize);
+
+ EditorGUI.EndDisabledGroup();
+ EditorGUILayout.EndVertical();
+ }
+ }
+
+ private static bool IsTrialVersion()
+ {
+ string version = GetPluginVersion();
+ return version.Contains("-trial");
+ }
+
+ //private int _updateFrameCount = -1;
+ public override bool RequiresConstantRepaint()
+ {
+ MediaPlayer media = (this.target) as MediaPlayer;
+ if (media != null && media.Control != null && media.isActiveAndEnabled && media.Info.GetDuration() > 0.0)
+ {
+ if (!media.Info.HasVideo())
+ {
+ if (media.Info.HasAudio())
+ {
+ return true;
+ }
+ }
+ else if (media.TextureProducer.GetTexture() != null)
+ {
+ //int frameCount = media.TextureProducer.GetTextureFrameCount();
+ //if (_updateFrameCount != frameCount)
+ {
+ //_updateFrameCount = frameCount;
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor.cs.meta
new file mode 100755
index 0000000..7cb76c6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8fdcfef6a9f4f724486d3374e03f4864
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_AboutHelp.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_AboutHelp.cs
new file mode 100755
index 0000000..47c2473
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_AboutHelp.cs
@@ -0,0 +1,160 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// About/Help section of the editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ public const string LinkPluginWebsite = "https://renderheads.com/products/avpro-video/";
+ public const string LinkForumPage = "https://forum.unity.com/threads/released-avpro-video-complete-video-playback-solution.385611/";
+ public const string LinkForumLastPage = "https://forum.unity.com/threads/released-avpro-video-complete-video-playback-solution.385611/page-100";
+ public const string LinkGithubIssues = "https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues";
+ public const string LinkGithubIssuesNew = "https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/new/choose";
+ public const string LinkAssetStorePage = "https://assetstore.unity.com/packages/slug/181844?aid=1101lcNgx";
+ public const string LinkUserManual = "https://www.renderheads.com/content/docs/AVProVideo/";
+ public const string LinkScriptingClassReference = "https://www.renderheads.com/content/docs/AVProVideo/api/RenderHeads.Media.AVProVideo.html";
+ public const string LinkPurchase = "https://www.renderheads.com/content/docs/AVProVideo/articles/download.html";
+
+ private struct Native
+ {
+#if UNITY_EDITOR_WIN
+ [System.Runtime.InteropServices.DllImport("AVProVideo")]
+ public static extern System.IntPtr GetPluginVersion();
+#elif UNITY_EDITOR_OSX
+ [System.Runtime.InteropServices.DllImport("AVProVideo")]
+ public static extern System.IntPtr AVPPluginGetVersionStringPointer();
+#endif
+ }
+
+ private static string GetPluginVersion()
+ {
+ string version = "Unknown";
+ try
+ {
+#if UNITY_EDITOR_WIN
+ version = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Native.GetPluginVersion());
+#elif UNITY_EDITOR_OSX
+ version = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Native.AVPPluginGetVersionStringPointer());
+#endif
+ }
+ catch (System.DllNotFoundException e)
+ {
+#if UNITY_EDITOR_OSX
+ Debug.LogError("[AVProVideo] Failed to load Bundle. " + e.Message);
+#else
+ Debug.LogError("[AVProVideo] Failed to load DLL. " + e.Message);
+#endif
+ }
+ return version;
+ }
+
+ private static Texture2D GetIcon(Texture2D icon)
+ {
+ if (icon == null)
+ {
+ icon = Resources.Load("AVProVideoIcon");
+ }
+ return icon;
+ }
+
+ private void OnInspectorGUI_About()
+ {
+ EditorGUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ _icon = GetIcon(_icon);
+ if (_icon != null)
+ {
+ GUILayout.Label(new GUIContent(_icon));
+ }
+ GUILayout.FlexibleSpace();
+ EditorGUILayout.EndHorizontal();
+
+ GUI.color = Color.yellow;
+ EditorHelper.IMGUI.CentreLabel("AVPro Video by RenderHeads Ltd", EditorStyles.boldLabel);
+ EditorHelper.IMGUI.CentreLabel("version " + Helper.AVProVideoVersion + " (plugin v" + GetPluginVersion() + ")");
+ GUI.color = Color.white;
+ GUI.backgroundColor = Color.white;
+
+ if (_icon != null)
+ {
+ GUILayout.Space(8f);
+ ShowSupportWindowButton();
+ GUILayout.Space(8f);
+ }
+
+ EditorGUILayout.LabelField("Links", EditorStyles.boldLabel);
+
+ GUILayout.Space(8f);
+
+ EditorGUILayout.LabelField("Documentation");
+ if (GUILayout.Button("User Manual, FAQ, Release Notes", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(LinkUserManual);
+ }
+ if (GUILayout.Button("Scripting Class Reference", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(LinkScriptingClassReference);
+ }
+
+ GUILayout.Space(16f);
+
+ GUILayout.Label("Bugs and Support");
+ if (GUILayout.Button("Open Help & Support", GUILayout.ExpandWidth(false)))
+ {
+ SupportWindow.Init();
+ }
+
+ GUILayout.Space(16f);
+
+ GUILayout.Label("Rate and Review (★★★★☆)", GUILayout.ExpandWidth(false));
+ if (GUILayout.Button("Asset Store Page", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(LinkAssetStorePage);
+ }
+
+ GUILayout.Space(16f);
+
+ GUILayout.Label("Community");
+ if (GUILayout.Button("Forum Thread", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(LinkForumPage);
+ }
+
+ GUILayout.Space(16f);
+
+ GUILayout.Label("Homepage", GUILayout.ExpandWidth(false));
+ if (GUILayout.Button("Official Website", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(LinkPluginWebsite);
+ }
+
+ GUILayout.Space(32f);
+
+ EditorGUILayout.LabelField("Credits", EditorStyles.boldLabel);
+ GUILayout.Space(8f);
+
+ EditorHelper.IMGUI.CentreLabel("Programming", EditorStyles.boldLabel);
+ EditorHelper.IMGUI.CentreLabel("Andrew Griffiths");
+ EditorHelper.IMGUI.CentreLabel("Morris Butler");
+ EditorHelper.IMGUI.CentreLabel("Ste Butcher");
+ EditorHelper.IMGUI.CentreLabel("Richard Turnbull");
+ EditorHelper.IMGUI.CentreLabel("Sunrise Wang");
+ EditorHelper.IMGUI.CentreLabel("Muano Mainganye");
+ EditorHelper.IMGUI.CentreLabel("Shane Marks");
+ GUILayout.Space(8f);
+ EditorHelper.IMGUI.CentreLabel("Graphics", EditorStyles.boldLabel);
+ GUILayout.Space(8f);
+ EditorHelper.IMGUI.CentreLabel("Jeff Rusch");
+ EditorHelper.IMGUI.CentreLabel("Luke Godward");
+
+ GUILayout.Space(32f);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_AboutHelp.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_AboutHelp.cs.meta
new file mode 100755
index 0000000..f00d5a3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_AboutHelp.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2463176874e32294998504d6b1f2f21c
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Android.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Android.cs
new file mode 100755
index 0000000..b3491c3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Android.cs
@@ -0,0 +1,191 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private readonly static GUIContent[] _audioModesAndroid =
+ {
+ new GUIContent("System Direct"),
+ new GUIContent("Unity"),
+ new GUIContent("Facebook Audio 360", "Initialises player with Facebook Audio 360 support"),
+ };
+
+ private readonly static GUIContent[] _blitTextureFilteringAndroid =
+ {
+ new GUIContent("Point"),
+ new GUIContent("Bilinear"),
+ new GUIContent("Trilinear"),
+ };
+
+ private readonly static FieldDescription _optionFileOffset = new FieldDescription(".fileOffset", GUIContent.none);
+// private readonly static FieldDescription _optionBlitTextureFiltering = new FieldDescription(".blitTextureFiltering", new GUIContent("Blit Texture Filtering", "The texture filtering used for the final internal blit."));
+// private readonly static FieldDescription _optionShowPosterFrames = new FieldDescription(".showPosterFrame", new GUIContent("Show Poster Frame", "Allows a paused loaded video to display the initial frame. This uses up decoder resources."));
+ private readonly static FieldDescription _optionPreferSoftwareDecoder = new FieldDescription(".preferSoftwareDecoder", GUIContent.none);
+ private readonly static FieldDescription _optionForceRtpTCP = new FieldDescription(".forceRtpTCP", GUIContent.none);
+ private readonly static FieldDescription _optionForceEnableMediaCodecAsynchronousQueueing = new FieldDescription(".forceEnableMediaCodecAsynchronousQueueing", GUIContent.none);
+ private readonly static FieldDescription _optionPreferredMaximumResolution = new FieldDescription("._preferredMaximumResolution", new GUIContent("Preferred Maximum Resolution", "The desired maximum resolution of the video."));
+#if UNITY_2017_2_OR_NEWER
+ private readonly static FieldDescription _optionCustomPreferredMaxResolution = new FieldDescription("._customPreferredMaximumResolution", new GUIContent(" "));
+#endif
+ private readonly static FieldDescription _optionCustomPreferredPeakBitRate = new FieldDescription("._preferredPeakBitRate", new GUIContent("Preferred Peak BitRate", "The desired limit of network bandwidth consumption for playback, set to 0 for no preference."));
+ private readonly static FieldDescription _optionCustomPreferredPeakBitRateUnits = new FieldDescription("._preferredPeakBitRateUnits", new GUIContent());
+
+ private readonly static FieldDescription _optionMinBufferMs = new FieldDescription(".minBufferMs", new GUIContent("Minimum Buffer Ms"));
+ private readonly static FieldDescription _optionMaxBufferMs = new FieldDescription(".maxBufferMs", new GUIContent("Maximum Buffer Ms"));
+ private readonly static FieldDescription _optionBufferForPlaybackMs = new FieldDescription(".bufferForPlaybackMs", new GUIContent("Buffer For Playback Ms"));
+ private readonly static FieldDescription _optionBufferForPlaybackAfterRebufferMs = new FieldDescription(".bufferForPlaybackAfterRebufferMs", new GUIContent("Buffer For Playback After Rebuffer Ms"));
+
+ private void OnInspectorGUI_Override_Android()
+ {
+ //MediaPlayer media = (this.target) as MediaPlayer;
+ //MediaPlayer.OptionsAndroid options = media._optionsAndroid;
+
+ GUILayout.Space(8f);
+
+ string optionsVarName = MediaPlayer.GetPlatformOptionsVariable(Platform.Android);
+
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ DisplayPlatformOption(optionsVarName, _optionVideoAPI);
+
+ {
+ SerializedProperty propFileOffset = DisplayPlatformOption(optionsVarName, _optionFileOffset);
+ propFileOffset.intValue = Mathf.Max(0, propFileOffset.intValue);
+ }
+
+ {
+ SerializedProperty propTextureFormat = DisplayPlatformOption(optionsVarName, _optionTextureFormat);
+ if( (MediaPlayer.PlatformOptions.TextureFormat)( propTextureFormat.enumValueIndex ) == MediaPlayer.PlatformOptions.TextureFormat.YCbCr420_OES )
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Info, "OES can require special shaders. Make sure you assign an AVPro Video OES shader to your meshes/materials that need to display video.");
+
+ // PlayerSettings.virtualRealitySupported is deprecated from 2019.3
+#if !UNITY_2019_3_OR_NEWER
+ if (PlayerSettings.virtualRealitySupported)
+#endif
+ {
+ if (PlayerSettings.stereoRenderingPath != StereoRenderingPath.MultiPass)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Error, "OES only supports multi-pass stereo rendering path, please change in Player Settings.");
+ }
+ }
+
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "OES is not supported in the trial version. If your Android plugin is not trial then you can ignore this warning.");
+ }
+ }
+
+// {
+// SerializedProperty propBlitTextureFiltering = DisplayPlatformOptionEnum(optionsVarName, _optionBlitTextureFiltering, _blitTextureFilteringAndroid);
+// propBlitTextureFiltering.intValue = Mathf.Max(0, propBlitTextureFiltering.intValue);
+// }
+
+ EditorGUILayout.EndVertical();
+ }
+
+ if (_showUltraOptions)
+ {
+ SerializedProperty httpHeadersProp = serializedObject.FindProperty(optionsVarName + ".httpHeaders.httpHeaders");
+ if (httpHeadersProp != null)
+ {
+ OnInspectorGUI_HttpHeaders(httpHeadersProp);
+ }
+
+ SerializedProperty keyAuthProp = serializedObject.FindProperty(optionsVarName + ".keyAuth");
+ if (keyAuthProp != null)
+ {
+ OnInspectorGUI_HlsDecryption(keyAuthProp);
+ }
+ }
+
+#if false
+ // MediaPlayer API options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("MediaPlayer API Options", EditorStyles.boldLabel);
+
+ DisplayPlatformOption(optionsVarName, _optionShowPosterFrames);
+
+ EditorGUILayout.EndVertical();
+ }
+#endif
+
+ // ExoPlayer API options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("ExoPlayer API Options", EditorStyles.boldLabel);
+
+ DisplayPlatformOption(optionsVarName, _optionPreferSoftwareDecoder);
+ DisplayPlatformOption(optionsVarName, _optionForceRtpTCP);
+ DisplayPlatformOption(optionsVarName, _optionForceEnableMediaCodecAsynchronousQueueing);
+
+ // Audio
+ {
+ SerializedProperty propAudioOutput = DisplayPlatformOptionEnum(optionsVarName, _optionAudioOutput, _audioModesAndroid);
+ if ((Android.AudioOutput)propAudioOutput.enumValueIndex == Android.AudioOutput.FacebookAudio360)
+ {
+ if (_showUltraOptions)
+ {
+ EditorGUILayout.Space();
+ EditorGUILayout.LabelField("Facebook Audio 360", EditorStyles.boldLabel);
+ DisplayPlatformOptionEnum(optionsVarName, _optionAudio360ChannelMode, _audio360ChannelMapGuiNames);
+ DisplayPlatformOption(optionsVarName, _optionAudio360LatencyMS);
+ }
+ }
+ }
+
+ GUILayout.Space(8f);
+
+// EditorGUILayout.BeginVertical();
+ EditorGUILayout.LabelField("Adaptive Stream", EditorStyles.boldLabel);
+
+ DisplayPlatformOption(optionsVarName, _optionStartMaxBitrate);
+
+ {
+ SerializedProperty preferredMaximumResolutionProp = DisplayPlatformOption(optionsVarName, _optionPreferredMaximumResolution);
+ if ((MediaPlayer.OptionsAndroid.Resolution)preferredMaximumResolutionProp.intValue == MediaPlayer.OptionsAndroid.Resolution.Custom)
+ {
+#if UNITY_2017_2_OR_NEWER
+ DisplayPlatformOption(optionsVarName, _optionCustomPreferredMaxResolution);
+#endif
+ }
+ }
+
+ {
+ EditorGUILayout.BeginHorizontal();
+ DisplayPlatformOption(optionsVarName, _optionCustomPreferredPeakBitRate);
+ DisplayPlatformOption(optionsVarName, _optionCustomPreferredPeakBitRateUnits);
+ EditorGUILayout.EndHorizontal();
+ }
+
+ DisplayPlatformOption(optionsVarName, _optionMinBufferMs);
+ DisplayPlatformOption(optionsVarName, _optionMaxBufferMs);
+ DisplayPlatformOption(optionsVarName, _optionBufferForPlaybackMs);
+ DisplayPlatformOption(optionsVarName, _optionBufferForPlaybackAfterRebufferMs);
+
+ EditorGUILayout.EndVertical();
+ }
+ GUI.enabled = true;
+
+ /*
+ SerializedProperty propFileOffsetLow = serializedObject.FindProperty(optionsVarName + ".fileOffsetLow");
+ SerializedProperty propFileOffsetHigh = serializedObject.FindProperty(optionsVarName + ".fileOffsetHigh");
+ if (propFileOffsetLow != null && propFileOffsetHigh != null)
+ {
+ propFileOffsetLow.intValue = ;
+
+ EditorGUILayout.PropertyField(propFileOFfset);
+ }*/
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Android.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Android.cs.meta
new file mode 100755
index 0000000..a2be238
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Android.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0516948b5fec81a4eb1566ebd6d4027a
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Apple.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Apple.cs
new file mode 100755
index 0000000..23f2954
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Apple.cs
@@ -0,0 +1,145 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private readonly static FieldDescription _optionAudioMode = new FieldDescription("._audioMode", new GUIContent("Audio Mode", "Unity mode does not work with HLS video"));
+ private readonly static FieldDescription _optionTextureFormat = new FieldDescription(".textureFormat", new GUIContent("Texture Format", "BGRA32 is the most compatible.\nYCbCr420_OES requires less memory and processing however it does require shader support."));
+ private readonly static FieldDescription _optionPreferredForwardBufferDuration = new FieldDescription("._preferredForwardBufferDuration", new GUIContent("Preferred Forward Buffer Duration", "The duration in seconds the player should buffer ahead of the playhead to prevent stalling. Set to 0 to let the system decide."));
+ private readonly static FieldDescription _optionCustomPreferredPeakBitRateApple = new FieldDescription("._preferredPeakBitRate", new GUIContent("Preferred Peak BitRate", "The desired limit of network bandwidth consumption for playback, set to 0 for no preference."));
+ private readonly static FieldDescription _optionCustomPreferredPeakBitRateUnitsApple = new FieldDescription("._preferredPeakBitRateUnits", new GUIContent());
+
+ private void OnInspectorGUI_Override_Apple(Platform platform)
+ {
+ GUILayout.Space(8f);
+
+ string optionsVarName = MediaPlayer.GetPlatformOptionsVariable(platform);
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ DisplayPlatformOption(optionsVarName, _optionTextureFormat);
+
+ SerializedProperty flagsProp = serializedObject.FindProperty(optionsVarName + "._flags");
+ MediaPlayer.OptionsApple.Flags flags = flagsProp != null ? (MediaPlayer.OptionsApple.Flags)flagsProp.intValue : 0;
+
+ // Texture flags
+ if (flagsProp != null)
+ {
+ bool generateMipmaps = flags.GenerateMipmaps();
+ generateMipmaps = EditorGUILayout.Toggle(new GUIContent("Generate Mipmaps"), generateMipmaps);
+ flags = flags.SetGenerateMipMaps(generateMipmaps);
+ }
+
+ // Audio
+ DisplayPlatformOption(optionsVarName, _optionAudioMode);
+
+ // Platform specific flags
+ if (flagsProp != null)
+ {
+ if (platform == Platform.macOS || platform == Platform.iOS)
+ {
+ bool b = flags.AllowExternalPlayback();
+ b = EditorGUILayout.Toggle(new GUIContent("Allow External Playback", "Enables support for playback on external devices via AirPlay."), b);
+ flags = flags.SetAllowExternalPlayback(b);
+ }
+
+ if (platform == Platform.iOS)
+ {
+ bool b = flags.ResumePlaybackAfterAudioSessionRouteChange();
+ b = EditorGUILayout.Toggle(new GUIContent("Resume playback after audio route change", "The default behaviour is for playback to pause when the audio route changes, for instance when disconnecting headphones."), b);
+ flags = flags.SetResumePlaybackAfterAudioSessionRouteChange(b);
+ }
+
+ bool playWithoutBuffering = flags.PlayWithoutBuffering();
+ playWithoutBuffering = EditorGUILayout.Toggle(new GUIContent("Play without buffering"), playWithoutBuffering);
+ flags = flags.SetPlayWithoutBuffering(playWithoutBuffering);
+
+ bool useSinglePlayerItem = flags.UseSinglePlayerItem();
+ useSinglePlayerItem = EditorGUILayout.Toggle(new GUIContent("Use single player item", "Restricts the media player to using only one player item. This can help reduce network usage for remote videos but will cause a stall when looping."), useSinglePlayerItem);
+ flags = flags.SetUseSinglePlayerItem(useSinglePlayerItem);
+ }
+
+ SerializedProperty maximumPlaybackRateProp = serializedObject.FindProperty(optionsVarName + ".maximumPlaybackRate");
+ if (maximumPlaybackRateProp != null)
+ {
+ EditorGUILayout.Slider(maximumPlaybackRateProp, 2.0f, 10.0f, new GUIContent("Max Playback Rate", "Increase the maximum playback rate before which playback switches to key-frames only."));
+ }
+
+ GUILayout.Space(8f);
+
+ EditorGUILayout.BeginVertical();
+ EditorGUILayout.LabelField("Network", EditorStyles.boldLabel);
+
+ SerializedProperty preferredMaximumResolutionProp = DisplayPlatformOption(optionsVarName, _optionPreferredMaximumResolution);
+ if ((MediaPlayer.OptionsApple.Resolution)preferredMaximumResolutionProp.intValue == MediaPlayer.OptionsApple.Resolution.Custom)
+ {
+ #if UNITY_2017_2_OR_NEWER
+ DisplayPlatformOption(optionsVarName, _optionCustomPreferredMaxResolution);
+ #endif
+ }
+
+ EditorGUILayout.BeginHorizontal();
+ DisplayPlatformOption(optionsVarName, _optionCustomPreferredPeakBitRateApple);
+ DisplayPlatformOption(optionsVarName, _optionCustomPreferredPeakBitRateUnitsApple);
+ EditorGUILayout.EndHorizontal();
+
+ DisplayPlatformOption(optionsVarName, _optionPreferredForwardBufferDuration);
+
+ EditorGUILayout.EndVertical();
+
+ EditorGUILayout.EndVertical();
+
+ // Set the flags
+
+ if (flagsProp != null)
+ {
+ flagsProp.intValue = (int)flags;
+ }
+
+ if (_showUltraOptions)
+ {
+ SerializedProperty keyAuthProp = serializedObject.FindProperty(optionsVarName + ".keyAuth");
+ if (keyAuthProp != null)
+ {
+ OnInspectorGUI_HlsDecryption(keyAuthProp);
+ }
+
+ SerializedProperty httpHeadersProp = serializedObject.FindProperty(optionsVarName + ".httpHeaders.httpHeaders");
+ if (httpHeadersProp != null)
+ {
+ OnInspectorGUI_HttpHeaders(httpHeadersProp);
+ }
+ }
+ }
+
+ private void OnInspectorGUI_Override_MacOSX()
+ {
+ OnInspectorGUI_Override_Apple(Platform.macOS);
+ }
+
+ private void OnInspectorGUI_Override_iOS()
+ {
+ OnInspectorGUI_Override_Apple(Platform.iOS);
+ }
+
+ private void OnInspectorGUI_Override_tvOS()
+ {
+ OnInspectorGUI_Override_Apple(Platform.tvOS);
+ }
+
+ private void OnInspectorGUI_Override_visionOS()
+ {
+ OnInspectorGUI_Override_Apple(Platform.visionOS);
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Apple.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Apple.cs.meta
new file mode 100755
index 0000000..8c8e461
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Apple.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 38bbbff2994464c48b6d633a311b63f6
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Audio.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Audio.cs
new file mode 100755
index 0000000..2db8578
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Audio.cs
@@ -0,0 +1,87 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private SerializedProperty _propVolume;
+ private SerializedProperty _propBalance;
+ private SerializedProperty _propMuted;
+ private SerializedProperty _propAudioHeadTransform;
+ private SerializedProperty _propAudioEnableFocus;
+ private SerializedProperty _propAudioFocusOffLevelDB;
+ private SerializedProperty _propAudioFocusWidthDegrees;
+ private SerializedProperty _propAudioFocusTransform;
+
+ private void OnInspectorGUI_Audio()
+ {
+ if (EditorUtility.audioMasterMute)
+ {
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.HelpBox("Audio is currently muted in Editor", MessageType.Warning, true);
+ if (GUILayout.Button("Unmute", GUILayout.ExpandHeight(true)))
+ {
+ EditorUtility.audioMasterMute = false;
+ UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); // To force the GameView audio mute toggle display state to update
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propVolume, new GUIContent("Volume"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.AudioVolume = _propVolume.floatValue;
+ }
+ }
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propBalance, new GUIContent("Balance"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.AudioBalance = _propBalance.floatValue;
+ }
+ }
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propMuted, new GUIContent("Muted"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ foreach (MediaPlayer player in this.targets)
+ {
+ player.AudioMuted = _propMuted.boolValue;
+ }
+ }
+
+ EditorGUILayout.EndVertical();
+
+ if (_showUltraOptions)
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Audio 360", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propAudioHeadTransform, new GUIContent("Head Transform", "Set this to your head camera transform. Only currently used for Facebook Audio360"));
+ EditorGUILayout.PropertyField(_propAudioEnableFocus, new GUIContent("Enable Focus", "Enables focus control. Only currently used for Facebook Audio360"));
+ if (_propAudioEnableFocus.boolValue)
+ {
+ EditorGUILayout.PropertyField(_propAudioFocusOffLevelDB, new GUIContent("Off Focus Level DB", "Sets the off-focus level in DB, with the range being between -24 to 0 DB. Only currently used for Facebook Audio360"));
+ EditorGUILayout.PropertyField(_propAudioFocusWidthDegrees, new GUIContent("Focus Width Degrees", "Set the focus width in degrees, with the range being between 40 and 120 degrees. Only currently used for Facebook Audio360"));
+ EditorGUILayout.PropertyField(_propAudioFocusTransform, new GUIContent("Focus Transform", "Set this to where you wish to focus on the video. Only currently used for Facebook Audio360"));
+ }
+ EditorGUILayout.EndVertical();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Audio.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Audio.cs.meta
new file mode 100755
index 0000000..77f3bf1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Audio.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 37646bf6e83e0f5429dc604d9f8b86fc
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Debug.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Debug.cs
new file mode 100755
index 0000000..ce41db2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Debug.cs
@@ -0,0 +1,284 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private static bool _allowDeveloperMode = false;
+ private static bool _showUltraOptions = true;
+
+ private AnimCollapseSection _sectionDevModeState;
+ private AnimCollapseSection _sectionDevModeTexture;
+ private AnimCollapseSection _sectionDevModeHapNotchLCDecoder;
+ private AnimCollapseSection _sectionDevModeBufferedFrames;
+ private AnimCollapseSection _sectionDevModePlaybackQuality;
+
+ private static readonly GUIContent _guiTextMetaData = new GUIContent("MetaData");
+ private static readonly GUIContent _guiTextPaused = new GUIContent("Paused");
+ private static readonly GUIContent _guiTextPlaying = new GUIContent("Playing");
+ private static readonly GUIContent _guiTextSeeking = new GUIContent("Seeking");
+ private static readonly GUIContent _guiTextBuffering = new GUIContent("Buffering");
+ private static readonly GUIContent _guiTextStalled = new GUIContent("Stalled");
+ private static readonly GUIContent _guiTextFinished = new GUIContent("Finished");
+ private static readonly GUIContent _guiTextTimeColon= new GUIContent("Time: ");
+ private static readonly GUIContent _guiTextFrameColon = new GUIContent("Frame: ");
+
+ private static readonly GUIContent _guiTextFrameDec = new GUIContent("<");
+ private static readonly GUIContent _guiTextFrameInc = new GUIContent(">");
+ private static readonly GUIContent _guiTextSelectTexture = new GUIContent("Select Texture");
+ private static readonly GUIContent _guiTextSaveFramePNG = new GUIContent("Save Frame PNG");
+ private static readonly GUIContent _guiTextSaveFrameEXR = new GUIContent("Save Frame EXR");
+
+ private static readonly GUIContent _guiTextDecodeStats = new GUIContent("Decode Stats");
+ private static readonly GUIContent _guiTextParallelFrames = new GUIContent("Parallel Frames");
+ private static readonly GUIContent _guiTextDecodedFrames = new GUIContent("Decoded Frames");
+ private static readonly GUIContent _guiTextDroppedFrames = new GUIContent("Dropped Frames");
+
+ private static readonly GUIContent _guiTextBufferedFrames = new GUIContent("Buffered Frames");
+ private static readonly GUIContent _guiTextFreeFrames = new GUIContent("Free Frames");
+ //private static readonly GUIContent _guiTextDisplayTimestamp = new GUIContent("Display Timstamp");
+ //private static readonly GUIContent _guiTextMinTimestamp = new GUIContent("Min Timstamp");
+ //private static readonly GUIContent _guiTextMaxTimestamp = new GUIContent("Max Timstamp");
+ private static readonly GUIContent _guiTextFlush = new GUIContent("Flush");
+ private static readonly GUIContent _guiTextReset = new GUIContent("Reset");
+
+ private void OnInspectorGUI_DevMode_State()
+ {
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+ if (mediaPlayer.Control != null)
+ {
+ // State
+
+ GUIStyle style = GUI.skin.button;
+ using (HorizontalFlowScope flow = new HorizontalFlowScope(Screen.width))
+ {
+ flow.AddItem(_guiTextMetaData, style);
+ GUI.color = mediaPlayer.Control.HasMetaData() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextMetaData, style);
+
+ flow.AddItem(_guiTextPaused, style);
+ GUI.color = mediaPlayer.Control.IsPaused() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextPaused, style);
+
+ flow.AddItem(_guiTextPlaying, style);
+ GUI.color = mediaPlayer.Control.IsPlaying() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextPlaying, style);
+
+ flow.AddItem(_guiTextSeeking, style);
+ GUI.color = mediaPlayer.Control.IsSeeking() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextSeeking, style);
+
+ flow.AddItem(_guiTextBuffering, style);
+ GUI.color = mediaPlayer.Control.IsBuffering() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextBuffering, style);
+
+ flow.AddItem(_guiTextStalled, style);
+ GUI.color = mediaPlayer.Info.IsPlaybackStalled() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextStalled, style);
+
+ flow.AddItem(_guiTextFinished, style);
+ GUI.color = mediaPlayer.Control.IsFinished() ? Color.green : Color.white;
+ GUILayout.Toggle(true, _guiTextFinished, style);
+ }
+ GUI.color = Color.white;
+
+ // Time, FPS, Frame stepping
+ GUILayout.BeginHorizontal();
+ GUILayout.Label(_guiTextTimeColon);
+ GUILayout.Label(mediaPlayer.Control.GetCurrentTime().ToString());
+ GUILayout.FlexibleSpace();
+ GUILayout.Label(_guiTextFrameColon);
+ GUILayout.Label(mediaPlayer.Control.GetCurrentTimeFrames().ToString());
+ EditorGUI.BeginDisabledGroup(mediaPlayer.Info.GetVideoFrameRate() <= 0f);
+ if (GUILayout.Button(_guiTextFrameDec))
+ {
+ mediaPlayer.Control.SeekToFrameRelative(-1);
+ }
+ if (GUILayout.Button(_guiTextFrameInc))
+ {
+ mediaPlayer.Control.SeekToFrameRelative(1);
+ }
+ EditorGUI.EndDisabledGroup();
+ GUILayout.EndHorizontal();
+ }
+ }
+
+ private void OnInspectorGUI_DevMode_Texture()
+ {
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+ if (mediaPlayer.Control != null)
+ {
+ // Raw texture preview
+ if (mediaPlayer.TextureProducer != null)
+ {
+ GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+ GUILayout.FlexibleSpace();
+ for (int i = 0; i < mediaPlayer.TextureProducer.GetTextureCount(); i++)
+ {
+ Texture texture = mediaPlayer.TextureProducer.GetTexture(i);
+ if (texture != null)
+ {
+ GUILayout.BeginVertical();
+ Rect textureRect = GUILayoutUtility.GetRect(128f, 128f);
+ if (Event.current.type == EventType.Repaint)
+ {
+ GUI.color = Color.gray;
+ EditorGUI.DrawTextureTransparent(textureRect, Texture2D.blackTexture, ScaleMode.StretchToFill);
+ GUI.color = Color.white;
+ }
+ GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit, false);
+ GUILayout.Label(texture.width + "x" + texture.height + " ");
+ if (GUILayout.Button(_guiTextSelectTexture, GUILayout.ExpandWidth(false)))
+ {
+ Selection.activeObject = texture;
+ }
+ GUILayout.EndVertical();
+ }
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.Label("Updates: " + mediaPlayer.TextureProducer.GetTextureFrameCount());
+ GUILayout.Label("TimeStamp: " + mediaPlayer.TextureProducer.GetTextureTimeStamp());
+
+ GUILayout.BeginHorizontal();
+ if (GUILayout.Button(_guiTextSaveFramePNG, GUILayout.ExpandWidth(true)))
+ {
+ mediaPlayer.SaveFrameToPng();
+ }
+ if (GUILayout.Button(_guiTextSaveFrameEXR, GUILayout.ExpandWidth(true)))
+ {
+ mediaPlayer.SaveFrameToExr();
+ }
+ GUILayout.EndHorizontal();
+ }
+ }
+ }
+
+ private void OnInspectorGUI_DevMode_HapNotchLCDecoder()
+ {
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+ if (mediaPlayer.Info != null)
+ {
+ int activeDecodeThreadCount = 0;
+ int decodedFrameCount = 0;
+ int droppedFrameCount = 0;
+ if (mediaPlayer.Info.GetDecoderPerformance(ref activeDecodeThreadCount, ref decodedFrameCount, ref droppedFrameCount))
+ {
+ GUILayout.Label(_guiTextDecodeStats);
+ EditorGUI.indentLevel++;
+ EditorGUILayout.Slider(_guiTextParallelFrames, activeDecodeThreadCount, 0f, mediaPlayer.PlatformOptionsWindows.parallelFrameCount);
+ EditorGUILayout.Slider(_guiTextDecodedFrames, decodedFrameCount, 0f, mediaPlayer.PlatformOptionsWindows.prerollFrameCount * 2);
+ EditorGUILayout.IntField(_guiTextDroppedFrames, droppedFrameCount);
+ EditorGUI.indentLevel--;
+ }
+ }
+ }
+
+ private float _lastBufferedFrameCount;
+ private float _lastFreeFrameCount;
+
+ private void OnInspectorGUI_DevMode_BufferedFrames()
+ {
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+ if (mediaPlayer.Control != null)
+ {
+ IBufferedDisplay bufferedDisplay = mediaPlayer.BufferedDisplay;
+ if (bufferedDisplay != null)
+ {
+ BufferedFramesState state = bufferedDisplay.GetBufferedFramesState();
+
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.PrefixLabel(_guiTextBufferedFrames);
+ Rect progressRect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight);
+ EditorGUI.ProgressBar(progressRect, _lastBufferedFrameCount, state.bufferedFrameCount.ToString());
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.PrefixLabel(_guiTextFreeFrames);
+ progressRect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight);
+ EditorGUI.ProgressBar(progressRect, _lastFreeFrameCount, state.freeFrameCount.ToString());
+ GUILayout.EndHorizontal();
+
+ _lastBufferedFrameCount = Mathf.MoveTowards(_lastBufferedFrameCount, state.bufferedFrameCount / 12f, Time.deltaTime);
+ _lastFreeFrameCount = Mathf.MoveTowards(_lastFreeFrameCount, state.freeFrameCount / 12f, Time.deltaTime);
+
+ //EditorGUILayout.LabelField(_guiTextDisplayTimestamp, new GUIContent(mediaPlayer.TextureProducer.GetTextureTimeStamp().ToString() + " " + (mediaPlayer.TextureProducer.GetTextureTimeStamp() / Helper.SecondsToHNS).ToString() + "s"));
+ //EditorGUILayout.LabelField(_guiTextMinTimestamp, new GUIContent(state.minTimeStamp.ToString() + " " + (state.minTimeStamp / Helper.SecondsToHNS).ToString() + "s"));
+ //EditorGUILayout.LabelField(_guiTextMaxTimestamp, new GUIContent(state.maxTimeStamp.ToString() + " " + (state.maxTimeStamp / Helper.SecondsToHNS).ToString() + "s"));
+ if (GUILayout.Button(_guiTextFlush))
+ {
+ // Seek causes a flush
+ mediaPlayer.Control.Seek(mediaPlayer.Control.GetCurrentTime());
+ }
+ }
+ }
+ }
+
+ private void OnInspectorGUI_DevMode_PresentationQuality()
+ {
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+ if (mediaPlayer.Info != null)
+ {
+ PlaybackQualityStats stats = mediaPlayer.Info.GetPlaybackQualityStats();
+ //stats.LogIssues = true;
+ stats.LogIssues = EditorGUILayout.Toggle("Log Issues", stats.LogIssues);
+ GUILayout.Label("Video", EditorStyles.boldLabel);
+ EditorGUI.indentLevel++;
+ EditorGUILayout.LabelField("Skipped Frames", stats.SkippedFrames.ToString());
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("Duplicate Frames", stats.DuplicateFrames.ToString());
+ GUILayout.Label(stats.VSyncStatus);
+ GUILayout.EndHorizontal();
+ EditorGUILayout.LabelField("Perfect Frames", (stats.PerfectFramesT * 100f).ToString("F2") + "%");
+ EditorGUI.indentLevel--;
+ GUILayout.Label("Unity", EditorStyles.boldLabel);
+ EditorGUI.indentLevel++;
+ EditorGUILayout.LabelField("Dropped Frames", stats.UnityDroppedFrames.ToString());
+ EditorGUI.indentLevel--;
+ if (GUILayout.Button(_guiTextReset))
+ {
+ stats.Reset();
+ }
+ }
+ }
+
+ private void OnInspectorGUI_Debug()
+ {
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+ IMediaInfo info = mediaPlayer.Info;
+ if (info != null)
+ {
+ AnimCollapseSection.Show(_sectionDevModeState);
+ AnimCollapseSection.Show(_sectionDevModeTexture);
+ AnimCollapseSection.Show(_sectionDevModePlaybackQuality);
+ }
+
+ if (info != null)
+ {
+#if UNITY_EDITOR_WIN
+ if (mediaPlayer.PlatformOptionsWindows.useHapNotchLC)
+ {
+ AnimCollapseSection.Show(_sectionDevModeHapNotchLCDecoder);
+ }
+ if (mediaPlayer.PlatformOptionsWindows.bufferedFrameSelection != BufferedFrameSelectionMode.None)
+ {
+ AnimCollapseSection.Show(_sectionDevModeBufferedFrames);
+ }
+#endif
+ }
+ else
+ {
+ GUILayout.Label("No media loaded");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Debug.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Debug.cs.meta
new file mode 100755
index 0000000..67db07f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Debug.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8c5649aed6704fa4199ad212f4562fdb
+timeCreated: 1594038897
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Events.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Events.cs
new file mode 100755
index 0000000..fdf720c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Events.cs
@@ -0,0 +1,40 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private SerializedProperty _propEvents;
+ private SerializedProperty _propEventMask;
+ private SerializedProperty _propPauseMediaOnAppPause;
+ private SerializedProperty _propPlayMediaOnAppUnpause;
+
+ private void OnInspectorGUI_Events()
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ EditorGUILayout.PropertyField(_propEvents);
+
+ _propEventMask.intValue = EditorGUILayout.MaskField("Triggered Events", _propEventMask.intValue, System.Enum.GetNames(typeof(MediaPlayerEvent.EventType)));
+
+ EditorGUILayout.BeginHorizontal();
+ GUILayout.Label("Pause Media On App Pause");
+ _propPauseMediaOnAppPause.boolValue = EditorGUILayout.Toggle(_propPauseMediaOnAppPause.boolValue);
+ EditorGUILayout.EndHorizontal();
+ EditorGUILayout.BeginHorizontal();
+ GUILayout.Label("Play Media On App Unpause");
+ _propPlayMediaOnAppUnpause.boolValue = EditorGUILayout.Toggle(_propPlayMediaOnAppUnpause.boolValue);
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.EndVertical();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Events.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Events.cs.meta
new file mode 100755
index 0000000..a103d93
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Events.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 191b4e7b3d732b44381d348e9e0dc7ea
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Global.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Global.cs
new file mode 100755
index 0000000..380b1ca
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Global.cs
@@ -0,0 +1,78 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private void OnInspectorGUI_GlobalSettings()
+ {
+ EditorGUI.BeginDisabledGroup(Application.isPlaying);
+ EditorGUILayout.LabelField("Target Platform", EditorUserBuildSettings.selectedBuildTargetGroup.ToString());
+ if (EditorUserBuildSettings.selectedBuildTargetGroup != BuildTargetGroup.Standalone)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "These global options only affect the current target platform so will not apply in-editor unless you change your Build Target and reapply them.");
+ }
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Video Capture", EditorStyles.boldLabel);
+
+ // TimeScale
+ {
+ const string TimeScaleDefine = "AVPROVIDEO_BETA_SUPPORT_TIMESCALE";
+ if (EditorHelper.IMGUI.ToggleScriptDefine("TimeScale Support", TimeScaleDefine))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "This will affect performance if you change Time.timeScale or Time.captureFramerate. This feature is useful for supporting video capture system that adjust time scale during capturing.");
+ }
+ }
+ EditorGUILayout.EndVertical();
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Other", EditorStyles.boldLabel);
+
+ // Disable Logging
+ {
+ const string DisableLogging = "AVPROVIDEO_DISABLE_LOGGING";
+ EditorHelper.IMGUI.ToggleScriptDefine("Disable Logging", DisableLogging);
+ }
+
+ // Show Ultra Options
+ {
+ const string ShowUltraOptions = "AVPROVIDEO_SHOW_ULTRA_OPTIONS";
+ EditorHelper.IMGUI.ToggleScriptDefine("Show Ultra Options", ShowUltraOptions);
+ }
+
+ _allowDeveloperMode = EditorGUILayout.Toggle(new GUIContent("Developer Mode", "Enables some additional information useful for debugging"), _allowDeveloperMode);
+
+ if (_allowDeveloperMode)
+ {
+ EditorGUI.indentLevel++;
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("BETA / Experimental", EditorStyles.boldLabel);
+
+ // Disable Debug GUI
+ {
+ const string SupportBufferedDisplayDefine = "AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY";
+ if (!EditorHelper.IMGUI.ToggleScriptDefine("Support Buffered Display", SupportBufferedDisplayDefine))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Info, "The Debug GUI can be disabled globally for builds to help reduce garbage generation each frame.");
+ }
+ }
+
+ EditorGUILayout.EndVertical();
+ EditorGUI.indentLevel--;
+ }
+
+ EditorGUILayout.EndVertical();
+
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Global.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Global.cs.meta
new file mode 100755
index 0000000..9ed0e74
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Global.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 43f33634e709c224aa295751513f8f63
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Network.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Network.cs
new file mode 100755
index 0000000..3ab1db6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Network.cs
@@ -0,0 +1,130 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private void OnInspectorGUI_Network()
+ {
+ if (_showUltraOptions)
+ {
+ SerializedProperty httpHeadersProp = serializedObject.FindProperty("_httpHeaders.httpHeaders");
+ OnInspectorGUI_HttpHeaders(httpHeadersProp);
+
+ SerializedProperty keyAuthProp = serializedObject.FindProperty("_keyAuth");
+ OnInspectorGUI_HlsDecryption(keyAuthProp);
+ }
+ }
+
+ private void OnInspectorGUI_HlsDecryption(SerializedProperty keyAuthProp)
+ {
+ if (keyAuthProp == null) return;
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("HLS Decryption", EditorStyles.boldLabel);
+
+ // Key server auth token
+ SerializedProperty prop = keyAuthProp.FindPropertyRelative("keyServerToken");
+ if (prop != null)
+ {
+ EditorGUILayout.PropertyField(prop, new GUIContent("Auth Token", "Token to pass to the key server in the 'Authorization' HTTP header field"));
+ }
+
+ //GUILayout.Label("Overrides");
+ //EditorGUI.indentLevel++;
+
+ // Key server override
+ /*prop = serializedObject.FindProperty(optionsVarName + ".keyServerURLOverride");
+ if (prop != null)
+ {
+ EditorGUILayout.PropertyField(prop, new GUIContent("Key Server URL", "Overrides the key server URL if present in a HLS manifest."));
+ }*/
+
+ // Key data blob override
+ prop = keyAuthProp.FindPropertyRelative("overrideDecryptionKeyBase64");
+ if (prop != null)
+ {
+ EditorGUILayout.PropertyField(prop, new GUIContent("Key Override (Base64)", "Override key to use for decoding encrypted HLS streams (in Base64 format)."));
+ }
+
+ //EditorGUI.indentLevel--;
+
+ EditorGUILayout.EndVertical();
+ }
+
+ private void OnInspectorGUI_HttpHeaders(SerializedProperty httpHeadersProp)
+ {
+ if (httpHeadersProp == null) return;
+
+ //GUILayout.Space(8f);
+ bool isExpanded = _HTTPHeadersToggle;
+ if (isExpanded)
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ }
+ bool hasHeaders = (httpHeadersProp.arraySize > 0);
+ Color tintColor = hasHeaders?Color.yellow:Color.white;
+ if (AnimCollapseSection.BeginShow("Custom HTTP Headers", ref _HTTPHeadersToggle, tintColor))
+ {
+ {
+ if (httpHeadersProp.arraySize > 0)
+ {
+ int deleteIndex = -1;
+ for (int i = 0; i < httpHeadersProp.arraySize; ++i)
+ {
+ SerializedProperty httpHeaderProp = httpHeadersProp.GetArrayElementAtIndex(i);
+ SerializedProperty headerProp = httpHeaderProp.FindPropertyRelative("name");
+
+ GUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.BeginHorizontal();
+
+ GUI.color = HttpHeader.IsValid(headerProp.stringValue)?Color.white:Color.red;
+ EditorGUILayout.PropertyField(headerProp, GUIContent.none);
+ headerProp.stringValue = headerProp.stringValue.Trim();
+ GUI.color = Color.white;
+
+ if (GUILayout.Button("-", GUILayout.ExpandWidth(false)))
+ {
+ deleteIndex = i;
+ }
+ GUILayout.EndHorizontal();
+
+ SerializedProperty valueProp = httpHeaderProp.FindPropertyRelative("value");
+ GUI.color = HttpHeader.IsValid(valueProp.stringValue)?Color.white:Color.red;
+ valueProp.stringValue = EditorGUILayout.TextArea(valueProp.stringValue, EditorHelper.IMGUI.GetWordWrappedTextAreaStyle());
+ GUI.color = Color.white;
+ valueProp.stringValue = valueProp.stringValue.Trim();
+ GUILayout.EndVertical();
+ GUILayout.Space(4f);
+ }
+
+ if (deleteIndex >= 0)
+ {
+ httpHeadersProp.DeleteArrayElementAtIndex(deleteIndex);
+ }
+ }
+ if (GUILayout.Button("+"))
+ {
+ httpHeadersProp.InsertArrayElementAtIndex(httpHeadersProp.arraySize);
+ }
+ }
+ }
+ AnimCollapseSection.EndShow();
+
+ if (isExpanded)
+ {
+ EditorGUILayout.EndVertical();
+ }
+
+ //GUILayout.Space(8f);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Network.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Network.cs.meta
new file mode 100755
index 0000000..0b60f70
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Network.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e21d984efff21a1498d41745548e8f14
+timeCreated: 1592503568
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Platforms.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Platforms.cs
new file mode 100755
index 0000000..18c4289
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Platforms.cs
@@ -0,0 +1,368 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private static int _platformIndex = -1;
+ private static bool _HTTPHeadersToggle = false;
+ private static GUIContent[] _platformNames = null;
+
+ private void OnInspectorGUI_SelectPlatform()
+ {
+ // TODO: support multiple targets?
+ MediaPlayer media = (this.target) as MediaPlayer;
+
+ int i = 0;
+ int platformIndex = _platformIndex;
+ foreach (GUIContent platformText in _platformNames)
+ {
+ MediaPlayer.PlatformOptions options = media.GetPlatformOptions((Platform)i);
+
+ Color hilight = Color.yellow;
+
+ if (i == _platformIndex)
+ {
+ // Selected, unmodified
+ if (!options.IsModified())
+ {
+ GUI.contentColor = Color.white;
+ }
+ else
+ {
+ // Selected, modified
+ GUI.color = hilight;
+ GUI.contentColor = Color.white;
+ }
+ }
+ else if (options.IsModified())
+ {
+ // Unselected, modified
+ GUI.backgroundColor = Color.grey* hilight;
+ GUI.contentColor = hilight;
+ }
+ else
+ {
+ // Unselected, unmodified
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = Color.grey;
+ GUI.color = new Color(0.65f, 0.66f, 0.65f);// Color.grey;
+ }
+ }
+
+ if (i == _platformIndex)
+ {
+ if (!GUILayout.Toggle(true, _platformNames[i], GUI.skin.button))
+ {
+ platformIndex = -1;
+ }
+ }
+ else
+ {
+ GUI.skin.button.imagePosition = ImagePosition.ImageOnly;
+ if (GUILayout.Toggle(false, _platformNames[i], GUI.skin.button))
+ {
+ platformIndex = i;
+ }
+ GUI.skin.button.imagePosition = ImagePosition.ImageLeft;
+ }
+
+ GUI.backgroundColor = Color.white;
+ GUI.contentColor = Color.white;
+ GUI.color = Color.white;
+ i++;
+ }
+
+ //_platformIndex = GUILayout.SelectionGrid(_platformIndex, _platformNames, 3);
+ //return;
+#if false
+ int rowCount = 0;
+ int platformIndex = _platformIndex;
+ const int itemsPerLine = 4;
+ for (int i = 0; i < _platformNames.Length; i++)
+ {
+ if (i % itemsPerLine == 0)
+ {
+ GUILayout.BeginHorizontal();
+ rowCount++;
+ }
+ MediaPlayer.PlatformOptions options = media.GetPlatformOptions((Platform)i);
+
+ Color hilight = Color.yellow;
+
+ if (i == _platformIndex)
+ {
+ // Selected, unmodified
+ if (!options.IsModified())
+ {
+ GUI.contentColor = Color.white;
+ }
+ else
+ {
+ // Selected, modified
+ GUI.color = hilight;
+ GUI.contentColor = Color.white;
+ }
+ }
+ else if (options.IsModified())
+ {
+ // Unselected, modified
+ GUI.backgroundColor = Color.grey* hilight;
+ GUI.contentColor = hilight;
+ }
+ else
+ {
+ // Unselected, unmodified
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = Color.grey;
+ GUI.color = new Color(0.65f, 0.66f, 0.65f);// Color.grey;
+ }
+ }
+
+ if (i == _platformIndex)
+ {
+ if (!GUILayout.Toggle(true, _platformNames[i], GUI.skin.button))
+ {
+ platformIndex = -1;
+ }
+ }
+ else
+ {
+ GUI.skin.button.imagePosition = ImagePosition.ImageOnly;
+ if (GUILayout.Toggle(false, _platformNames[i], GUI.skin.button))
+ {
+ platformIndex = i;
+ }
+ GUI.skin.button.imagePosition = ImagePosition.ImageLeft;
+ }
+ if ((i+1) % itemsPerLine == 0)
+ {
+ rowCount--;
+ GUILayout.EndHorizontal();
+ }
+ GUI.backgroundColor = Color.white;
+ GUI.contentColor = Color.white;
+ GUI.color = Color.white;
+ }
+
+ if (rowCount > 0)
+ {
+ GUILayout.EndHorizontal();
+ }
+#endif
+ //platformIndex = GUILayout.SelectionGrid(_platformIndex, Helper.GetPlatformNames(), 3);
+ //int platformIndex = GUILayout.Toolbar(_platformIndex, Helper.GetPlatformNames());
+
+ if (platformIndex != _platformIndex)
+ {
+ _platformIndex = platformIndex;
+
+ // We do this to clear the focus, otherwise a focused text field will not change when the Toolbar index changes
+ EditorGUI.FocusTextInControl("ClearFocus");
+ }
+ }
+
+ private void OnInspectorGUI_PlatformOverrides()
+ {
+ foreach (AnimCollapseSection section in _platformSections)
+ {
+ AnimCollapseSection.Show(section, indentLevel:2);
+ }
+ }
+
+ private readonly static GUIContent[] _audio360ChannelMapGuiNames =
+ {
+ new GUIContent("(TBE_8_2) 8 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio"),
+ new GUIContent("(TBE_8) 8 channels of hybrid TBE ambisonics. NO head-locked stereo audio"),
+ new GUIContent("(TBE_6_2) 6 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio"),
+ new GUIContent("(TBE_6) 6 channels of hybrid TBE ambisonics. NO head-locked stereo audio"),
+ new GUIContent("(TBE_4_2) 4 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio"),
+ new GUIContent("(TBE_4) 4 channels of hybrid TBE ambisonics. NO head-locked stereo audio"),
+
+ new GUIContent("(TBE_8_PAIR0) Channels 1 and 2 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_8_PAIR1) Channels 3 and 4 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_8_PAIR2) Channels 5 and 6 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_8_PAIR3) Channels 7 and 8 of TBE hybrid ambisonics"),
+
+ new GUIContent("(TBE_CHANNEL0) Channels 1 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL1) Channels 2 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL2) Channels 3 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL3) Channels 4 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL4) Channels 5 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL5) Channels 6 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL6) Channels 7 of TBE hybrid ambisonics"),
+ new GUIContent("(TBE_CHANNEL7) Channels 8 of TBE hybrid ambisonics"),
+
+ new GUIContent("(HEADLOCKED_STEREO) Head-locked stereo audio"),
+ new GUIContent("(HEADLOCKED_CHANNEL0) Channels 1 or left of head-locked stereo audio"),
+ new GUIContent("(HEADLOCKED_CHANNEL1) Channels 2 or right of head-locked stereo audio"),
+
+ new GUIContent("(AMBIX_4) 4 channels of first order ambiX"),
+ new GUIContent("(AMBIX_4_2) 4 channels of first order ambiX with 2 channels of head-locked audio"),
+ new GUIContent("(AMBIX_9) 9 channels of second order ambiX"),
+ new GUIContent("(AMBIX_9_2) 9 channels of second order ambiX with 2 channels of head-locked audio"),
+ new GUIContent("(AMBIX_16) 16 channels of third order ambiX"),
+ new GUIContent("(AMBIX_16_2) 16 channels of third order ambiX with 2 channels of head-locked audio"),
+
+ new GUIContent("(MONO) Mono audio"),
+ new GUIContent("(STEREO) Stereo audio"),
+ };
+
+ private struct FieldDescription
+ {
+ public FieldDescription(string fieldName, GUIContent description)
+ {
+ this.fieldName = fieldName;
+ this.description = description;
+ }
+ public string fieldName;
+ public GUIContent description;
+ }
+
+ private SerializedProperty DisplayPlatformOption(string platformOptionsFieldName, FieldDescription option)
+ {
+ return DisplayPlatformOption(this.serializedObject, platformOptionsFieldName + option.fieldName, option.description);
+ }
+
+ private static SerializedProperty DisplayPlatformOption(SerializedObject so, string fieldName, GUIContent description)
+ {
+ SerializedProperty prop = so.FindProperty(fieldName);
+ if (prop != null)
+ {
+ if (description == GUIContent.none)
+ {
+ EditorGUILayout.PropertyField(prop, true);
+ }
+ else
+ {
+ EditorGUILayout.PropertyField(prop, description, true);
+ }
+ }
+ else
+ {
+ Debug.LogWarning("Can't find property `" + fieldName + "`");
+ }
+ return prop;
+ }
+
+ private SerializedProperty DisplayPlatformOptionEnum(string platformOptionsFieldName, FieldDescription option, GUIContent[] enumNames)
+ {
+ return DisplayPlatformOptionEnum(this.serializedObject, platformOptionsFieldName + option.fieldName, option.description, enumNames);
+ }
+
+ private static SerializedProperty DisplayPlatformOptionEnum(SerializedObject so, string fieldName, GUIContent description, GUIContent[] enumNames)
+ {
+ SerializedProperty prop = so.FindProperty(fieldName);
+ if (prop != null)
+ {
+ prop.enumValueIndex = EditorGUILayout.Popup(description, prop.enumValueIndex, enumNames);
+ }
+ else
+ {
+ Debug.LogWarning("Can't find property `" + fieldName + "`");
+ }
+ return prop;
+ }
+
+#if false
+ private void OnInspectorGUI_HlsDecryption(string optionsVarName)
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("HLS Decryption", EditorStyles.boldLabel);
+
+ // Key server auth token
+ SerializedProperty prop = serializedObject.FindProperty(optionsVarName + ".keyAuth.keyServerToken");
+ if (prop != null)
+ {
+ EditorGUILayout.PropertyField(prop, new GUIContent("Key Server Auth Token", "Token to pass to the key server in the 'Authorization' HTTP header field"));
+ }
+
+ GUILayout.Label("Overrides");
+ EditorGUI.indentLevel++;
+
+ // Key server override
+ /*prop = serializedObject.FindProperty(optionsVarName + ".keyServerURLOverride");
+ if (prop != null)
+ {
+ EditorGUILayout.PropertyField(prop, new GUIContent("Key Server URL", "Overrides the key server URL if present in a HLS manifest."));
+ }*/
+
+ // Key data blob override
+ prop = serializedObject.FindProperty(optionsVarName + ".keyAuth.overrideDecryptionKeyBase64");
+ if (prop != null)
+ {
+ EditorGUILayout.PropertyField(prop, new GUIContent("Key (Base64)", "Override key to use for decoding encrypted HLS streams (in Base64 format)."));
+ }
+
+ EditorGUI.indentLevel--;
+
+ EditorGUILayout.EndVertical();
+ }
+
+ private void OnInspectorGUI_HttpHeaders(string platformOptionsVarName)
+ {
+ SerializedProperty httpHeadersProp = serializedObject.FindProperty(platformOptionsVarName + ".httpHeaders.httpHeaders");
+ if (httpHeadersProp != null)
+ {
+
+ if (BeginCollapsableSection("Custom HTTP Headers", ref _HTTPHeadersToggle))
+ {
+ {
+ if (httpHeadersProp.arraySize > 0)
+ {
+ int deleteIndex = -1;
+ for (int i = 0; i < httpHeadersProp.arraySize; ++i)
+ {
+ SerializedProperty httpHeaderProp = httpHeadersProp.GetArrayElementAtIndex(i);
+ SerializedProperty headerProp = httpHeaderProp.FindPropertyRelative("name");
+
+ GUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.BeginHorizontal();
+
+ GUI.color = HttpHeader.IsValid(headerProp.stringValue)?Color.white:Color.red;
+ EditorGUILayout.PropertyField(headerProp, GUIContent.none);
+ headerProp.stringValue = headerProp.stringValue.Trim();
+ GUI.color = Color.white;
+
+ if (GUILayout.Button("-", GUILayout.ExpandWidth(false)))
+ {
+ deleteIndex = i;
+ }
+ GUILayout.EndHorizontal();
+
+ SerializedProperty valueProp = httpHeaderProp.FindPropertyRelative("value");
+ GUI.color = HttpHeader.IsValid(valueProp.stringValue)?Color.white:Color.red;
+ valueProp.stringValue = EditorGUILayout.TextArea(valueProp.stringValue, EditorHelper.IMGUI.GetWordWrappedTextAreaStyle());
+ GUI.color = Color.white;
+ valueProp.stringValue = valueProp.stringValue.Trim();
+ GUILayout.EndVertical();
+ GUILayout.Space(4f);
+ }
+
+ if (deleteIndex >= 0)
+ {
+ httpHeadersProp.DeleteArrayElementAtIndex(deleteIndex);
+ }
+ }
+ if (GUILayout.Button("+"))
+ {
+ httpHeadersProp.InsertArrayElementAtIndex(httpHeadersProp.arraySize);
+ }
+ }
+ }
+ EndCollapsableSection();
+ }
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Platforms.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Platforms.cs.meta
new file mode 100755
index 0000000..0fecd37
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Platforms.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 02b6040b5ca06424e8ca01ecad239291
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Player.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Player.cs
new file mode 100755
index 0000000..2812450
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Player.cs
@@ -0,0 +1,880 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private static GUIContent FilePathSplitEllipses = new GUIContent("-");
+ private static GUIContent _iconPlayButton;
+ private static GUIContent _iconPauseButton;
+ private static GUIContent _iconSceneViewAudio;
+ private static GUIContent _iconProject;
+ private static GUIContent _iconRotateTool;
+
+ private static bool _showAlpha = false;
+ private static bool _showPreview = false;
+ private static Material _materialResolve;
+ private static Material _materialIMGUI;
+ private static RenderTexture _previewTexture;
+ private static float _lastTextureRatio = -1f;
+ private static int _previewTextureFrameCount = -1;
+
+ private MediaReference _queuedLoadMediaRef = null;
+ private bool _queuedToggleShowPreview = false;
+
+ private void OnInspectorGUI_MediaInfo()
+ {
+ MediaPlayer media = (this.target) as MediaPlayer;
+ IMediaInfo info = media.Info;
+ IMediaControl control = media.Control;
+ ITextTracks textTracks = media.TextTracks;
+ IAudioTracks audioTracks = media.AudioTracks;
+ IVideoTracks videoTracks = media.VideoTracks;
+ if (info != null)
+ {
+ if (!info.HasVideo() && !info.HasAudio())// && !info.HasText())
+ {
+ GUILayout.Label("No media loaded");
+ }
+ else
+ {
+ if (info.HasVideo())
+ {
+ GUILayout.BeginHorizontal();
+ {
+ string dimensionText = string.Format("{0}x{1}@{2:0.##}", info.GetVideoWidth(), info.GetVideoHeight(), info.GetVideoFrameRate());
+ GUILayout.Label(dimensionText);
+ GUILayout.FlexibleSpace();
+ string rateText = "0.00";
+ if (media.Info != null)
+ {
+ rateText = media.Info.GetVideoDisplayRate().ToString("F2");
+ }
+ GUILayout.Label(rateText + "FPS");
+ }
+ GUILayout.EndHorizontal();
+
+ EditorGUILayout.Space();
+ }
+ if (info.HasVideo())
+ {
+ VideoTracks tracks = videoTracks.GetVideoTracks();
+ if (tracks.Count > 0)
+ {
+ GUILayout.Label("Video Tracks: " + tracks.Count);
+ foreach (VideoTrack track in tracks)
+ {
+ bool isActiveTrack = (track == videoTracks.GetActiveVideoTrack());
+ GUI.color = isActiveTrack?Color.green:Color.white;
+ {
+ if (GUILayout.Button(track.DisplayName))
+ {
+ if (isActiveTrack)
+ {
+ videoTracks.SetActiveVideoTrack(null);
+ }
+ else
+ {
+ videoTracks.SetActiveVideoTrack(track);
+ }
+ }
+ }
+ }
+ GUI.color = Color.white;
+ EditorGUILayout.Space();
+ }
+ }
+ if (info.HasAudio())
+ {
+ AudioTracks tracks = audioTracks.GetAudioTracks();
+ if (tracks.Count > 0)
+ {
+ GUILayout.Label("Audio Tracks: " + tracks.Count);
+ foreach (AudioTrack track in tracks)
+ {
+ bool isActiveTrack = (track == audioTracks.GetActiveAudioTrack());
+ GUI.color = isActiveTrack?Color.green:Color.white;
+ {
+ if (GUILayout.Button(track.DisplayName))
+ {
+ if (isActiveTrack)
+ {
+ audioTracks.SetActiveAudioTrack(null);
+ }
+ else
+ {
+ audioTracks.SetActiveAudioTrack(track);
+ }
+ }
+ }
+ }
+ GUI.color = Color.white;
+
+ /*int channelCount = control.GetAudioChannelCount();
+ if (channelCount > 0)
+ {
+ GUILayout.Label("Audio Channels: " + channelCount);
+ AudioChannelMaskFlags audioChannels = control.GetAudioChannelMask();
+ GUILayout.Label("(" + audioChannels + ")", EditorHelper.IMGUI.GetWordWrappedTextAreaStyle());
+ }*/
+ EditorGUILayout.Space();
+ }
+ }
+ {
+ TextTracks tracks = textTracks.GetTextTracks();
+ if (tracks.Count > 0)
+ {
+ GUILayout.Label("Text Tracks: " + tracks.Count);
+ foreach (TextTrack track in tracks)
+ {
+ bool isActiveTrack = (track == textTracks.GetActiveTextTrack());
+ GUI.color = isActiveTrack?Color.green:Color.white;
+ {
+ if (GUILayout.Button(track.DisplayName))
+ {
+ if (isActiveTrack)
+ {
+ textTracks.SetActiveTextTrack(null);
+ }
+ else
+ {
+ textTracks.SetActiveTextTrack(track);
+ }
+ }
+ }
+ }
+ GUI.color = Color.white;
+
+ if (textTracks.GetActiveTextTrack() != null)
+ {
+ string text = string.Empty;
+ if (textTracks.GetCurrentTextCue() != null)
+ {
+ text = textTracks.GetCurrentTextCue().Text;
+ // Clip the text if it is too long
+ if (text.Length >= 96)
+ {
+ text = string.Format("{0}...({1} chars)", text.Substring(0, 96), text.Length);
+ }
+ }
+ GUILayout.Label(text, EditorHelper.IMGUI.GetWordWrappedTextAreaStyle(), GUILayout.Height(48f));
+ }
+
+ EditorGUILayout.Space();
+ }
+ }
+ }
+ }
+ else
+ {
+ GUILayout.Label("No media loaded");
+ }
+ }
+
+ private void ClosePreview()
+ {
+ if (_materialResolve)
+ {
+ DestroyImmediate(_materialResolve); _materialResolve = null;
+ }
+ if (_materialIMGUI)
+ {
+ DestroyImmediate(_materialIMGUI); _materialIMGUI = null;
+ }
+ if (_previewTexture)
+ {
+ RenderTexture.ReleaseTemporary(_previewTexture); _previewTexture = null;
+ }
+ }
+
+ private void RenderPreview(MediaPlayer media)
+ {
+ int textureFrameCount = media.TextureProducer.GetTextureFrameCount();
+ if (textureFrameCount != _previewTextureFrameCount)
+ {
+ _previewTextureFrameCount = textureFrameCount;
+
+ if (!_materialResolve)
+ {
+ _materialResolve = VideoRender.CreateResolveMaterial( false );
+ VideoRender.SetupResolveMaterial(_materialResolve, VideoResolveOptions.Create());
+ }
+ if (!_materialIMGUI)
+ {
+ _materialIMGUI = VideoRender.CreateIMGUIMaterial();
+ }
+
+ VideoRender.SetupMaterialForMedia(_materialResolve, media, -1);
+
+ VideoRender.ResolveFlags resolveFlags = (VideoRender.ResolveFlags.ColorspaceSRGB | VideoRender.ResolveFlags.Mipmaps | VideoRender.ResolveFlags.PackedAlpha | VideoRender.ResolveFlags.StereoLeft);
+ _previewTexture = VideoRender.ResolveVideoToRenderTexture(_materialResolve, _previewTexture, media.TextureProducer, resolveFlags);
+ }
+ }
+
+ private void DrawCenterCroppedLabel(Rect rect, string text)
+ {
+ if (Event.current.type != EventType.Repaint) return;
+ GUIContent textContent = new GUIContent(text);
+ Vector2 textSize = GUI.skin.label.CalcSize(textContent);
+ if (textSize.x > rect.width)
+ {
+ float ellipseWidth = GUI.skin.label.CalcSize(FilePathSplitEllipses).x;
+
+ // Left
+ Rect rleft = rect;
+ rleft.xMax -= (rleft.width / 2f);
+ rleft.xMax -= (ellipseWidth / 2f);
+ GUI.Label(rleft, textContent);
+
+ // Right
+ Rect rRight = rect;
+ rRight.xMin += (rRight.width / 2f);
+ rRight.xMin += (ellipseWidth / 2f);
+ GUI.Label(rRight, textContent, EditorHelper.IMGUI.GetRightAlignedLabelStyle());
+
+ // Center
+ Rect rCenter = rect;
+ rCenter.xMin += (rect.width / 2f) - (ellipseWidth / 2f);
+ rCenter.xMax -= (rect.width / 2f) - (ellipseWidth / 2f);
+ GUI.Label(rCenter, FilePathSplitEllipses, EditorHelper.IMGUI.GetCenterAlignedLabelStyle());
+ }
+ else
+ {
+ GUI.Label(rect, textContent, EditorHelper.IMGUI.GetCenterAlignedLabelStyle());
+ }
+ }
+
+ private void OnInspectorGUI_Player(MediaPlayer mediaPlayer, ITextureProducer textureSource)
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ Rect titleRect = Rect.zero;
+ // Display filename as title of preview
+ {
+ string mediaFileName = string.Empty;
+ if ((MediaSource)_propMediaSource.enumValueIndex == MediaSource.Path)
+ {
+ mediaFileName = mediaPlayer.MediaPath.Path;
+ }
+ else if ((MediaSource)_propMediaSource.enumValueIndex == MediaSource.Reference)
+ {
+ if (_propMediaReference.objectReferenceValue != null)
+ {
+ mediaFileName = ((MediaReference)_propMediaReference.objectReferenceValue).GetCurrentPlatformMediaReference().MediaPath.Path;
+ }
+ }
+
+ // Display the file name, cropping if necessary
+ if (!string.IsNullOrEmpty(mediaFileName) &&
+ (0 > mediaFileName.IndexOfAny(System.IO.Path.GetInvalidPathChars())))
+ {
+ string text = System.IO.Path.GetFileName(mediaFileName);
+ titleRect = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.label);
+
+ // Draw background
+ GUI.Box(titleRect, GUIContent.none, EditorStyles.toolbarButton);
+ DrawCenterCroppedLabel(titleRect, text);
+ }
+ }
+
+ // Toggle preview
+ if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.isMouse)
+ {
+ if (titleRect.Contains(Event.current.mousePosition))
+ {
+ _queuedToggleShowPreview = true;
+ }
+ }
+
+ if (_showPreview)
+ {
+ Texture texture = EditorGUIUtility.whiteTexture;
+ float textureRatio = 16f / 9f;
+
+ if (_lastTextureRatio > 0f)
+ {
+ textureRatio = _lastTextureRatio;
+ }
+
+ if (textureSource != null && textureSource.GetTexture() != null)
+ {
+ texture = textureSource.GetTexture();
+ if (_previewTexture)
+ {
+ texture = _previewTexture;
+ }
+ _lastTextureRatio = textureRatio = (((float)texture.width / (float)texture.height) * textureSource.GetTexturePixelAspectRatio());
+ }
+
+ // Reserve rectangle for texture
+ //GUILayout.BeginHorizontal(GUILayout.MaxHeight(Screen.height / 2f), GUILayout.ExpandHeight(true));
+ //GUILayout.FlexibleSpace();
+ Rect textureRect;
+ //textureRect = GUILayoutUtility.GetRect(256f, 256f);
+ if (texture != EditorGUIUtility.whiteTexture)
+ {
+ if (_showAlpha)
+ {
+ float rectRatio = textureRatio * 2f;
+ rectRatio = Mathf.Max(1f, rectRatio);
+ textureRect = GUILayoutUtility.GetAspectRect(rectRatio, GUILayout.ExpandWidth(true));
+ }
+ else
+ {
+ //textureRatio *= 2f;
+ float rectRatio = Mathf.Max(1f, textureRatio);
+ textureRect = GUILayoutUtility.GetAspectRect(rectRatio, GUILayout.ExpandWidth(true), GUILayout.Height(256f));
+ /*GUIStyle style = new GUIStyle(GUI.skin.box);
+ style.stretchHeight = true;
+ style.stretchWidth = true;
+ style.fixedWidth = 0;
+ style.fixedHeight = 0;
+ textureRect = GUILayoutUtility.GetRect(Screen.width, Screen.width, 128f, Screen.height / 1.2f, style);*/
+ }
+ }
+ else
+ {
+ float rectRatio = Mathf.Max(1f, textureRatio);
+ textureRect = GUILayoutUtility.GetAspectRect(rectRatio, GUILayout.ExpandWidth(true), GUILayout.Height(256f));
+ }
+ if (textureRect.height > (Screen.height / 2f))
+ {
+ //textureRect.height = Screen.height / 2f;
+ }
+ //Debug.Log(textureRect.height + " " + Screen.height);
+ //GUILayout.FlexibleSpace();
+ //GUILayout.EndHorizontal();
+
+ // Pause / Play toggle on mouse click
+ if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.isMouse)
+ {
+ if (textureRect.Contains(Event.current.mousePosition))
+ {
+ if (mediaPlayer.Control != null)
+ {
+ if (mediaPlayer.Control.IsPaused())
+ {
+ mediaPlayer.Play();
+ }
+ else
+ {
+ mediaPlayer.Pause();
+ }
+ }
+ }
+ }
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ GUI.color = Color.gray;
+ EditorGUI.DrawTextureTransparent(textureRect, Texture2D.blackTexture, ScaleMode.StretchToFill);
+ GUI.color = Color.white;
+ //EditorGUI.DrawTextureAlpha(textureRect, Texture2D.whiteTexture, ScaleMode.ScaleToFit);
+ //GUI.color = Color.black;
+ //GUI.DrawTexture(textureRect, texture, ScaleMode.StretchToFill, false);
+ //GUI.color = Color.white;
+
+ // Draw the texture
+ if (textureSource != null && textureSource.RequiresVerticalFlip())
+ {
+ // GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0f, textureRect.y + (textureRect.height / 2f)));
+ }
+
+ if (!GUI.enabled)
+ {
+ //GUI.color = Color.black;
+ //GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit, false);
+ //GUI.color = Color.white;
+ }
+ else
+ {
+ if (_showPreview && texture != EditorGUIUtility.whiteTexture)
+ {
+ RenderPreview(mediaPlayer);
+ }
+
+ if (!_showAlpha)
+ {
+ if (texture != EditorGUIUtility.whiteTexture)
+ {
+ // TODO: In Linear mode, this displays the texture too bright, but GUI.DrawTexture displays it correctly
+ //GL.sRGBWrite = true;
+ //GUI.DrawTexture(textureRect, rt, ScaleMode.ScaleToFit, false);
+
+ if (_previewTexture)
+ {
+ EditorGUI.DrawPreviewTexture(textureRect, _previewTexture, _materialIMGUI, ScaleMode.ScaleToFit, textureRatio);
+ }
+ //EditorGUI.DrawTextureTransparent(textureRect, rt, ScaleMode.ScaleToFit);
+
+ //VideoRender.DrawTexture(textureRect, rt, ScaleMode.ScaleToFit, AlphaPacking.None, _materialPreview);
+ //GL.sRGBWrite = false;
+ }
+ else
+ {
+ // Fill with black
+ //GUI.color = Color.black;
+ //GUI.DrawTexture(textureRect, texture, ScaleMode.StretchToFill, false);
+ //GUI.color = Color.white;
+ }
+ }
+ else
+ {
+ textureRect.width /= 2f;
+ //GUI.DrawTexture(textureRect, rt, ScaleMode.ScaleToFit, false);
+ //GL.sRGBWrite = true;
+ //VideoRender.DrawTexture(textureRect, rt, ScaleMode.ScaleToFit, AlphaPacking.None, _materialIMGUI);
+ //GL.sRGBWrite = false;
+ textureRect.x += textureRect.width;
+ //EditorGUI.DrawTextureAlpha(textureRect, texture, ScaleMode.ScaleToFit);
+ }
+ }
+ }
+ }
+
+ IMediaInfo info = mediaPlayer.Info;
+ IMediaControl control = mediaPlayer.Control;
+ bool showBrowseMenu = false;
+
+ if (true)
+ {
+ bool isPlaying = false;
+ if (control != null)
+ {
+ isPlaying = control.IsPlaying();
+ }
+
+ // Slider layout
+ EditorGUILayout.BeginHorizontal(GUILayout.Height(EditorGUIUtility.singleLineHeight/2f));
+ Rect sliderRect = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.horizontalSlider, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
+ EditorGUILayout.EndHorizontal();
+
+ float currentTime = 0f;
+ float durationTime = 0.001f;
+ if (control != null)
+ {
+ currentTime = (float)control.GetCurrentTime();
+ durationTime = (float)info.GetDuration();
+ if (float.IsNaN(durationTime))
+ {
+ durationTime = 0f;
+ }
+
+ // RJT NOTE: Sometimes current time can exceed duration temporarily before a finished event occurs so clamp for display purposes
+ if (currentTime > durationTime)
+ {
+ currentTime = durationTime;
+ }
+ }
+
+ TimeRange timelineRange = new TimeRange(0.0, 0.001); // A tiny default duration to prevent divide by zero's
+ if (info != null)
+ {
+ timelineRange = Helper.GetTimelineRange(info.GetDuration(), control.GetSeekableTimes());
+ }
+
+ // Slider
+ {
+ // Draw buffering
+ if (control != null && timelineRange.Duration > 0.0 && Event.current.type == EventType.Repaint)
+ {
+ GUI.color = new Color(0f, 1f, 0f, 0.25f);
+ TimeRanges times = control.GetBufferedTimes();
+ if (timelineRange.Duration > 0.0)
+ {
+ for (int i = 0; i < times.Count; i++)
+ {
+ Rect bufferedRect = sliderRect;
+
+ float startT = Mathf.Clamp01((float)((times[i].StartTime - timelineRange.StartTime) / timelineRange.Duration));
+ float endT = Mathf.Clamp01((float)((times[i].EndTime - timelineRange.StartTime) / timelineRange.Duration));
+
+ bufferedRect.xMin = sliderRect.xMin + sliderRect.width * startT;
+ bufferedRect.xMax = sliderRect.xMin + sliderRect.width * endT;
+ bufferedRect.yMin += sliderRect.height * 0.5f;
+
+ GUI.DrawTexture(bufferedRect, Texture2D.whiteTexture);
+ }
+ }
+ GUI.color = Color.white;
+ }
+
+ // Timeline slider
+ {
+ float newTime = GUI.HorizontalSlider(sliderRect, currentTime, (float)timelineRange.StartTime, (float)timelineRange.EndTime);
+ if (newTime != currentTime)
+ {
+ if (control != null)
+ {
+ // NOTE: For unknown reasons the seeks here behave differently to the MediaPlayerUI demo
+ // When scrubbing (especially with NotchLC) while the video is playing, the frames will not update and a Stalled state will be shown,
+ // but using the MediaPlayerUI the same scrubbing will updates the frames. Perhaps it's just an execution order issue
+ control.Seek(newTime);
+ }
+ }
+ }
+ }
+
+ EditorGUILayout.BeginHorizontal();
+ string timeTotal = "∞";
+ if (!float.IsInfinity(durationTime))
+ {
+ timeTotal = Helper.GetTimeString(durationTime, false);
+ }
+ string timeUsed = Helper.GetTimeString(currentTime - (float)timelineRange.StartTime, false);
+ GUILayout.Label(timeUsed, GUILayout.ExpandWidth(false));
+ //GUILayout.Label("/", GUILayout.ExpandWidth(false));
+ GUILayout.FlexibleSpace();
+ GUILayout.Label(timeTotal, GUILayout.ExpandWidth(false));
+
+ EditorGUILayout.EndHorizontal();
+
+ // In non-pro we need to make these 3 icon content black as the buttons are light
+ // and the icons are white by default
+ if (!EditorGUIUtility.isProSkin)
+ {
+ GUI.contentColor = Color.black;
+ }
+
+ EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+
+ // Play/Pause
+ {
+ float maxHeight = GUI.skin.button.CalcHeight(_iconSceneViewAudio, 0f);
+ if (!isPlaying)
+ {
+ GUI.color = Color.green;
+ if (GUILayout.Button(_iconPlayButton, GUILayout.ExpandWidth(false), GUILayout.Height(maxHeight)))
+ {
+ if (control != null)
+ {
+ control.Play();
+ }
+ else
+ {
+ if (mediaPlayer.MediaSource == MediaSource.Path)
+ {
+ mediaPlayer.OpenMedia(mediaPlayer.MediaPath.PathType, mediaPlayer.MediaPath.Path, true);
+ }
+ else if (mediaPlayer.MediaSource == MediaSource.Reference)
+ {
+ mediaPlayer.OpenMedia(mediaPlayer.MediaReference, true);
+ }
+ }
+ }
+ }
+ else
+ {
+ GUI.color = Color.yellow;
+ if (GUILayout.Button(_iconPauseButton, GUILayout.ExpandWidth(false), GUILayout.Height(maxHeight)))
+ {
+ if (control != null)
+ {
+ control.Pause();
+ }
+ }
+ }
+ GUI.color = Color.white;
+ }
+
+ // Looping
+ {
+ if (!_propLoop.boolValue)
+ {
+ GUI.color = Color.grey;
+ }
+ float maxHeight = GUI.skin.button.CalcHeight(_iconSceneViewAudio, 0f);
+ //GUIContent icon = new GUIContent("∞");
+ if (GUILayout.Button(_iconRotateTool, GUILayout.Height(maxHeight)))
+ {
+ if (control != null)
+ {
+ control.SetLooping(!_propLoop.boolValue);
+ }
+ _propLoop.boolValue = !_propLoop.boolValue;
+ }
+ GUI.color = Color.white;
+ }
+
+ // Mute & Volume
+ EditorGUI.BeginDisabledGroup(UnityEditor.EditorUtility.audioMasterMute);
+ {
+ if (_propMuted.boolValue)
+ {
+ GUI.color = Color.gray;
+ }
+ float maxWidth = _iconPlayButton.image.width;
+ //if (GUILayout.Button("Muted", GUILayout.ExpandWidth(false), GUILayout.Height(EditorGUIUtility.singleLineHeight)))
+ //string iconName = "d_AudioListener Icon"; // Unity 2019+
+ if (GUILayout.Button(_iconSceneViewAudio))//, GUILayout.Width(maxWidth), GUILayout.Height(EditorGUIUtility.singleLineHeight), GUILayout.ExpandHeight(false)))
+ {
+ if (control != null)
+ {
+ control.MuteAudio(!_propMuted.boolValue);
+ }
+ _propMuted.boolValue = !_propMuted.boolValue;
+ }
+ GUI.color = Color.white;
+ }
+ if (!_propMuted.boolValue)
+ {
+ EditorGUI.BeginChangeCheck();
+ float newVolume = GUILayout.HorizontalSlider(_propVolume.floatValue, 0f, 1f, GUILayout.ExpandWidth(true), GUILayout.MinWidth(64f));
+ if (EditorGUI.EndChangeCheck())
+ {
+ if (control != null)
+ {
+ control.SetVolume(newVolume);
+ }
+ _propVolume.floatValue = newVolume;
+ }
+ }
+ EditorGUI.EndDisabledGroup();
+
+ GUI.contentColor = Color.white;
+
+ GUILayout.FlexibleSpace();
+
+ if (Event.current.commandName == "ObjectSelectorClosed" &&
+ EditorGUIUtility.GetObjectPickerControlID() == 200)
+ {
+ _queuedLoadMediaRef = (MediaReference)EditorGUIUtility.GetObjectPickerObject();
+ }
+
+ if (GUILayout.Button(_iconProject, GUILayout.ExpandWidth(false)))
+ {
+ showBrowseMenu = true;
+ }
+
+ EditorGUILayout.EndHorizontal();
+ }
+ EditorGUILayout.EndVertical();
+
+ if (showBrowseMenu)
+ {
+ RecentMenu.Create(_propMediaPath, _propMediaSource, MediaFileExtensions, true, 200);
+ }
+
+ if (_queuedLoadMediaRef && Event.current.type == EventType.Repaint)
+ {
+ //MediaPlayer mediaPlayer = (MediaPlayer)_propMediaPath.serializedObject.targetObject;
+ if (mediaPlayer)
+ {
+ mediaPlayer.OpenMedia(_queuedLoadMediaRef, true);
+ _queuedLoadMediaRef = null;
+ }
+ }
+ if (_queuedToggleShowPreview)
+ {
+ _showPreview = !_showPreview;
+ _queuedToggleShowPreview = false;
+ this.Repaint();
+ }
+ }
+
+ private void OnInspectorGUI_VideoPreview(MediaPlayer media, ITextureProducer textureSource)
+ {
+ EditorGUILayout.LabelField("* Inspector preview affects playback performance");
+
+ Texture texture = null;
+ if (textureSource != null)
+ {
+ texture = textureSource.GetTexture();
+ }
+ if (texture == null)
+ {
+ texture = EditorGUIUtility.whiteTexture;
+ }
+
+ float ratio = (float)texture.width / (float)texture.height;
+
+ // Reserve rectangle for texture
+ GUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ Rect textureRect;
+ if (texture != EditorGUIUtility.whiteTexture)
+ {
+ if (_showAlpha)
+ {
+ ratio *= 2f;
+ textureRect = GUILayoutUtility.GetRect(Screen.width / 2, Screen.width / 2, (Screen.width / 2) / ratio, (Screen.width / 2) / ratio);
+ }
+ else
+ {
+ textureRect = GUILayoutUtility.GetRect(Screen.width / 2, Screen.width / 2, (Screen.width / 2) / ratio, (Screen.width / 2) / ratio);
+ }
+ }
+ else
+ {
+ textureRect = GUILayoutUtility.GetRect(1920f / 40f, 1080f / 40f, GUILayout.ExpandWidth(true));
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ // Dimensions
+ string dimensionText = string.Format("{0}x{1}@{2:0.##}", 0, 0, 0.0f);
+ if (texture != EditorGUIUtility.whiteTexture && media.Info != null)
+ {
+ dimensionText = string.Format("{0}x{1}@{2:0.##}", texture.width, texture.height, media.Info.GetVideoFrameRate());
+ }
+
+ EditorHelper.IMGUI.CentreLabel(dimensionText);
+
+ string rateText = "0";
+ string playerText = string.Empty;
+ if (media.Info != null)
+ {
+ rateText = media.Info.GetVideoDisplayRate().ToString("F2");
+ playerText = media.Info.GetPlayerDescription();
+ }
+
+ EditorGUILayout.LabelField("Display Rate", rateText);
+ EditorGUILayout.LabelField("Using", playerText);
+ _showAlpha = EditorGUILayout.Toggle("Show Alpha", _showAlpha);
+
+ // Draw the texture
+ Matrix4x4 prevMatrix = GUI.matrix;
+ if (textureSource != null && textureSource.RequiresVerticalFlip())
+ {
+ GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0, textureRect.y + (textureRect.height / 2)));
+ }
+
+ if (!GUI.enabled)
+ {
+ GUI.color = Color.grey;
+ GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit, false);
+ GUI.color = Color.white;
+ }
+ else
+ {
+ if (!_showAlpha)
+ {
+ // TODO: In Linear mode, this displays the texture too bright, but GUI.DrawTexture displays it correctly
+ EditorGUI.DrawTextureTransparent(textureRect, texture, ScaleMode.ScaleToFit);
+ }
+ else
+ {
+ textureRect.width /= 2f;
+ GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit, false);
+ textureRect.x += textureRect.width;
+ EditorGUI.DrawTextureAlpha(textureRect, texture, ScaleMode.ScaleToFit);
+ }
+ }
+ GUI.matrix = prevMatrix;
+
+ // Select texture button
+ /*if (texture != null && texture != EditorGUIUtility.whiteTexture)
+ {
+ GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+ GUILayout.FlexibleSpace();
+ for (int i = 0; i < textureSource.GetTextureCount(); i++)
+ {
+ Texture textures = textureSource.GetTexture(i);
+ if (GUILayout.Button("Select Texture", GUILayout.ExpandWidth(false)))
+ {
+ Selection.activeObject = textures;
+ }
+ }
+ if (GUILayout.Button("Save PNG", GUILayout.ExpandWidth(true)))
+ {
+ media.SaveFrameToPng();
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ }*/
+ }
+
+ private void OnInspectorGUI_PlayControls(IMediaControl control, IMediaInfo info)
+ {
+ GUILayout.Space(8.0f);
+
+ // Slider
+ EditorGUILayout.BeginHorizontal();
+ bool isPlaying = false;
+ if (control != null)
+ {
+ isPlaying = control.IsPlaying();
+ }
+ float currentTime = 0f;
+ if (control != null)
+ {
+ currentTime = (float)control.GetCurrentTime();
+ }
+
+ float durationTime = 0f;
+ if (info != null)
+ {
+ durationTime = (float)info.GetDuration();
+ if (float.IsNaN(durationTime))
+ {
+ durationTime = 0f;
+ }
+ }
+ string timeUsed = Helper.GetTimeString(currentTime, true);
+ GUILayout.Label(timeUsed, GUILayout.ExpandWidth(false));
+
+ float newTime = GUILayout.HorizontalSlider(currentTime, 0f, durationTime, GUILayout.ExpandWidth(true));
+ if (newTime != currentTime)
+ {
+ control.Seek(newTime);
+ }
+
+ string timeTotal = "Infinity";
+ if (!float.IsInfinity(durationTime))
+ {
+ timeTotal = Helper.GetTimeString(durationTime, true);
+ }
+
+ GUILayout.Label(timeTotal, GUILayout.ExpandWidth(false));
+
+ EditorGUILayout.EndHorizontal();
+
+ // Buttons
+ EditorGUILayout.BeginHorizontal();
+ if (GUILayout.Button("Rewind", GUILayout.ExpandWidth(false)))
+ {
+ control.Rewind();
+ }
+
+ if (!isPlaying)
+ {
+ GUI.color = Color.green;
+ if (GUILayout.Button("Play", GUILayout.ExpandWidth(true)))
+ {
+ control.Play();
+ }
+ }
+ else
+ {
+ GUI.color = Color.yellow;
+ if (GUILayout.Button("Pause", GUILayout.ExpandWidth(true)))
+ {
+ control.Pause();
+ }
+ }
+ GUI.color = Color.white;
+ EditorGUILayout.EndHorizontal();
+ }
+
+ void OnInspectorGUI_Preview()
+ {
+ MediaPlayer media = (this.target) as MediaPlayer;
+
+ EditorGUI.BeginDisabledGroup(!(media.TextureProducer != null && media.Info.HasVideo()));
+ OnInspectorGUI_VideoPreview(media, media.TextureProducer);
+ EditorGUI.EndDisabledGroup();
+
+ EditorGUI.BeginDisabledGroup(!(media.Control != null && media.Control.CanPlay() && media.isActiveAndEnabled && !EditorApplication.isPaused));
+ OnInspectorGUI_PlayControls(media.Control, media.Info);
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Player.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Player.cs.meta
new file mode 100755
index 0000000..a84a4db
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Player.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 09461ea66270ee847aceeb2a5fa2fb81
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Source.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Source.cs
new file mode 100755
index 0000000..0d0c619
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Source.cs
@@ -0,0 +1,415 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+#if UNITY_EDITOR_OSX
+ internal const string MediaFileExtensions = "mp4,m4v,mov,mpg,avi,mp3,m4a,aac,ac3,au,aiff,caf,wav,m3u8";
+#else
+ internal const string MediaFileExtensions = "Media Files;*.mp4;*.mov;*.m4v;*.avi;*.mkv;*.ts;*.webm;*.flv;*.vob;*.ogg;*.ogv;*.mpg;*.wmv;*.3gp;*.mxf;Audio Files;*wav;*.mp3;*.mp2;*.m4a;*.wma;*.aac;*.au;*.flac;*.m3u8;*.mpd;*.ism;";
+#endif
+
+ private readonly static GUIContent[] _fileFormatGuiNames =
+ {
+ new GUIContent("Automatic (by extension)"),
+ new GUIContent("Apple HLS (.m3u8)"),
+ new GUIContent("MPEG-DASH (.mdp)"),
+ new GUIContent("MS Smooth Streaming (.ism)"),
+ };
+
+ private SerializedProperty _propMediaSource;
+ private SerializedProperty _propMediaReference;
+ private SerializedProperty _propMediaPath;
+
+ private void OnInspectorGUI_Source()
+ {
+ // Display the file name and buttons to load new files
+ MediaPlayer mediaPlayer = (this.target) as MediaPlayer;
+
+ EditorGUILayout.PropertyField(_propMediaSource);
+
+ if (MediaSource.Reference == (MediaSource)_propMediaSource.enumValueIndex)
+ {
+ EditorGUILayout.PropertyField(_propMediaReference);
+ }
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ if (MediaSource.Reference != (MediaSource)_propMediaSource.enumValueIndex)
+ {
+ OnInspectorGUI_CopyableFilename(mediaPlayer.MediaPath.Path);
+ EditorGUILayout.PropertyField(_propMediaPath);
+ }
+
+ //if (!Application.isPlaying)
+ {
+ GUI.color = Color.white;
+ GUILayout.BeginHorizontal();
+
+ if (_allowDeveloperMode)
+ {
+ if (GUILayout.Button("Rewind"))
+ {
+ mediaPlayer.Rewind(true);
+ }
+ if (GUILayout.Button("Preroll"))
+ {
+ mediaPlayer.RewindPrerollPause();
+ }
+ if (GUILayout.Button("End"))
+ {
+ mediaPlayer.Control.Seek(mediaPlayer.Info.GetDuration());
+ }
+ }
+ if (GUILayout.Button("Close"))
+ {
+ mediaPlayer.CloseMedia();
+ }
+ if (GUILayout.Button("Load"))
+ {
+ if (mediaPlayer.MediaSource == MediaSource.Path)
+ {
+ mediaPlayer.OpenMedia(mediaPlayer.MediaPath.PathType, mediaPlayer.MediaPath.Path, mediaPlayer.AutoStart);
+ }
+ else if (mediaPlayer.MediaSource == MediaSource.Reference)
+ {
+ mediaPlayer.OpenMedia(mediaPlayer.MediaReference, mediaPlayer.AutoStart);
+ }
+ }
+ /*if (media.Control != null)
+ {
+ if (GUILayout.Button("Unload"))
+ {
+ media.CloseVideo();
+ }
+ }*/
+
+ if (EditorGUIUtility.GetObjectPickerControlID() == 100 &&
+ Event.current.commandName == "ObjectSelectorClosed")
+ {
+ MediaReference mediaRef = (MediaReference)EditorGUIUtility.GetObjectPickerObject();
+ if (mediaRef)
+ {
+ _propMediaSource.enumValueIndex = (int)MediaSource.Reference;
+ _propMediaReference.objectReferenceValue = mediaRef;
+ }
+ }
+
+ GUI.color = Color.green;
+ MediaPathDrawer.ShowBrowseButtonIcon(_propMediaPath, _propMediaSource);
+ GUI.color = Color.white;
+
+ GUILayout.EndHorizontal();
+
+ //MediaPath mediaPath = new MediaPath(_propMediaPath.FindPropertyRelative("_path").stringValue, (MediaPathType)_propMediaPath.FindPropertyRelative("_pathType").enumValueIndex);
+ //ShowFileWarningMessages((MediaSource)_propMediaSource.enumValueIndex, mediaPath, (MediaReference)_propMediaReference.objectReferenceValue, mediaPlayer.AutoOpen, Platform.Unknown);
+ GUI.color = Color.white;
+ }
+
+ if (MediaSource.Reference != (MediaSource)_propMediaSource.enumValueIndex)
+ {
+ GUILayout.Label("Fallback Media Hints", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propFallbackMediaHints);
+ }
+
+ EditorGUILayout.EndVertical();
+ }
+
+ internal static void OnInspectorGUI_CopyableFilename(string path)
+ {
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = Color.black;
+ GUI.color = Color.cyan;
+ }
+
+ EditorHelper.IMGUI.CopyableFilename(path);
+
+ GUI.color = Color.white;
+ GUI.backgroundColor = Color.white;
+ }
+
+ internal static void ShowFileWarningMessages(MediaSource mediaSource, MediaPath mediaPath, MediaReference mediaReference, bool isAutoOpen, Platform platform)
+ {
+ MediaPath result = null;
+
+ if (mediaSource == MediaSource.Path)
+ {
+ if (mediaPath != null)
+ {
+ result = mediaPath;
+ }
+ }
+ else if (mediaSource == MediaSource.Reference)
+ {
+ if (mediaReference != null)
+ {
+ result = mediaReference.GetCurrentPlatformMediaReference().MediaPath;
+ }
+ }
+
+ ShowFileWarningMessages(result, isAutoOpen, platform);
+ }
+
+ internal static void ShowFileWarningMessages(string filePath, MediaPathType fileLocation, MediaReference mediaReference, MediaSource mediaSource, bool isAutoOpen, Platform platform)
+ {
+ MediaPath mediaPath = null;
+
+ if (mediaSource == MediaSource.Path)
+ {
+ mediaPath = new MediaPath(filePath, fileLocation);
+ }
+ else if (mediaSource == MediaSource.Reference)
+ {
+ if (mediaReference != null)
+ {
+ mediaPath = mediaReference.GetCurrentPlatformMediaReference().MediaPath;
+ }
+ }
+
+ ShowFileWarningMessages(mediaPath, isAutoOpen, platform);
+ }
+
+ internal static void ShowFileWarningMessages(MediaPath mediaPath, bool isAutoOpen, Platform platform)
+ {
+ string fullPath = string.Empty;
+ if (mediaPath != null)
+ {
+ fullPath = mediaPath.GetResolvedFullPath();
+ }
+ if (string.IsNullOrEmpty(fullPath))
+ {
+ if (isAutoOpen)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Error, "No media specified");
+ }
+ else
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "No media specified");
+ }
+ }
+ else
+ {
+ bool isPlatformAndroid = platform == Platform.Android;
+ isPlatformAndroid |= (platform == Platform.Unknown && BuildTargetGroup.Android == UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup);
+
+ bool isPlatformIOS = (platform == Platform.iOS);
+ isPlatformIOS |= (platform == Platform.Unknown && BuildTargetGroup.iOS == UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup);
+
+ bool isPlatformTVOS = (platform == Platform.tvOS);
+ isPlatformTVOS |= (platform == Platform.Unknown && BuildTargetGroup.tvOS == UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup);
+
+ // Test file extensions
+ {
+ bool isExtensionAVI = fullPath.ToLower().EndsWith(".avi");
+ bool isExtensionMOV = fullPath.ToLower().EndsWith(".mov");
+ bool isExtensionMKV = fullPath.ToLower().EndsWith(".mkv");
+
+ if (isPlatformAndroid && isExtensionMOV)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "MOV file detected. Android doesn't support MOV files, you should change the container file.");
+ }
+ if (isPlatformAndroid && isExtensionAVI)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "AVI file detected. Android doesn't support AVI files, you should change the container file.");
+ }
+ if (isPlatformAndroid && isExtensionMKV)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "MKV file detected. Android doesn't support MKV files until Android 5.0.");
+ }
+ if (isPlatformIOS && isExtensionAVI)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "AVI file detected. iOS doesn't support AVI files, you should change the container file.");
+ }
+ }
+
+ if (fullPath.Contains("://"))
+ {
+ if (fullPath.ToLower().Contains("rtmp://"))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "RTMP protocol is not supported by AVPro Video, except when Windows DirectShow is used with an external codec library (eg LAV Filters)");
+ }
+ if (fullPath.ToLower().Contains("youtube.com/watch"))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "YouTube URL detected. YouTube website URL contains no media, a direct media file URL (eg MP4 or M3U8) is required. See the documentation FAQ for YouTube support.");
+ }
+ if (mediaPath.PathType != MediaPathType.AbsolutePathOrURL)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "URL detected, change location type to URL?");
+ }
+ else
+ {
+ // Display warning to iOS users if they're trying to use HTTP url without setting the permission
+ if ((isPlatformIOS || isPlatformTVOS) && fullPath.StartsWith("http://"))
+ {
+ #if UNITY_2022_1_OR_NEWER
+ if (PlayerSettings.insecureHttpOption != InsecureHttpOption.AlwaysAllowed)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "PlayerSettings.insecureHttpOption must be enabled for HTTP connections (see Player Settings)");
+ }
+ #else
+ if (!PlayerSettings.iOS.allowHTTPDownload)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "PlayerSettings.iOS.allowHTTPDownload must be enabled for HTTP connections (see Player Settings)");
+ }
+ #endif
+ }
+#if UNITY_ANDROID
+ if (fullPath.StartsWith("http://"))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "Starting with Android 8 unsecure HTTP is not allowed by default and HTTPS must be used, unless a custom cleartext security policy is assigned");
+ }
+#endif
+ // Display warning for Android users if they're trying to use a URL without setting permission
+ if (isPlatformAndroid && !PlayerSettings.Android.forceInternetPermission)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "You need to set 'Internet Access' to 'require' in your Player Settings for Android builds when using URLs");
+ }
+
+ // Display warning for UWP users if they're trying to use a URL without setting permission
+ if (platform == Platform.WindowsUWP || (platform == Platform.Unknown && (
+ BuildTargetGroup.WSA == UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup
+ )))
+ {
+ if (!PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.InternetClient))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "You need to set 'InternetClient' capability in your Player Settings when using URLs");
+ }
+ }
+ }
+ }
+ else
+ {
+ // [MOZ] All paths on (i|mac|tv)OS are absolute so this check just results in an incorrect warning being shown
+ #if !UNITY_EDITOR_OSX
+ if (mediaPath.PathType != MediaPathType.AbsolutePathOrURL && fullPath.StartsWith("/"))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "Absolute path detected, change location to Absolute path?");
+ }
+ #endif
+
+ // Display warning for Android users if they're trying to use absolute file path without permission
+ if (isPlatformAndroid && !PlayerSettings.Android.forceSDCardPermission)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "You may need to access the local file system you may need to set 'Write Access' to 'External(SDCard)' in your Player Settings for Android");
+ }
+
+ if (platform == Platform.Unknown || platform == MediaPlayer.GetPlatform())
+ {
+ bool fileExists = System.IO.File.Exists(fullPath);
+ if (!fileExists)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Error, "File not found");
+ }
+ else
+ {
+ // Check the case
+ // This approach is very slow, so we only run it when the app isn't playing
+ if (!Application.isPlaying)
+ {
+ string folderPath = System.IO.Path.GetDirectoryName(fullPath);
+ // Skip empty paths and network shares
+ if (!string.IsNullOrEmpty(folderPath) && !folderPath.StartsWith("\\\\"))
+ {
+ string[] files;
+ bool caseMatch = false;
+ try
+ {
+ string ext = System.IO.Path.GetExtension(fullPath);
+ files = System.IO.Directory.GetFiles(folderPath, $"*{ext}", System.IO.SearchOption.TopDirectoryOnly);
+ }
+ catch
+ {
+ // Directory.GetFiles can fail if the folder path cannot be resolved such as if it is a network share
+ files = null;
+ caseMatch = true;
+ }
+ if (files != null && files.Length > 0)
+ {
+ string modifiedFullPath = fullPath;
+#if UNITY_EDITOR_WIN
+ // Ensure fullPath is not using \ for the comparison
+ modifiedFullPath = modifiedFullPath.Replace('\\', '/');
+#endif
+ for (int i = 0; i < files.Length; i++)
+ {
+ string filePath = System.IO.Path.Combine(folderPath, files[i]);
+ filePath = filePath.Replace('\\', '/');
+ if (filePath == modifiedFullPath)
+ {
+ caseMatch = true;
+ break;
+ }
+ }
+ }
+ if (!caseMatch)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "File found but case doesn't match");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (mediaPath != null && mediaPath.PathType == MediaPathType.RelativeToStreamingAssetsFolder)
+ {
+ if (!System.IO.Directory.Exists(Application.streamingAssetsPath))
+ {
+ GUILayout.BeginHorizontal();
+ GUI.color = Color.yellow;
+ GUILayout.TextArea("Warning: No StreamingAssets folder found");
+
+ if (GUILayout.Button("Create Folder"))
+ {
+ System.IO.Directory.CreateDirectory(Application.streamingAssetsPath);
+ AssetDatabase.Refresh();
+ }
+ GUILayout.EndHorizontal();
+ }
+ else
+ {
+ bool checkAndroidFileSize = false;
+#if UNITY_ANDROID
+ if (platform == Platform.Unknown)
+ {
+ checkAndroidFileSize = true;
+ }
+#endif
+ if (platform == Platform.Android)
+ {
+ checkAndroidFileSize = true;
+ }
+
+ if (checkAndroidFileSize)
+ {
+ try
+ {
+ System.IO.FileInfo info = new System.IO.FileInfo(fullPath);
+ if (info != null && info.Length > (1024 * 1024 * 512))
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Warning, "Using this very large file inside StreamingAssets folder on Android isn't recommended. Deployments will be slow and mapping the file from the StreamingAssets JAR may cause storage and memory issues. We recommend loading from another folder on the device.");
+ }
+ }
+ catch (System.Exception)
+ {
+ }
+ }
+ }
+ }
+
+ GUI.color = Color.white;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Source.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Source.cs.meta
new file mode 100755
index 0000000..3c17bc4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Source.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d48dbd69cf9694e439fa465103879d35
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Subtitles.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Subtitles.cs
new file mode 100755
index 0000000..721d286
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Subtitles.cs
@@ -0,0 +1,77 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+#if UNITY_EDITOR_OSX
+ internal const string SubtitleFileExtensions = "srt";
+#else
+ internal const string SubtitleFileExtensions = "Subtitle Files;*.srt";
+#endif
+
+ private SerializedProperty _propSubtitles;
+ private SerializedProperty _propSubtitlePath;
+
+ private void OnInspectorGUI_Subtitles()
+ {
+ // TODO: add support for multiple targets?
+ MediaPlayer media = (this.target) as MediaPlayer;
+
+ //EditorGUILayout.BeginVertical();
+ EditorGUILayout.PropertyField(_propSubtitles, new GUIContent("Sideload Subtitles"));
+
+ EditorGUI.BeginDisabledGroup(!_propSubtitles.boolValue);
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ EditorGUILayout.PropertyField(_propSubtitlePath);
+
+ //if (!Application.isPlaying)
+ {
+ GUI.color = Color.white;
+ GUILayout.BeginHorizontal();
+
+ if (Application.isPlaying)
+ {
+ if (GUILayout.Button("Load"))
+ {
+ MediaPath mediaPath = new MediaPath(_propSubtitlePath.FindPropertyRelative("_path").stringValue, (MediaPathType)_propSubtitlePath.FindPropertyRelative("_pathType").enumValueIndex);
+ media.EnableSubtitles(mediaPath);
+ }
+ if (GUILayout.Button("Clear"))
+ {
+ media.DisableSubtitles();
+ }
+ }
+ else
+ {
+ GUILayout.FlexibleSpace();
+ }
+
+ MediaPathDrawer.ShowBrowseSubtitlesButtonIcon(_propSubtitlePath);
+
+ GUILayout.EndHorizontal();
+ if (_propSubtitles.boolValue)
+ {
+ ///MediaPath mediaPath = new MediaPath(_propSubtitlePath.FindPropertyRelative("_path").stringValue, (MediaPathType)_propSubtitlePath.FindPropertyRelative("_pathType").enumValueIndex);
+ //ShowFileWarningMessages(mediaPath, media.AutoOpen, Platform.Unknown);
+ //GUI.color = Color.white;
+ }
+ }
+
+ //EditorGUILayout.EndVertical();
+
+ EditorGUILayout.EndVertical();
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Subtitles.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Subtitles.cs.meta
new file mode 100755
index 0000000..723bf32
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Subtitles.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a04b089da8164054e9997d11d2b2f9a4
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_WebGL.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_WebGL.cs
new file mode 100755
index 0000000..6adb8e2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_WebGL.cs
@@ -0,0 +1,36 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private readonly static FieldDescription _optionExternalLibrary = new FieldDescription(".externalLibrary", GUIContent.none);
+
+ private void OnInspectorGUI_Override_WebGL()
+ {
+ GUILayout.Space(8f);
+
+ string optionsVarName = MediaPlayer.GetPlatformOptionsVariable(Platform.WebGL);
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ DisplayPlatformOption(optionsVarName, _optionExternalLibrary);
+
+ SerializedProperty propUseTextureMips = DisplayPlatformOption(optionsVarName, _optionTextureMips);
+ if (propUseTextureMips.boolValue && ((FilterMode)_propFilter.enumValueIndex) != FilterMode.Trilinear)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Info, "Recommend changing the texture filtering mode to Trilinear when using mip-maps.");
+ }
+
+ EditorGUILayout.EndVertical();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_WebGL.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_WebGL.cs.meta
new file mode 100755
index 0000000..5ed6732
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_WebGL.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 204fbdf92f39c6847ac3e270ca56dc09
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Windows.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Windows.cs
new file mode 100755
index 0000000..3c85689
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Windows.cs
@@ -0,0 +1,323 @@
+using UnityEngine;
+using UnityEditor;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlayer component
+ ///
+ public partial class MediaPlayerEditor : UnityEditor.Editor
+ {
+ private SerializedProperty _propSourceAudioSampleRate;
+ private SerializedProperty _propSourceAudioChannels;
+ private SerializedProperty _propManualSetAudioProps;
+
+ private readonly static GUIContent[] _audioModesWindows =
+ {
+ new GUIContent("System Direct"),
+ new GUIContent("Unity", "Allows the AudioOutput component to grab audio from the video and play it through Unity to the AudioListener"),
+ new GUIContent("Facebook Audio 360", "Initialises player with Facebook Audio 360 support"),
+ new GUIContent("None", "No audio"),
+ };
+
+ private readonly static GUIContent[] _audioModesUWP =
+ {
+ new GUIContent("System Direct"),
+ new GUIContent("Unity", "Allows the AudioOutput component to grab audio from the video and play it through Unity to the AudioListener"),
+ new GUIContent("Facebook Audio 360", "Initialises player with Facebook Audio 360 support"),
+ new GUIContent("None", "No audio"),
+ };
+
+ private readonly static FieldDescription _optionLowLatency = new FieldDescription(".useLowLatency", new GUIContent("Use Low Latency", "Provides a hint to the decoder to use less buffering - may degrade performance and quality"));
+ private readonly static FieldDescription _optionVideoAPI = new FieldDescription(".videoApi", new GUIContent("Video API", "The preferred video API to use"));
+ private readonly static FieldDescription _optionTextureMips = new FieldDescription(".useTextureMips", new GUIContent("Generate Mipmaps", "Automatically create mip-maps for the texture to reducing aliasing when texture is scaled down"));
+ private readonly static FieldDescription _option10BitTextures = new FieldDescription(".use10BitTextures", new GUIContent("Use 10-Bit Textures", "Provides a hint to the decoder to use 10-bit textures - allowing more quality for videos encoded with a 10-bit profile"));
+ private readonly static FieldDescription _optionUseHardwareDecoding = new FieldDescription(".useHardwareDecoding", new GUIContent("Hardware Decoding"));
+ private readonly static FieldDescription _optionUseRendererSync = new FieldDescription(".useRendererSync", new GUIContent("Renderer Sync", "Ensure synchronisation between video textures and Unity rendering - alleviates potential playback artifacts"));
+ private readonly static FieldDescription _optionUseStereoDetection = new FieldDescription(".useStereoDetection", new GUIContent("Use Stereo Detection", "Disable if no stereo detection is required"));
+ private readonly static FieldDescription _optionUseTextTrackSupport = new FieldDescription(".useTextTrackSupport", new GUIContent("Use Text Tracks", "Disable if no text tracks are required"));
+ private readonly static FieldDescription _optionUseAudioDelay = new FieldDescription(".useAudioDelay", new GUIContent("Use Audio Delay", "Allows audio to be offset"));
+ private readonly static FieldDescription _optionUseFacebookAudio360Support = new FieldDescription(".useFacebookAudio360Support", new GUIContent("Use Facebook Audio 360", "Disable if no Facebook Audio 360 support is required for"));
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ private readonly static FieldDescription _optionPauseOnPrerollComplete = new FieldDescription(".pauseOnPrerollComplete", new GUIContent("Pause On Preroll Complete", "Internally pause once preroll is completed. This is useful for syncing video playback to make sure all players are prerolled"));
+ private readonly static FieldDescription _optionBufferedFrameSelection = new FieldDescription(".bufferedFrameSelection", new GUIContent("Frame Selection", "Mode for selecting the next frame to display from the buffer fo frames"));
+#endif
+ private readonly static FieldDescription _optionUseHapNotchLC = new FieldDescription(".useHapNotchLC", new GUIContent("Use Hap/NotchLC", "Disable if no Hap/NotchLC playback is required"));
+ private readonly static FieldDescription _optionCustomMovParser = new FieldDescription(".useCustomMovParser", new GUIContent("Use Custom MOV Parser", "For playback of Hap and NotchLC media to handle high bit-rates"));
+ private readonly static FieldDescription _optionParallelFrameCount = new FieldDescription(".parallelFrameCount", new GUIContent("Parallel Frame Count", "Number of frames to decode in parallel via multi-threading. Higher values increase latency but can improve performance for demanding videos."));
+ private readonly static FieldDescription _optionPrerollFrameCount = new FieldDescription(".prerollFrameCount", new GUIContent("Preroll Frame Count", "Number of frames to pre-decode before playback starts. Higher values increase latency but can improve performance for demanding videos."));
+ private readonly static FieldDescription _optionAudioOutput = new FieldDescription("._audioMode", new GUIContent("Audio Output"));
+ private readonly static FieldDescription _optionAudio360ChannelMode = new FieldDescription(".audio360ChannelMode", new GUIContent("Channel Mode", "Specifies what channel mode Facebook Audio 360 needs to be initialised with"));
+ private readonly static FieldDescription _optionAudio360LatencyMS = new FieldDescription(".audio360LatencyMS", new GUIContent("Audio Latency (ms)", "Specifies audio latency, in milliseconds, that Facebook Audio 360 needs to be initialised with. -ve will play audio sooner, +ve later."));
+ private readonly static FieldDescription _optionStartMaxBitrate = new FieldDescription(".startWithHighestBitrate", new GUIContent("Start Max Bitrate"));
+ private readonly static FieldDescription _optionUseLowLiveLatency = new FieldDescription(".useLowLiveLatency", new GUIContent("Low Live Latency"));
+ private readonly static FieldDescription _optionHintAlphaChannel = new FieldDescription(".hintAlphaChannel", new GUIContent("Alpha Channel Hint", "If a video is detected as 32-bit, use or ignore the alpha channel"));
+ private readonly static FieldDescription _optionForceAudioOutputDeviceName = new FieldDescription(".forceAudioOutputDeviceName", new GUIContent("Force Audio Output Device Name", "Useful for VR when you need to output to the VR audio device"));
+ private readonly static FieldDescription _optionPreferredFilters = new FieldDescription(".preferredFilters", new GUIContent("Preferred Filters", "Priority list for preferred filters to be used instead of default"));
+
+ private void OnInspectorGUI_Override_Windows()
+ {
+ //MediaPlayer media = (this.target) as MediaPlayer;
+ //MediaPlayer.OptionsWindows options = media._optionsWindows;
+
+ GUILayout.Space(8f);
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ string optionsVarName = MediaPlayer.GetPlatformOptionsVariable(Platform.Windows);
+
+ {
+ SerializedProperty propVideoApi = DisplayPlatformOption(optionsVarName, _optionVideoAPI);
+ {
+ SerializedProperty propUseTextureMips = DisplayPlatformOption(optionsVarName, _optionTextureMips);
+ if (propUseTextureMips.boolValue && ((FilterMode)_propFilter.enumValueIndex) != FilterMode.Trilinear)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Info, "Recommend changing the texture filtering mode to Trilinear when using mip-maps.");
+ }
+ }
+ {
+ SerializedProperty propUseHardwareDecoding = serializedObject.FindProperty(optionsVarName + _optionUseHardwareDecoding.fieldName);
+ EditorGUI.BeginDisabledGroup(!propUseHardwareDecoding.boolValue && propVideoApi.enumValueIndex == (int)Windows.VideoApi.MediaFoundation);
+ {
+ DisplayPlatformOption(optionsVarName, _option10BitTextures);
+ }
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+ EditorGUILayout.EndVertical();
+
+ // Media Foundation Options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Media Foundation API Options", EditorStyles.boldLabel);
+ {
+ DisplayPlatformOption(optionsVarName, _optionUseHardwareDecoding);
+ DisplayPlatformOption(optionsVarName, _optionUseRendererSync);
+ }
+ {
+ DisplayPlatformOption(optionsVarName, _optionLowLatency);
+ DisplayPlatformOption(optionsVarName, _optionUseStereoDetection);
+ DisplayPlatformOption(optionsVarName, _optionUseTextTrackSupport);
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ if (_showUltraOptions)
+ {
+ SerializedProperty propBufferedFrameSelection = DisplayPlatformOption(optionsVarName, _optionBufferedFrameSelection);
+ if (propBufferedFrameSelection.enumValueIndex != (int)BufferedFrameSelectionMode.None)
+ {
+ EditorGUI.indentLevel++;
+ DisplayPlatformOption(optionsVarName, _optionPauseOnPrerollComplete);
+ EditorGUI.indentLevel--;
+ }
+ }
+#endif
+ if (_showUltraOptions)
+ {
+ SerializedProperty useHapNotchLC = DisplayPlatformOption(optionsVarName, _optionUseHapNotchLC);
+ if (useHapNotchLC.boolValue)
+ {
+ EditorGUI.indentLevel++;
+ DisplayPlatformOption(optionsVarName, _optionCustomMovParser);
+ DisplayPlatformOption(optionsVarName, _optionParallelFrameCount);
+ DisplayPlatformOption(optionsVarName, _optionPrerollFrameCount);
+ EditorGUI.indentLevel--;
+ }
+ }
+ }
+ // Audio Output
+ {
+ SerializedProperty propAudioDelay = DisplayPlatformOption(optionsVarName, _optionUseAudioDelay);
+ if (propAudioDelay.boolValue)
+ {
+ //EditorGUI.indentLevel++;
+ //EditorGUI.indentLevel--;
+ }
+ DisplayPlatformOption(optionsVarName, _optionUseFacebookAudio360Support);
+ SerializedProperty propAudioOutput = DisplayPlatformOptionEnum(optionsVarName, _optionAudioOutput, _audioModesWindows);
+ if (_showUltraOptions && (Windows.AudioOutput)propAudioOutput.enumValueIndex == Windows.AudioOutput.FacebookAudio360)
+ {
+ EditorGUILayout.Space();
+ EditorGUILayout.LabelField("Facebook Audio 360", EditorStyles.boldLabel);
+
+ DisplayPlatformOptionEnum(optionsVarName, _optionAudio360ChannelMode, _audio360ChannelMapGuiNames);
+
+ {
+ SerializedProperty propForceAudioOutputDeviceName = serializedObject.FindProperty(optionsVarName + ".forceAudioOutputDeviceName");
+ if (propForceAudioOutputDeviceName != null)
+ {
+ string[] deviceNames = { "Default", Windows.AudioDeviceOutputName_Rift, Windows.AudioDeviceOutputName_Vive, "Custom" };
+ int index = 0;
+ if (!string.IsNullOrEmpty(propForceAudioOutputDeviceName.stringValue))
+ {
+ switch (propForceAudioOutputDeviceName.stringValue)
+ {
+ case Windows.AudioDeviceOutputName_Rift:
+ index = 1;
+ break;
+ case Windows.AudioDeviceOutputName_Vive:
+ index = 2;
+ break;
+ default:
+ index = 3;
+ break;
+ }
+ }
+ int newIndex = EditorGUILayout.Popup("Audio Device Name", index, deviceNames);
+ if (newIndex == 0)
+ {
+ propForceAudioOutputDeviceName.stringValue = string.Empty;
+ }
+ else if (newIndex == 3)
+ {
+ if (index != newIndex)
+ {
+ if (string.IsNullOrEmpty(propForceAudioOutputDeviceName.stringValue) ||
+ propForceAudioOutputDeviceName.stringValue == Windows.AudioDeviceOutputName_Rift ||
+ propForceAudioOutputDeviceName.stringValue == Windows.AudioDeviceOutputName_Vive)
+ {
+ propForceAudioOutputDeviceName.stringValue = "?";
+ }
+ }
+ EditorGUILayout.PropertyField(propForceAudioOutputDeviceName, new GUIContent("Audio Device Name", "Useful for VR when you need to output to the VR audio device"));
+ }
+ else
+ {
+ propForceAudioOutputDeviceName.stringValue = deviceNames[newIndex];
+ }
+ }
+ }
+ }
+ }
+ EditorGUILayout.EndVertical();
+ }
+
+ // WinRT Options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("WinRT API Options", EditorStyles.boldLabel);
+ DisplayPlatformOption(optionsVarName, _optionStartMaxBitrate);
+ DisplayPlatformOption(optionsVarName, _optionUseLowLiveLatency);
+ if (_showUltraOptions)
+ {
+ SerializedProperty httpHeadersProp = serializedObject.FindProperty(optionsVarName + ".httpHeaders.httpHeaders");
+ if (httpHeadersProp != null)
+ {
+ OnInspectorGUI_HttpHeaders(httpHeadersProp);
+ }
+ GUILayout.Space(8f);
+ SerializedProperty keyAuthProp = serializedObject.FindProperty(optionsVarName + ".keyAuth");
+ if (keyAuthProp != null)
+ {
+ OnInspectorGUI_HlsDecryption(keyAuthProp);
+ }
+ }
+ EditorGUILayout.EndVertical();
+ }
+
+ // DirectShow Options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("DirectShow API Options", EditorStyles.boldLabel);
+
+ DisplayPlatformOption(optionsVarName, _optionHintAlphaChannel);
+ DisplayPlatformOption(optionsVarName, _optionForceAudioOutputDeviceName);
+
+ {
+ int prevIndentLevel = EditorGUI.indentLevel;
+ EditorGUI.indentLevel = 1;
+ SerializedProperty propPreferredFilter = DisplayPlatformOption(optionsVarName, _optionPreferredFilters);
+ if (propPreferredFilter.arraySize > 0)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Info, "Command filter names are:\n1) \"Microsoft DTV-DVD Video Decoder\" (best for compatibility when playing H.264 videos)\n2) \"LAV Video Decoder\"\n3) \"LAV Audio Decoder\"");
+ }
+ EditorGUI.indentLevel = prevIndentLevel;
+ }
+ EditorGUILayout.EndVertical();
+ }
+ }
+
+
+ private void OnInspectorGUI_Override_WindowsUWP()
+ {
+ //MediaPlayer media = (this.target) as MediaPlayer;
+ //MediaPlayer.OptionsWindowsUWP options = media._optionsWindowsUWP;
+
+ GUILayout.Space(8f);
+
+ string optionsVarName = MediaPlayer.GetPlatformOptionsVariable(Platform.WindowsUWP);
+
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+
+ if (_showUltraOptions)
+ {
+ SerializedProperty propVideoApi = DisplayPlatformOption(optionsVarName, _optionVideoAPI);
+ {
+ SerializedProperty propUseHardwareDecoding = serializedObject.FindProperty(optionsVarName + _optionUseHardwareDecoding.fieldName);
+ EditorGUI.BeginDisabledGroup(!propUseHardwareDecoding.boolValue && propVideoApi.enumValueIndex == (int)Windows.VideoApi.MediaFoundation);
+ {
+ DisplayPlatformOption(optionsVarName, _option10BitTextures);
+ }
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+
+ EditorGUILayout.EndVertical();
+
+ // Media Foundation Options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("Media Foundation API Options", EditorStyles.boldLabel);
+
+ DisplayPlatformOption(optionsVarName, _optionUseHardwareDecoding);
+ DisplayPlatformOption(optionsVarName, _optionUseRendererSync);
+
+ {
+ SerializedProperty propUseTextureMips = DisplayPlatformOption(optionsVarName, _optionTextureMips);
+ if (propUseTextureMips.boolValue && ((FilterMode)_propFilter.enumValueIndex) != FilterMode.Trilinear)
+ {
+ EditorHelper.IMGUI.NoticeBox(MessageType.Info, "Recommend changing the texture filtering mode to Trilinear when using mip-maps.");
+ }
+ }
+
+ DisplayPlatformOption(optionsVarName, _optionLowLatency);
+
+ DisplayPlatformOptionEnum(optionsVarName, _optionAudioOutput, _audioModesUWP);
+
+ EditorGUILayout.EndVertical();
+ }
+
+ // WinRT Options
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ GUILayout.Label("WinRT API Options", EditorStyles.boldLabel);
+
+ DisplayPlatformOption(optionsVarName, _optionStartMaxBitrate);
+ DisplayPlatformOption(optionsVarName, _optionUseLowLiveLatency);
+
+ if (_showUltraOptions)
+ {
+ {
+ SerializedProperty httpHeadersProp = serializedObject.FindProperty(optionsVarName + ".httpHeaders.httpHeaders");
+ if (httpHeadersProp != null)
+ {
+ OnInspectorGUI_HttpHeaders(httpHeadersProp);
+ }
+ }
+
+ {
+ SerializedProperty keyAuthProp = serializedObject.FindProperty(optionsVarName + ".keyAuth");
+ if (keyAuthProp != null)
+ {
+ OnInspectorGUI_HlsDecryption(keyAuthProp);
+ }
+ }
+ }
+ EditorGUILayout.EndVertical();
+ }
+
+ GUI.enabled = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Windows.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Windows.cs.meta
new file mode 100755
index 0000000..01d0a4f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/MediaPlayerEditor_Windows.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f96124fabf3e8cb46a512e3ecdbd6a3c
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/PlaylistMediaPlayerEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/PlaylistMediaPlayerEditor.cs
new file mode 100755
index 0000000..d9006ba
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/PlaylistMediaPlayerEditor.cs
@@ -0,0 +1,517 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the MediaPlaylist class
+ ///
+ [CustomPropertyDrawer(typeof(MediaPlaylist))]
+ public class MediaPlaylistDrawer : PropertyDrawer
+ {
+ private static readonly GUIContent _guiTextInsert = new GUIContent("Clone");
+ private static readonly GUIContent _guiTextDelete = new GUIContent("Delete");
+ private static readonly GUIContent _guiTextUp = new GUIContent("↑");
+ private static readonly GUIContent _guiTextDown = new GUIContent("↓");
+ private static GUIStyle _styleButtonFoldout = null;
+ private static GUIStyle _styleHelpBoxNoPad = null;
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ if (_styleButtonFoldout == null)
+ {
+ _styleButtonFoldout = new GUIStyle(EditorStyles.foldout);
+ _styleButtonFoldout.margin = new RectOffset();
+ _styleButtonFoldout.fontStyle = FontStyle.Bold;
+ _styleButtonFoldout.alignment = TextAnchor.MiddleLeft;
+ }
+ if (_styleHelpBoxNoPad == null)
+ {
+ _styleHelpBoxNoPad = new GUIStyle(EditorStyles.helpBox);
+ _styleHelpBoxNoPad.padding = new RectOffset();
+ _styleHelpBoxNoPad.overflow = new RectOffset();
+ _styleHelpBoxNoPad.margin = new RectOffset();
+ _styleHelpBoxNoPad.margin = new RectOffset(0, 0, 0, 0);
+ _styleHelpBoxNoPad.stretchWidth = false;
+ _styleHelpBoxNoPad.stretchHeight = false;
+ }
+
+ // Using BeginProperty / EndProperty on the parent property means that
+ // prefab override logic works on the entire property.
+ EditorGUI.BeginProperty(position, label, property);
+
+ SerializedProperty propItems = property.FindPropertyRelative("_items");
+
+ if (propItems.arraySize == 0)
+ {
+ if (GUILayout.Button("Insert Item"))
+ {
+ propItems.InsertArrayElementAtIndex(0);
+ }
+ }
+
+ int insertIndex = -1;
+ int deleteIndex = -1;
+
+ for (int i = 0; i < propItems.arraySize; i++)
+ {
+ SerializedProperty propItem = propItems.GetArrayElementAtIndex(i);
+
+ GUILayout.BeginVertical(_styleHelpBoxNoPad);
+
+ GUI.backgroundColor = propItem.isExpanded ? Color.yellow : Color.white;
+ GUILayout.Box(GUIContent.none, EditorStyles.miniButton, GUILayout.ExpandWidth(true));
+ Rect buttonRect = GUILayoutUtility.GetLastRect();
+ GUI.backgroundColor = Color.white;
+ if (Event.current.type != EventType.Layout)
+ {
+ EditorGUI.indentLevel++;
+ SerializedProperty propName = propItem.FindPropertyRelative("name");
+ propItem.isExpanded = EditorGUI.Foldout(buttonRect, propItem.isExpanded, "#" + i + ": " + propName.stringValue, true, _styleButtonFoldout);
+ EditorGUI.indentLevel--;
+ }
+
+ GUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ if (GUILayout.Button(_guiTextInsert, GUILayout.ExpandWidth(false)))
+ {
+ insertIndex = i;
+
+ }
+ if (GUILayout.Button(_guiTextDelete, GUILayout.ExpandWidth(false)))
+ {
+ deleteIndex = i;
+ }
+ EditorGUI.BeginDisabledGroup((i - 1) < 0);
+ if (GUILayout.Button(_guiTextUp, GUILayout.ExpandWidth(false)))
+ {
+ propItems.MoveArrayElement(i, i - 1);
+ }
+ EditorGUI.EndDisabledGroup();
+ EditorGUI.BeginDisabledGroup((i + 1) >= propItems.arraySize);
+ if (GUILayout.Button(_guiTextDown, GUILayout.ExpandWidth(false)))
+ {
+ propItems.MoveArrayElement(i, i + 1);
+ }
+ EditorGUI.EndDisabledGroup();
+ GUILayout.EndHorizontal();
+
+ if (propItem.isExpanded)
+ {
+ EditorGUILayout.PropertyField(propItem);
+ }
+
+ GUILayout.EndVertical();
+
+ GUILayout.Space(8f);
+ }
+
+ if (insertIndex >= 0)
+ {
+ propItems.InsertArrayElementAtIndex(insertIndex);
+ }
+ else if (deleteIndex >= 0)
+ {
+ propItems.DeleteArrayElementAtIndex(deleteIndex);
+ }
+
+ EditorGUI.EndProperty();
+ }
+ }
+
+ ///
+ /// Editor for the MediaPlaylist.MediaItem class
+ ///
+ [CustomPropertyDrawer(typeof(MediaPlaylist.MediaItem))]
+ public class MediaPlaylistItemDrawer : PropertyDrawer
+ {
+ private static readonly GUIContent _guiTextTransition = new GUIContent("Transition");
+ private static readonly GUIContent _guiTextOverrideTransition = new GUIContent("Override Transition");
+ private static readonly GUIContent _guiTextDuration = new GUIContent("Duration");
+ private static readonly GUIContent _guiTextEasing = new GUIContent("Easing");
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("name"));
+ SerializedProperty propSourceType = property.FindPropertyRelative("sourceType");
+
+ EditorGUILayout.PropertyField(propSourceType);
+ if (propSourceType.enumValueIndex == 0)
+ {
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("mediaPath"));
+ MediaPathDrawer.ShowBrowseButton(property.FindPropertyRelative("mediaPath"));
+ }
+ else
+ {
+ //EditorGUILayout.PropertyField(property.FindPropertyRelative("texture"));
+ //EditorGUILayout.PropertyField(property.FindPropertyRelative("textureDuration"));
+ }
+
+ EditorGUILayout.Space();
+
+ //EditorGUILayout.PropertyField(property.FindPropertyRelative("stereoPacking"));
+ //EditorGUILayout.PropertyField(property.FindPropertyRelative("alphaPacking"));
+
+ EditorGUILayout.Space();
+
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("loop"));
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("startMode"));
+ SerializedProperty propProgressMode = property.FindPropertyRelative("progressMode");
+ EditorGUILayout.PropertyField(propProgressMode);
+ if (propProgressMode.enumValueIndex == (int)PlaylistMediaPlayer.ProgressMode.BeforeFinish)
+ {
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("progressTimeSeconds"));
+ }
+
+ EditorGUILayout.Space();
+
+ SerializedProperty propIsOverrideTransition = property.FindPropertyRelative("isOverrideTransition");
+ EditorGUILayout.PropertyField(propIsOverrideTransition, _guiTextOverrideTransition);
+ if (propIsOverrideTransition.boolValue)
+ {
+ EditorGUI.indentLevel++;
+ SerializedProperty propTransitionMode = property.FindPropertyRelative("overrideTransition");
+ EditorGUILayout.PropertyField(propTransitionMode, _guiTextTransition);
+ if (propTransitionMode.enumValueIndex != (int)PlaylistMediaPlayer.Transition.None)
+ {
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("overrideTransitionDuration"), _guiTextDuration);
+ EditorGUILayout.PropertyField(property.FindPropertyRelative("overrideTransitionEasing"), _guiTextEasing);
+ }
+ EditorGUI.indentLevel--;
+ }
+ }
+ }
+
+ ///
+ /// Editor for the PlaylistMediaPlayer component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(PlaylistMediaPlayer))]
+ public class PlaylistMediaPlayerEditor : UnityEditor.Editor
+ {
+ private SerializedProperty _propPlayerA;
+ private SerializedProperty _propPlayerB;
+ private SerializedProperty _propPlaylist;
+ private SerializedProperty _propPlaylistAutoProgress;
+ private SerializedProperty _propAutoCloseVideo;
+ private SerializedProperty _propPlaylistLoopMode;
+ private SerializedProperty _propPausePreviousOnTransition;
+ private SerializedProperty _propDefaultTransition;
+ private SerializedProperty _propDefaultTransitionDuration;
+ private SerializedProperty _propDefaultTransitionEasing;
+ private SerializedProperty _propAudioVolume;
+ private SerializedProperty _propAudioMuted;
+
+ private static bool _expandPlaylistItems = false;
+
+ private static Material _materialIMGUI = null;
+ private static GUIStyle _sectionBoxStyle = null;
+
+ private const string SettingsPrefix = "AVProVideo-PlaylistMediaPlayerEditor-";
+
+ private void OnEnable()
+ {
+ _propPlayerA = this.CheckFindProperty("_playerA");
+ _propPlayerB = this.CheckFindProperty("_playerB");
+ _propDefaultTransition = this.CheckFindProperty("_defaultTransition");
+ _propDefaultTransitionDuration = this.CheckFindProperty("_defaultTransitionDuration");
+ _propDefaultTransitionEasing = this.CheckFindProperty("_defaultTransitionEasing");
+ _propPausePreviousOnTransition = this.CheckFindProperty("_pausePreviousOnTransition");
+ _propPlaylist = this.CheckFindProperty("_playlist");
+ _propPlaylistAutoProgress = this.CheckFindProperty("_playlistAutoProgress");
+ _propAutoCloseVideo = this.CheckFindProperty("_autoCloseVideo");
+ _propPlaylistLoopMode = this.CheckFindProperty("_playlistLoopMode");
+ _propAudioVolume = this.CheckFindProperty("_playlistAudioVolume");
+ _propAudioMuted = this.CheckFindProperty("_playlistAudioMuted");
+
+ _expandPlaylistItems = EditorPrefs.GetBool(SettingsPrefix + "ExpandPlaylistItems", false);
+ }
+
+ private void OnDisable()
+ {
+ EditorPrefs.SetBool(SettingsPrefix + "ExpandPlaylistItems", _expandPlaylistItems);
+ if (_materialIMGUI)
+ {
+ DestroyImmediate(_materialIMGUI); _materialIMGUI = null;
+ }
+ }
+
+ public override bool RequiresConstantRepaint()
+ {
+ PlaylistMediaPlayer media = (this.target) as PlaylistMediaPlayer;
+ return (media.Control != null && media.isActiveAndEnabled);
+ }
+
+ public override void OnInspectorGUI()
+ {
+ PlaylistMediaPlayer media = (this.target) as PlaylistMediaPlayer;
+
+ serializedObject.Update();
+
+ if (media == null || _propPlayerA == null)
+ {
+ return;
+ }
+
+ if (_sectionBoxStyle == null)
+ {
+ _sectionBoxStyle = new GUIStyle(GUI.skin.box);
+ _sectionBoxStyle.padding.top = 0;
+ _sectionBoxStyle.padding.bottom = 0;
+ }
+
+ EditorGUILayout.PropertyField(_propPlayerA);
+ EditorGUILayout.PropertyField(_propPlayerB);
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+ GUILayout.Label("Audio", EditorStyles.boldLabel);
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propAudioVolume, new GUIContent("Volume"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ foreach (PlaylistMediaPlayer player in this.targets)
+ {
+ player.AudioVolume = _propAudioVolume.floatValue;
+ }
+ }
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(_propAudioMuted, new GUIContent("Muted"));
+ if (EditorGUI.EndChangeCheck())
+ {
+ foreach (PlaylistMediaPlayer player in this.targets)
+ {
+ player.AudioMuted = _propAudioMuted.boolValue;
+ }
+ }
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+ GUILayout.Label("Playlist", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propPlaylistAutoProgress, new GUIContent("Auto Progress"));
+ EditorGUILayout.PropertyField(_propPlaylistLoopMode, new GUIContent("Loop Mode"));
+ EditorGUILayout.PropertyField(_propAutoCloseVideo);
+
+ {
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+ GUI.color = Color.white;
+ GUI.backgroundColor = Color.clear;
+ if (_expandPlaylistItems)
+ {
+ GUI.color = Color.white;
+ GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f, 0.1f);
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = Color.black;
+ }
+ }
+ GUILayout.BeginVertical(_sectionBoxStyle);
+ GUI.backgroundColor = Color.white;
+ if (GUILayout.Button("Playlist Items", EditorStyles.toolbarButton))
+ {
+ _expandPlaylistItems = !_expandPlaylistItems;
+ }
+ GUI.color = Color.white;
+
+ if (_expandPlaylistItems)
+ {
+ EditorGUILayout.PropertyField(_propPlaylist);
+ }
+ GUILayout.EndVertical();
+ }
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+ GUILayout.Label("Default Transition", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propDefaultTransition, new GUIContent("Transition"));
+ EditorGUILayout.PropertyField(_propDefaultTransitionEasing, new GUIContent("Easing"));
+ EditorGUILayout.PropertyField(_propDefaultTransitionDuration, new GUIContent("Duration"));
+ EditorGUILayout.PropertyField(_propPausePreviousOnTransition, new GUIContent("Pause Previous"));
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ if (Application.isPlaying)
+ {
+ ITextureProducer textureSource = media.TextureProducer;
+
+ Texture texture = null;
+ if (textureSource != null)
+ {
+ texture = textureSource.GetTexture();
+ }
+ if (texture == null)
+ {
+ texture = EditorGUIUtility.whiteTexture;
+ }
+
+ float ratio = 1f;// (float)texture.width / (float)texture.height;
+
+ // Reserve rectangle for texture
+ GUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ Rect textureRect;
+ if (texture != EditorGUIUtility.whiteTexture)
+ {
+ textureRect = GUILayoutUtility.GetRect(Screen.width / 2, Screen.width / 2, (Screen.width / 2) / ratio, (Screen.width / 2) / ratio);
+ }
+ else
+ {
+ textureRect = GUILayoutUtility.GetRect(1920f / 40f, 1080f / 40f);
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ string rateText = "0";
+ string playerText = string.Empty;
+ if (media.Info != null)
+ {
+ rateText = media.Info.GetVideoDisplayRate().ToString("F2");
+ playerText = media.Info.GetPlayerDescription();
+ }
+
+ EditorGUILayout.LabelField("Display Rate", rateText);
+ EditorGUILayout.LabelField("Using", playerText);
+
+ // Draw the texture
+ if (Event.current.type == EventType.Repaint)
+ {
+ Matrix4x4 prevMatrix = GUI.matrix;
+ if (textureSource != null && textureSource.RequiresVerticalFlip())
+ {
+ GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0f, textureRect.y + (textureRect.height / 2f)));
+ }
+
+ GUI.color = Color.gray;
+ EditorGUI.DrawTextureTransparent(textureRect, Texture2D.blackTexture, ScaleMode.StretchToFill);
+ GUI.color = Color.white;
+
+ if (!GUI.enabled)
+ {
+ GUI.color = Color.grey;
+ GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit, false);
+ GUI.color = Color.white;
+ }
+ else
+ {
+ if (!_materialIMGUI)
+ {
+ _materialIMGUI = VideoRender.CreateResolveMaterial( false );
+ VideoRender.SetupGammaMaterial(_materialIMGUI, true);
+ }
+ {
+ EditorGUI.DrawPreviewTexture(textureRect, texture, _materialIMGUI, ScaleMode.ScaleToFit);
+ }
+ }
+ GUI.matrix = prevMatrix;
+ }
+ }
+
+ EditorGUI.BeginDisabledGroup(!(media.Control != null && media.Control.CanPlay() && media.isActiveAndEnabled && !EditorApplication.isPaused));
+ OnInspectorGUI_PlayControls(media);
+ EditorGUI.EndDisabledGroup();
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ EditorGUI.BeginDisabledGroup(!Application.isPlaying);
+
+ GUILayout.Label("Current Item: " + media.PlaylistIndex + " / " + Mathf.Max(0, media.Playlist.Items.Count - 1) );
+
+ GUILayout.BeginHorizontal();
+ EditorGUI.BeginDisabledGroup(!media.CanJumpToItem(media.PlaylistIndex - 1));
+ if (GUILayout.Button("Prev"))
+ {
+ media.PrevItem();
+ }
+ EditorGUI.EndDisabledGroup();
+ EditorGUI.BeginDisabledGroup(!media.CanJumpToItem(media.PlaylistIndex + 1));
+ if (GUILayout.Button("Next"))
+ {
+ media.NextItem();
+ }
+ EditorGUI.EndDisabledGroup();
+ GUILayout.EndHorizontal();
+ EditorGUI.EndDisabledGroup();
+
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ private void OnInspectorGUI_PlayControls(PlaylistMediaPlayer player)
+ {
+ GUILayout.Space(8.0f);
+
+ // Slider
+ EditorGUILayout.BeginHorizontal();
+ bool isPlaying = false;
+ if (player.Control != null)
+ {
+ isPlaying = player.Control.IsPlaying();
+ }
+ float currentTime = 0f;
+ if (player.Control != null)
+ {
+ currentTime = (float)player.Control.GetCurrentTime();
+ }
+
+ float durationTime = 0f;
+ if (player.Info != null)
+ {
+ durationTime = (float)player.Info.GetDuration();
+ if (float.IsNaN(durationTime))
+ {
+ durationTime = 0f;
+ }
+ }
+ string timeUsed = Helper.GetTimeString(currentTime, true);
+ GUILayout.Label(timeUsed, GUILayout.ExpandWidth(false));
+
+ float newTime = GUILayout.HorizontalSlider(currentTime, 0f, durationTime, GUILayout.ExpandWidth(true));
+ if (newTime != currentTime && player.Control != null)
+ {
+ player.Control.Seek(newTime);
+ }
+
+ string timeTotal = "Infinity";
+ if (!float.IsInfinity(durationTime))
+ {
+ timeTotal = Helper.GetTimeString(durationTime, true);
+ }
+
+ GUILayout.Label(timeTotal, GUILayout.ExpandWidth(false));
+
+ EditorGUILayout.EndHorizontal();
+
+ // Buttons
+ EditorGUILayout.BeginHorizontal();
+ if (GUILayout.Button("Rewind", GUILayout.ExpandWidth(false)))
+ {
+ if (player.Control != null)
+ {
+ player.Control.Rewind();
+ }
+ }
+
+ if (!isPlaying)
+ {
+ GUI.color = Color.green;
+ if (GUILayout.Button("Play", GUILayout.ExpandWidth(true)))
+ {
+ player.Play();
+ }
+ }
+ else
+ {
+ GUI.color = Color.yellow;
+ if (GUILayout.Button("Pause", GUILayout.ExpandWidth(true)))
+ {
+ player.Pause();
+ }
+ }
+ GUI.color = Color.white;
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/PlaylistMediaPlayerEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/PlaylistMediaPlayerEditor.cs.meta
new file mode 100755
index 0000000..4bc8796
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/PlaylistMediaPlayerEditor.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c9328411ef862884f97a993c4daa9b68
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEditor.cs
new file mode 100755
index 0000000..c957817
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEditor.cs
@@ -0,0 +1,123 @@
+using UnityEditor;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the ResolveToRenderTexture component
+ ///
+ [CanEditMultipleObjects]
+ [CustomEditor(typeof(ResolveToRenderTexture))]
+ public class ResolveToRenderTextureEditor : UnityEditor.Editor
+ {
+ private SerializedProperty _propMediaPlayer;
+ private SerializedProperty _propExternalTexture;
+ private SerializedProperty _propResolveFlags;
+
+ private SerializedProperty _propOptionsApplyHSBC;
+ private SerializedProperty _propOptionsHue;
+ private SerializedProperty _propOptionsSaturation;
+ private SerializedProperty _propOptionsBrightness;
+ private SerializedProperty _propOptionsContrast;
+ private SerializedProperty _propOptionsGamma;
+ private SerializedProperty _propOptionsTint;
+
+ private SerializedProperty _propOptionsAspectRatio;
+
+ void OnEnable()
+ {
+ _propMediaPlayer = this.CheckFindProperty("_mediaPlayer");
+ _propExternalTexture = this.CheckFindProperty("_externalTexture");
+ _propResolveFlags = this.CheckFindProperty("_resolveFlags");
+ _propOptionsApplyHSBC = this.CheckFindProperty("_options.applyHSBC");
+ _propOptionsHue = this.CheckFindProperty("_options.hue");
+ _propOptionsSaturation = this.CheckFindProperty("_options.saturation");
+ _propOptionsBrightness = this.CheckFindProperty("_options.brightness");
+ _propOptionsContrast = this.CheckFindProperty("_options.contrast");
+ _propOptionsGamma = this.CheckFindProperty("_options.gamma");
+ _propOptionsTint = this.CheckFindProperty("_options.tint");
+ _propOptionsAspectRatio = this.CheckFindProperty("_options.aspectRatio");
+ }
+
+ private void ButtonFloatReset(SerializedProperty prop, float value)
+ {
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.PropertyField(prop);
+ if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false)))
+ {
+ prop.floatValue = value;
+ }
+ GUILayout.EndHorizontal();
+ }
+
+ private void ButtonColorReset(SerializedProperty prop, Color value)
+ {
+ GUILayout.BeginHorizontal();
+ EditorGUILayout.PropertyField(prop);
+ if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false)))
+ {
+ prop.colorValue = value;
+ }
+ GUILayout.EndHorizontal();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ EditorGUILayout.PropertyField(_propMediaPlayer);
+ EditorGUILayout.PropertyField(_propExternalTexture);
+ _propResolveFlags.intValue = EditorGUILayout.MaskField("Resolve Flags", _propResolveFlags.intValue, System.Enum.GetNames(typeof( VideoRender.ResolveFlags)));
+
+ EditorGUI.BeginChangeCheck();
+ {
+ EditorGUILayout.PropertyField(_propOptionsApplyHSBC);
+ EditorGUI.BeginDisabledGroup(!_propOptionsApplyHSBC.boolValue);
+ {
+ EditorGUI.indentLevel++;
+ ButtonFloatReset(_propOptionsHue, 0f);
+ ButtonFloatReset(_propOptionsSaturation, 0.5f);
+ ButtonFloatReset(_propOptionsBrightness, 0.5f);
+ ButtonFloatReset(_propOptionsContrast, 0.5f);
+ ButtonFloatReset(_propOptionsGamma, 1f);
+ EditorGUI.indentLevel--;
+ }
+ EditorGUI.EndDisabledGroup();
+ ButtonColorReset(_propOptionsTint, Color.white);
+ }
+ if (EditorGUI.EndChangeCheck())
+ {
+ Object[] resolves = this.serializedObject.targetObjects;
+ if (resolves != null)
+ {
+ foreach (ResolveToRenderTexture resolve in resolves)
+ {
+ resolve.SetMaterialDirty();
+ }
+ }
+ }
+
+ EditorGUILayout.PropertyField(_propOptionsAspectRatio);
+
+ serializedObject.ApplyModifiedProperties();
+
+ {
+ ResolveToRenderTexture resolve = this.target as ResolveToRenderTexture;
+ if (resolve != null && resolve.TargetTexture != null)
+ {
+ Rect r = GUILayoutUtility.GetAspectRect(resolve.TargetTexture.width / (float)resolve.TargetTexture.height);
+ GUI.DrawTexture(r, resolve.TargetTexture, ScaleMode.StretchToFill, true);
+ if (GUILayout.Button("Select Texture"))
+ {
+ Selection.activeObject = resolve.TargetTexture;
+ }
+ Repaint();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEditor.cs.meta
new file mode 100755
index 0000000..4b4b814
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b8e6745d22bfa424b83014fd0ed7bd29
+timeCreated: 1653302586
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/EditorHelper.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/EditorHelper.cs
new file mode 100755
index 0000000..6d2e5ce
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/EditorHelper.cs
@@ -0,0 +1,403 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Helper methods for editor components
+ ///
+ public static class EditorHelper
+ {
+ ///
+ /// Loads from EditorPrefs, converts a CSV string to List and returns it
+ ///
+ internal static List GetEditorPrefsToStringList(string key, char separator = ';')
+ {
+ string items = EditorPrefs.GetString(key, string.Empty);
+ return new List(items.Split(new char[] { separator }, System.StringSplitOptions.RemoveEmptyEntries));
+ }
+
+ ///
+ /// Converts a List into a CSV string and saves it in EditorPrefs
+ ///
+ internal static void SetEditorPrefsFromStringList(string key, List items, char separator = ';')
+ {
+ string value = string.Empty;
+ if (items != null && items.Count > 0)
+ {
+ value = string.Join(separator.ToString(), items.ToArray());
+ }
+ EditorPrefs.SetString(key, value);
+ }
+
+ public static SerializedProperty CheckFindProperty(this UnityEditor.Editor editor, string propertyName)
+ {
+ SerializedProperty result = editor.serializedObject.FindProperty(propertyName);
+ Debug.Assert(result != null, "Missing property: " + propertyName);
+ return result;
+ }
+
+ ///
+ /// Only lets the property if the proposed path doesn't contain invalid characters
+ /// Also changes all backslash characters to forwardslash for better cross-platform compatability
+ ///
+ internal static bool SafeSetPathProperty(string path, SerializedProperty property)
+ {
+ bool result = false;
+
+ if (path == null)
+ {
+ path = string.Empty;
+ }
+
+ if (path != property.stringValue)
+ {
+ property.stringValue = path;
+ result = true;
+ }
+
+ return result;
+ }
+
+ ///
+ /// Returns whether a define exists for a specific platform
+ ///
+ internal static bool HasScriptDefine(string define, BuildTargetGroup buildTarget = BuildTargetGroup.Unknown)
+ {
+ if (buildTarget == BuildTargetGroup.Unknown) { buildTarget = EditorUserBuildSettings.selectedBuildTargetGroup; }
+ string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget);
+ return defines.Contains(define);
+ }
+
+ ///
+ /// Adds a define if it doesn't already exist for a specific platform
+ ///
+ internal static void AddScriptDefine(string define, BuildTargetGroup buildTarget = BuildTargetGroup.Unknown)
+ {
+ if (buildTarget == BuildTargetGroup.Unknown) { buildTarget = EditorUserBuildSettings.selectedBuildTargetGroup; }
+ string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget);
+ if (!defines.Contains(define))
+ {
+ defines += ";" + define + ";";
+ PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTarget, defines);
+ }
+ }
+
+ ///
+ /// Removes a define if it exists for a specific platform
+ ///
+ internal static void RemoveScriptDefine(string define, BuildTargetGroup buildTarget = BuildTargetGroup.Unknown)
+ {
+ if (buildTarget == BuildTargetGroup.Unknown) { buildTarget = EditorUserBuildSettings.selectedBuildTargetGroup; }
+ string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget);
+ if (defines.Contains(define))
+ {
+ defines = defines.Replace(define, "");
+ PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTarget, defines);
+ }
+ }
+
+ ///
+ /// Given a partial file path and MediaLocation, return a directory path suitable for a file browse dialog to start in
+ ///
+ internal static string GetBrowsableFolder(string path, MediaPathType fileLocation)
+ {
+ // Try to resolve based on file path + file location
+ string result = Helper.GetFilePath(path, fileLocation);
+ if (!string.IsNullOrEmpty(result))
+ {
+ if (System.IO.File.Exists(result))
+ {
+ result = System.IO.Path.GetDirectoryName(result);
+ }
+ }
+
+ if (!System.IO.Directory.Exists(result))
+ {
+ // Just resolve on file location
+ result = Helper.GetPath(fileLocation);
+ }
+ if (string.IsNullOrEmpty(result))
+ {
+ // Fallback
+ result = Application.streamingAssetsPath;
+ }
+ return result;
+ }
+
+ internal static bool OpenMediaFileDialog(string startPath, ref MediaPath mediaPath, ref string fullPath, string extensions)
+ {
+ bool result = false;
+
+ string path = UnityEditor.EditorUtility.OpenFilePanel("Browse Media File", startPath, extensions);
+ Debug.Log($"OpenMediaFileDialog - path: {path}");
+ if (!string.IsNullOrEmpty(path) && !path.EndsWith(".meta"))
+ {
+ mediaPath = GetMediaPathFromFullPath(path);
+ fullPath = path;
+ Debug.Log($"OpenMediaFileDialog - mediaPath.Path: {mediaPath.Path}, mediaPath.PathType: {mediaPath.PathType}");
+ result = true;
+ }
+
+ return result;
+ }
+
+ /*private static bool IsPathWithin(string fullPath, string targetPath)
+ {
+ return fullPath.StartsWith(targetPath);
+ }*/
+
+ private static string GetPathRelativeTo(string root, string fullPath)
+ {
+ string result = fullPath.Remove(0, root.Length);
+ if (result.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString()) || result.StartsWith(System.IO.Path.AltDirectorySeparatorChar.ToString()))
+ {
+ result = result.Remove(0, 1);
+ }
+ return result;
+ }
+
+ internal static MediaPath GetMediaPathFromFullPath(string fullPath)
+ {
+ MediaPath result = null;
+ string projectRoot = System.IO.Path.GetFullPath(System.IO.Path.Combine(Application.dataPath, ".."));
+ projectRoot = projectRoot.Replace('\\', '/');
+
+ if (fullPath.StartsWith(projectRoot))
+ {
+ if (fullPath.StartsWith(Application.streamingAssetsPath))
+ {
+ // Must be StreamingAssets relative path
+ result = new MediaPath(GetPathRelativeTo(Application.streamingAssetsPath, fullPath), MediaPathType.RelativeToStreamingAssetsFolder);
+ }
+ else if (fullPath.StartsWith(Application.dataPath))
+ {
+ // Must be Assets relative path
+ result = new MediaPath(GetPathRelativeTo(Application.dataPath, fullPath), MediaPathType.RelativeToDataFolder);
+ }
+ else
+ {
+ // Must be project relative path
+ result = new MediaPath(GetPathRelativeTo(projectRoot, fullPath), MediaPathType.RelativeToProjectFolder);
+ }
+ }
+ else
+ // Must be persistant data
+ if (fullPath.StartsWith(Application.persistentDataPath))
+ {
+ result = new MediaPath(GetPathRelativeTo(Application.persistentDataPath, fullPath), MediaPathType.RelativeToPersistentDataFolder);
+ }
+ else
+ {
+ // Must be absolute path
+ result = new MediaPath(fullPath, MediaPathType.AbsolutePathOrURL);
+ }
+ return result;
+ }
+
+ internal class IMGUI
+ {
+ private static GUIStyle _copyableStyle = null;
+ private static GUIStyle _wordWrappedTextAreaStyle = null;
+ private static GUIStyle _rightAlignedLabelStyle = null;
+ private static GUIStyle _centerAlignedLabelStyle = null;
+
+ ///
+ /// Displays an IMGUI warning text box inline
+ ///
+ internal static void WarningTextBox(string title, string body, Color bgColor, Color titleColor, Color bodyColor)
+ {
+ BeginWarningTextBox(title, body, bgColor, titleColor, bodyColor);
+ EndWarningTextBox();
+ }
+
+ ///
+ /// Displays an IMGUI warning text box inline
+ ///
+ internal static void BeginWarningTextBox(string title, string body, Color bgColor, Color titleColor, Color bodyColor)
+ {
+ GUI.backgroundColor = bgColor;
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ if (!string.IsNullOrEmpty(title))
+ {
+ GUI.color = titleColor;
+ GUILayout.Label(title, EditorStyles.boldLabel);
+ }
+ if (!string.IsNullOrEmpty(body))
+ {
+ GUI.color = bodyColor;
+ GUILayout.Label(body, EditorStyles.wordWrappedLabel);
+ }
+ }
+
+ internal static void EndWarningTextBox()
+ {
+ EditorGUILayout.EndVertical();
+ GUI.backgroundColor = Color.white;
+ GUI.color = Color.white;
+ }
+
+ ///
+ /// Displays an IMGUI box containing a copyable string that wraps
+ /// Usedful for very long strings eg file paths/urls
+ ///
+ internal static void CopyableFilename(string path)
+ {
+ // The box disappars unless it has some content
+ if (string.IsNullOrEmpty(path))
+ {
+ path = " ";
+ }
+
+ // Display the file name so it's easy to read and copy to the clipboard
+ if (!string.IsNullOrEmpty(path) && 0 > path.IndexOfAny(System.IO.Path.GetInvalidPathChars()))
+ {
+ // Some GUI hacks here because SelectableLabel wants to be double height and it doesn't want to be centered because it's an EditorGUILayout function...
+ string text = System.IO.Path.GetFileName(path);
+
+ if (_copyableStyle == null)
+ {
+ _copyableStyle = new GUIStyle(EditorStyles.wordWrappedLabel);
+ _copyableStyle.fontStyle = FontStyle.Bold;
+ _copyableStyle.stretchWidth = true;
+ _copyableStyle.stretchHeight = true;
+ _copyableStyle.alignment = TextAnchor.MiddleCenter;
+ _copyableStyle.margin.top = 8;
+ _copyableStyle.margin.bottom = 16;
+ }
+
+ float height = _copyableStyle.CalcHeight(new GUIContent(text), Screen.width)*1.5f;
+ EditorGUILayout.SelectableLabel(text, _copyableStyle, GUILayout.Height(height), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(true));
+ }
+ }
+
+ ///
+ ///
+ internal static GUIStyle GetWordWrappedTextAreaStyle()
+ {
+ if (_wordWrappedTextAreaStyle == null)
+ {
+ _wordWrappedTextAreaStyle = new GUIStyle(EditorStyles.textArea);
+ _wordWrappedTextAreaStyle.wordWrap = true;
+ }
+ return _wordWrappedTextAreaStyle;
+ }
+
+ internal static GUIStyle GetRightAlignedLabelStyle()
+ {
+ if (_rightAlignedLabelStyle == null)
+ {
+ _rightAlignedLabelStyle = new GUIStyle(GUI.skin.label);
+ _rightAlignedLabelStyle.alignment = TextAnchor.UpperRight;
+ }
+ return _rightAlignedLabelStyle;
+ }
+
+ internal static GUIStyle GetCenterAlignedLabelStyle()
+ {
+ if (_centerAlignedLabelStyle == null)
+ {
+ _centerAlignedLabelStyle = new GUIStyle(GUI.skin.label);
+ _centerAlignedLabelStyle.alignment = TextAnchor.MiddleCenter;
+ }
+ return _centerAlignedLabelStyle;
+ }
+
+ ///
+ /// Displays IMGUI box in red/yellow for errors/warnings
+ ///
+ internal static void NoticeBox(MessageType messageType, string message)
+ {
+ //GUI.backgroundColor = Color.yellow;
+ //EditorGUILayout.HelpBox(message, messageType);
+
+ switch (messageType)
+ {
+ case MessageType.Error:
+ GUI.color = Color.red;
+ message = "Error: " + message;
+ break;
+ case MessageType.Warning:
+ GUI.color = Color.yellow;
+ message = "Warning: " + message;
+ break;
+ }
+
+ //GUI.color = Color.yellow;
+ GUILayout.TextArea(message);
+ GUI.color = Color.white;
+ }
+
+ ///
+ /// Displays IMGUI text centered horizontally
+ ///
+ internal static void CentreLabel(string text, GUIStyle style = null)
+ {
+ GUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ if (style == null)
+ {
+ GUILayout.Label(text);
+ }
+ else
+ {
+ GUILayout.Label(text, style);
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ }
+
+ internal static bool ToggleScriptDefine(string label, string define)
+ {
+ EditorGUI.BeginChangeCheck();
+ bool isEnabled = EditorGUILayout.Toggle(label, EditorHelper.HasScriptDefine(define));
+ if (EditorGUI.EndChangeCheck())
+ {
+ if (isEnabled)
+ {
+ EditorHelper.AddScriptDefine(define);
+ }
+ else
+ {
+ EditorHelper.RemoveScriptDefine(define);
+ }
+ }
+ return isEnabled;
+ }
+ }
+ }
+
+ internal class HorizontalFlowScope : GUI.Scope
+ {
+ private float _windowWidth;
+ private float _width;
+
+ public HorizontalFlowScope(int windowWidth)
+ {
+ _windowWidth = windowWidth;
+ _width = _windowWidth;
+ GUILayout.BeginHorizontal();
+ }
+
+ protected override void CloseScope()
+ {
+ GUILayout.EndHorizontal();
+ }
+
+ public void AddItem(GUIContent content, GUIStyle style)
+ {
+ _width -= style.CalcSize(content).x + style.padding.horizontal;
+ if (_width <= 0f)
+ {
+ _width += Screen.width;
+ GUILayout.EndHorizontal();
+ GUILayout.BeginHorizontal();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/EditorHelper.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/EditorHelper.cs.meta
new file mode 100755
index 0000000..c68fd0b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/EditorHelper.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d5f2bdbf8e8ad454482c409d00e673ed
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaHintsDrawer.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaHintsDrawer.cs
new file mode 100755
index 0000000..117cc55
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaHintsDrawer.cs
@@ -0,0 +1,44 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ [CustomPropertyDrawer(typeof(MediaHints))]
+ public class MediaHintsDrawer : PropertyDrawer
+ {
+ private readonly static GUIContent[] StereoPackingOptions =
+ {
+ // NOTE: must be in the same order as enum StereoPacking
+ new GUIContent("None"),
+ new GUIContent("Top Bottom"),
+ new GUIContent("Left Right"),
+ new GUIContent("Custom UV"),
+ };
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return 0f; }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUI.BeginProperty(position, GUIContent.none, property);
+
+ SerializedProperty propHintsTransparency = property.FindPropertyRelative("transparency");
+ SerializedProperty propHintsAlphaPacking = property.FindPropertyRelative("alphaPacking");
+ SerializedProperty propHintsStereoPacking = property.FindPropertyRelative("stereoPacking");
+
+ EditorGUILayout.PropertyField(propHintsTransparency);
+ if ((TransparencyMode)propHintsTransparency.enumValueIndex == TransparencyMode.Transparent)
+ {
+ EditorGUILayout.PropertyField(propHintsAlphaPacking);
+ }
+
+ {
+ // NOTE: We don't allow selection of 'Two Textures' as this mode is only produced by the Players as it is platform specific
+ propHintsStereoPacking.enumValueIndex = EditorGUILayout.Popup(new GUIContent("Stereo Packing"), propHintsStereoPacking.enumValueIndex, StereoPackingOptions);
+ }
+
+ EditorGUI.EndProperty();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaHintsDrawer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaHintsDrawer.cs.meta
new file mode 100755
index 0000000..5e3ed7c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaHintsDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 46cb5084587db3f40ae472c68bceaf34
+timeCreated: 1614875697
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaPathDrawer.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaPathDrawer.cs
new file mode 100755
index 0000000..3d928ce
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaPathDrawer.cs
@@ -0,0 +1,61 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ [CustomPropertyDrawer(typeof(MediaPath))]
+ public class MediaPathDrawer : PropertyDrawer
+ {
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return 0f; }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUI.BeginProperty(position, GUIContent.none, property);
+
+ SerializedProperty propPath = property.FindPropertyRelative("_path");
+ SerializedProperty propPathType = property.FindPropertyRelative("_pathType");
+
+ EditorGUILayout.PropertyField(propPathType, GUIContent.none);
+
+ string newUrl = EditorGUILayout.TextField(propPath.stringValue);
+
+ newUrl = newUrl.Trim();
+ if (EditorHelper.SafeSetPathProperty(newUrl, propPath))
+ {
+ // TODO: shouldn't we set all targets?
+ EditorUtility.SetDirty(property.serializedObject.targetObject);
+ }
+ MediaPlayerEditor.ShowFileWarningMessages(propPath.stringValue, (MediaPathType)propPathType.enumValueIndex, null, MediaSource.Path, false, Platform.Unknown);
+ GUI.color = Color.white;
+
+ EditorGUI.EndProperty();
+ }
+
+ public static void ShowBrowseButton(SerializedProperty propMediaPath)
+ {
+ GUIContent buttonText = new GUIContent("Browse", EditorGUIUtility.IconContent("d_Project").image);
+ if (GUILayout.Button(buttonText, GUILayout.ExpandWidth(true)))
+ {
+ RecentMenu.Create(propMediaPath, null, MediaPlayerEditor.MediaFileExtensions, false);
+ }
+ }
+
+ public static void ShowBrowseButtonIcon(SerializedProperty propMediaPath, SerializedProperty propMediaSource)
+ {
+ if (GUILayout.Button(EditorGUIUtility.IconContent("d_Project"), GUILayout.ExpandWidth(false)))
+ {
+ RecentMenu.Create(propMediaPath, propMediaSource, MediaPlayerEditor.MediaFileExtensions, false, 100);
+ }
+ }
+
+ public static void ShowBrowseSubtitlesButtonIcon(SerializedProperty propMediaPath)
+ {
+ if (GUILayout.Button(EditorGUIUtility.IconContent("d_Project"), GUILayout.ExpandWidth(false)))// GUILayout.Height(EditorGUIUtility.singleLineHeight)))
+ {
+ RecentMenu.Create(propMediaPath, null, MediaPlayerEditor.SubtitleFileExtensions, false);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaPathDrawer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaPathDrawer.cs.meta
new file mode 100755
index 0000000..6fed1db
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaPathDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d8604f79a3c54214dae18738c95583f7
+timeCreated: 1614875700
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaReferenceEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaReferenceEditor.cs
new file mode 100755
index 0000000..88116d9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaReferenceEditor.cs
@@ -0,0 +1,388 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ [CanEditMultipleObjects()]
+ [CustomEditor(typeof(MediaReference))]
+ public class MediaReferenceEditor : UnityEditor.Editor
+ {
+ internal const string SettingsPrefix = "AVProVideo-MediaReferenceEditor-";
+
+ private SerializedProperty _propMediaPath;
+ private SerializedProperty _propHints;
+
+ private SerializedProperty _propPlatformMacOS;
+ private SerializedProperty _propPlatformWindows;
+ private SerializedProperty _propPlatformAndroid;
+ private SerializedProperty _propPlatformIOS;
+ private SerializedProperty _propPlatformTvOS;
+ private SerializedProperty _propPlatformWindowsUWP;
+ private SerializedProperty _propPlatformWebGL;
+ //private SerializedProperty _propAlias;
+
+ void OnEnable()
+ {
+ _propMediaPath = this.CheckFindProperty("_mediaPath");
+ _propHints = this.CheckFindProperty("_hints");
+
+ _propPlatformMacOS = this.CheckFindProperty("_macOS");
+ _propPlatformWindows = this.CheckFindProperty("_windows");
+ _propPlatformAndroid = this.CheckFindProperty("_android");
+ _propPlatformIOS = this.CheckFindProperty("_iOS");
+ _propPlatformTvOS = this.CheckFindProperty("_tvOS");
+ _propPlatformWindowsUWP = this.CheckFindProperty("_windowsUWP");
+ _propPlatformWebGL = this.CheckFindProperty("_webGL");
+
+ //_propAlias = CheckFindProperty("_alias");
+ _zoomToFill = EditorPrefs.GetBool(SettingsPrefix + "ZoomToFill", _zoomToFill);
+ _thumbnailTime = EditorPrefs.GetFloat(SettingsPrefix + "ThumbnailTime", _thumbnailTime);
+ }
+
+ void OnDisable()
+ {
+ EndGenerateThumbnails(false);
+ RemoveProgress();
+
+ EditorPrefs.SetBool(SettingsPrefix + "ZoomToFill", _zoomToFill);
+ EditorPrefs.SetFloat(SettingsPrefix + "ThumbnailTime", _thumbnailTime);
+ }
+
+ public override void OnInspectorGUI()
+ {
+ //MediaPlayer media = (this.target) as MediaPlayer;
+
+ //this.DrawDefaultInspector();
+
+ serializedObject.Update();
+
+ GUILayout.Label("Media Reference");
+ EditorGUILayout.Space();
+ //EditorGUILayout.PropertyField(_propAlias);
+ //EditorGUILayout.Space();
+
+ {
+ string mediaName = _propMediaPath.FindPropertyRelative("_path").stringValue;
+ GUILayout.BeginVertical(GUI.skin.box);
+ MediaPlayerEditor.OnInspectorGUI_CopyableFilename(mediaName);
+ GUILayout.EndVertical();
+ }
+
+ EditorGUILayout.PropertyField(_propMediaPath);
+
+ MediaPathDrawer.ShowBrowseButton(_propMediaPath);
+
+ EditorGUILayout.Space();
+
+ //GUILayout.Label("Media Hints", EditorStyles.boldLabel);
+ EditorGUILayout.PropertyField(_propHints);
+
+ EditorGUILayout.PropertyField(_propPlatformMacOS, new GUIContent("macOS"));
+ EditorGUILayout.PropertyField(_propPlatformWindows, new GUIContent("Windows"));
+ EditorGUILayout.PropertyField(_propPlatformAndroid, new GUIContent("Android"));
+ EditorGUILayout.PropertyField(_propPlatformIOS, new GUIContent("iOS"));
+ EditorGUILayout.PropertyField(_propPlatformTvOS, new GUIContent("tvOS"));
+ EditorGUILayout.PropertyField(_propPlatformWindowsUWP, new GUIContent("UWP"));
+ EditorGUILayout.PropertyField(_propPlatformWebGL, new GUIContent("WebGL"));
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ serializedObject.ApplyModifiedProperties();
+
+ bool beginGenerateThumbnails = false;
+
+ GUILayout.FlexibleSpace();
+ EditorGUI.BeginDisabledGroup(IsGeneratingThumbnails());
+
+ GUILayout.BeginHorizontal();
+ _thumbnailTime = GUILayout.HorizontalSlider(_thumbnailTime, 0f, 1f, GUILayout.ExpandWidth(true));
+ _zoomToFill = GUILayout.Toggle(_zoomToFill, "Zoom And Crop", GUI.skin.button, GUILayout.ExpandWidth(false));
+ GUILayout.EndHorizontal();
+ if (GUILayout.Button("Generate Thumbnail"))
+ {
+ beginGenerateThumbnails = true;
+ }
+ EditorGUI.EndDisabledGroup();
+
+ if (beginGenerateThumbnails)
+ {
+ BeginGenerateThumbnails();
+ }
+
+ if (IsGeneratingThumbnails())
+ {
+ ShowProgress();
+ }
+ if (!IsGeneratingThumbnails())
+ {
+ RemoveProgress();
+ }
+ }
+
+ private void ShowProgress()
+ {
+ // Show cancellable progress
+ float t = (float)_targetIndex / (float)this.targets.Length;
+ t = 0.25f + t * 0.75f;
+ MediaReference media = (this.targets[_targetIndex]) as MediaReference;
+
+ #if UNITY_2020_1_OR_NEWER
+ if (_progressId < 0)
+ {
+ //Progress.RegisterCancelCallback(_progressId...)
+ _progressId = Progress.Start("[AVProVideo] Generating Thumbnails...", null, Progress.Options.Managed);
+ }
+ Progress.Report(_progressId, t, media.MediaPath.Path);
+ #else
+ if (EditorUtility.DisplayCancelableProgressBar("[AVProVideo] Generating Thumbnails...", media.MediaPath.Path, t))
+ {
+ EndGenerateThumbnails(false);
+ }
+ #endif
+ }
+
+ private void RemoveProgress()
+ {
+ #if UNITY_2020_1_OR_NEWER
+ if (_progressId >= 0)
+ {
+ Progress.Remove(_progressId);
+ _progressId = -1;
+ }
+ #else
+ EditorUtility.ClearProgressBar();
+ #endif
+ }
+
+ #if UNITY_2020_1_OR_NEWER
+ private int _progressId = -1;
+ #endif
+ private float _thumbnailTime;
+ private bool _zoomToFill = false;
+ private int _lastFrame;
+ private BaseMediaPlayer _thumbnailPlayer;
+ private int _mediaFrame = -1;
+ private int _targetIndex = 0;
+ private float _timeoutTimer = 0f;
+
+ private bool IsGeneratingThumbnails()
+ {
+ return (_thumbnailPlayer != null);
+ }
+
+ private void BeginGenerateThumbnails()
+ {
+ EditorApplication.update -= UpdateGenerateThumbnail;
+
+ Debug.Assert(_thumbnailPlayer == null);
+ #if UNITY_EDITOR_WIN
+ if (WindowsMediaPlayer.InitialisePlatform())
+ {
+ MediaPlayer.OptionsWindows options = new MediaPlayer.OptionsWindows();
+ _thumbnailPlayer = new WindowsMediaPlayer(options);
+ }
+ #elif UNITY_EDITOR_OSX
+ {
+ MediaPlayer.OptionsApple options = new MediaPlayer.OptionsApple(MediaPlayer.OptionsApple.TextureFormat.BGRA, MediaPlayer.OptionsApple.Flags.None);
+ _thumbnailPlayer = new PlatformMediaPlayer(options);
+ }
+ #endif
+
+ if (_thumbnailPlayer != null)
+ {
+ _targetIndex = 0;
+ BeginNextThumbnail(0);
+ }
+ else
+ {
+ EndGenerateThumbnails(false);
+ }
+ }
+
+ private void BeginNextThumbnail(int index)
+ {
+ EditorApplication.update -= UpdateGenerateThumbnail;
+ _mediaFrame = -1;
+ _timeoutTimer = 0f;
+
+ if (_thumbnailPlayer != null)
+ {
+ if (index < this.targets.Length)
+ {
+ _targetIndex = index;
+ MediaReference media = (this.targets[_targetIndex]) as MediaReference;
+ string path = media.MediaPath.GetResolvedFullPath();
+ bool openedMedia = false;
+ if (!string.IsNullOrEmpty(path))
+ {
+ if (_thumbnailPlayer.OpenMedia(path, 0, string.Empty, media.Hints, 0, false))
+ {
+ openedMedia = true;
+ EditorApplication.update += UpdateGenerateThumbnail;
+ }
+ }
+
+ if (!openedMedia)
+ {
+ // If the media failed to open, continue to the next one
+ BeginNextThumbnail(_targetIndex + 1);
+ }
+ }
+ else
+ {
+ EndGenerateThumbnails(true);
+ }
+ }
+ }
+
+ private void EndGenerateThumbnails(bool updateAssets)
+ {
+ EditorApplication.update -= UpdateGenerateThumbnail;
+ if (_thumbnailPlayer != null)
+ {
+ _thumbnailPlayer.CloseMedia();
+ _thumbnailPlayer.Dispose();
+ _thumbnailPlayer = null;
+ }
+ _mediaFrame = -1;
+
+ if (updateAssets)
+ {
+ // This forces the static preview to refresh
+ foreach (Object o in this.targets)
+ {
+ EditorUtility.SetDirty(o);
+ AssetPreview.GetAssetPreview(o);
+ }
+ AssetDatabase.SaveAssets();
+ }
+ }
+
+ private void UpdateGenerateThumbnail()
+ {
+ if (Time.renderedFrameCount == _lastFrame)
+ {
+ // In at least Unity 5.6 we have to force refresh of the UI otherwise the render thread doesn't run to update the textures
+ this.Repaint();
+ UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
+ return;
+ }
+
+ // Wait for a frame to be rendered
+ Debug.Assert(_thumbnailPlayer != null);
+ if (_thumbnailPlayer != null)
+ {
+ _timeoutTimer += Time.unscaledDeltaTime;
+ bool nextVideo = false;
+ _thumbnailPlayer.Update();
+ _thumbnailPlayer.Render();
+
+ if (_mediaFrame < 0 && _thumbnailPlayer.CanPlay())
+ {
+ _thumbnailPlayer.MuteAudio(true);
+ _thumbnailPlayer.Play();
+ _thumbnailPlayer.Seek(_thumbnailPlayer.GetDuration() * _thumbnailTime);
+ _mediaFrame = _thumbnailPlayer.GetTextureFrameCount();
+ }
+ if (_thumbnailPlayer.GetTexture() != null)
+ {
+ if (_mediaFrame != _thumbnailPlayer.GetTextureFrameCount() && _thumbnailPlayer.GetTextureFrameCount() > 3)
+ {
+ bool prevSRGB = GL.sRGBWrite;
+ GL.sRGBWrite = false;
+
+ RenderTexture rt2 = null;
+ // TODO: move this all into VideoRender as a resolve method
+ {
+ Material materialResolve = new Material(Shader.Find(VideoRender.Shader_Resolve));
+ VideoRender.SetupVerticalFlipMaterial(materialResolve, _thumbnailPlayer.RequiresVerticalFlip());
+ VideoRender.SetupAlphaPackedMaterial(materialResolve, _thumbnailPlayer.GetTextureAlphaPacking());
+ VideoRender.SetupGammaMaterial(materialResolve, !_thumbnailPlayer.PlayerSupportsLinearColorSpace());
+
+ RenderTexture prev = RenderTexture.active;
+
+ // Scale to fit and downsample
+ rt2 = RenderTexture.GetTemporary(128, 128, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB);
+
+ RenderTexture.active = rt2;
+ GL.Clear(false, true, new Color(0f, 0f, 0f, 0f));
+ ScaleMode scaleMode = ScaleMode.ScaleToFit;
+ if (_zoomToFill)
+ {
+ scaleMode = ScaleMode.ScaleAndCrop;
+ }
+ VideoRender.DrawTexture(new Rect(0f, 0f, 128f, 128f), _thumbnailPlayer.GetTexture(), scaleMode, _thumbnailPlayer.GetTextureAlphaPacking(), _thumbnailPlayer.GetTexturePixelAspectRatio(), materialResolve);
+ RenderTexture.active = prev;
+
+ Material.DestroyImmediate(materialResolve); materialResolve = null;
+ }
+
+ Texture2D readTexture = new Texture2D(128, 128, TextureFormat.RGBA32, true, false);
+ Helper.GetReadableTexture(rt2, readTexture);
+ MediaReference mediaRef = (this.targets[_targetIndex]) as MediaReference;
+ mediaRef.GeneratePreview(readTexture);
+ DestroyImmediate(readTexture); readTexture = null;
+
+ RenderTexture.ReleaseTemporary(rt2);
+
+ GL.sRGBWrite = prevSRGB;
+ nextVideo = true;
+ Debug.Log("Thumbnail Written");
+ }
+ }
+ if (!nextVideo)
+ {
+ // If there is an error or it times out, then skip this media
+ if (_timeoutTimer > 10f || _thumbnailPlayer.GetLastError() != ErrorCode.None)
+ {
+ MediaReference mediaRef = (this.targets[_targetIndex]) as MediaReference;
+ mediaRef.GeneratePreview(null);
+ nextVideo = true;
+ }
+ }
+
+ if (nextVideo)
+ {
+ BeginNextThumbnail(_targetIndex + 1);
+ }
+ }
+ _lastFrame = Time.renderedFrameCount;
+ }
+
+ public override bool HasPreviewGUI()
+ {
+ return true;
+ }
+
+ public override void OnPreviewGUI(Rect r, GUIStyle background)
+ {
+ Texture texture = RenderStaticPreview(string.Empty, null, 128, 128);
+ if (texture)
+ {
+ GUI.DrawTexture(r, texture, ScaleMode.ScaleToFit, true);
+ }
+ }
+
+ public override Texture2D RenderStaticPreview(string assetPath, Object[] subAssets, int width, int height)
+ {
+ MediaReference media = this.target as MediaReference;
+ if (media)
+ {
+ bool isLinear = false;
+ #if !UNITY_2018_1_OR_NEWER
+ // NOTE: These older versions of Unity don't handle sRGB in the editor correctly so a workaround is to create texture as linear
+ isLinear = true;
+ #endif
+ Texture2D result = new Texture2D(width, height, TextureFormat.RGBA32, true, isLinear);
+ if (!media.GetPreview(result))
+ {
+ DestroyImmediate(result); result = null;
+ }
+ return result;
+ }
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaReferenceEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaReferenceEditor.cs.meta
new file mode 100755
index 0000000..eb2cde1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/MediaReferenceEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 56fb02c4efc59ef4a8b6328867f1a0bc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PluginProcessor.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PluginProcessor.cs
new file mode 100755
index 0000000..8d22bf4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PluginProcessor.cs
@@ -0,0 +1,317 @@
+#if UNITY_2018_1_OR_NEWER || (UNITY_2017_4_OR_NEWER && !UNITY_2017_4_0 && !UNITY_2017_4_1 && !UNITY_2017_4_2 && !UNITY_2017_4_3 && !UNITY_2017_4_4 && !UNITY_2017_4_5 && !UNITY_2017_4_6 && !UNITY_2017_4_7 && !UNITY_2017_4_8 && !UNITY_2017_4_9 && !UNITY_2017_4_10 && !UNITY_2017_4_11 && !UNITY_2017_4_12 && !UNITY_2017_4_13 && !UNITY_2017_4_14 && !UNITY_2017_4_15 && !UNITY_2017_4_15)
+ // Unity added Android ARM64 support in 2018.1, and backported to 2017.4.16
+ #define AVPROVIDEO_UNITY_ANDROID_ARM64_SUPPORT
+#endif
+#if !UNITY_2019_3_OR_NEWER || UNITY_2021_2_OR_NEWER || (UNITY_2020_3_OR_NEWER && !UNITY_2020_3_0 && !UNITY_2020_3_1 && !UNITY_2020_3_2 && !UNITY_2020_3_3 && !UNITY_2020_3_4 && !UNITY_2020_3_5 && !UNITY_2020_3_6 && !UNITY_2020_3_7 && !UNITY_2020_3_8 && !UNITY_2020_3_9 && !UNITY_2020_3_10 && !UNITY_2020_3_11 && !UNITY_2020_3_12 && !UNITY_2020_3_13 && !UNITY_2020_3_14 && !UNITY_2020_3_15 && !UNITY_2020_3_16) || (UNITY_2019_4_OR_NEWER && !UNITY_2019_4_0 && !UNITY_2019_4_1 && !UNITY_2019_4_2 && !UNITY_2019_4_3 && !UNITY_2019_4_4 && !UNITY_2019_4_5 && !UNITY_2019_4_6 && !UNITY_2019_4_7 && !UNITY_2019_4_8 && !UNITY_2019_4_9 && !UNITY_2019_4_10 && !UNITY_2019_4_11 && !UNITY_2019_4_12 && !UNITY_2019_4_13 && !UNITY_2019_4_14 && !UNITY_2019_4_15 && !UNITY_2019_4_16 && !UNITY_2019_4_17 && !UNITY_2019_4_18 && !UNITY_2019_4_19 && !UNITY_2019_4_20 && !UNITY_2019_4_21 && !UNITY_2019_4_22 && !UNITY_2019_4_23 && !UNITY_2019_4_24 && !UNITY_2019_4_25 && !UNITY_2019_4_26 && !UNITY_2019_4_27 && !UNITY_2019_4_28 && !UNITY_2019_4_29 && !UNITY_2019_4_30)
+ // Unity dropped Android x86 support in 2019, but then added it back in 2021.2.0 and backported to 2020.3.17 and 2019.4.31
+ #define AVPROVIDEO_UNITY_ANDROID_X86_SUPPORT
+#endif
+#if UNITY_2021_2_OR_NEWER || (UNITY_2020_3_OR_NEWER && !UNITY_2020_3_0 && !UNITY_2020_3_1 && !UNITY_2020_3_2 && !UNITY_2020_3_3 && !UNITY_2020_3_4 && !UNITY_2020_3_5 && !UNITY_2020_3_6 && !UNITY_2020_3_7 && !UNITY_2020_3_8 && !UNITY_2020_3_9 && !UNITY_2020_3_10 && !UNITY_2020_3_11 && !UNITY_2020_3_12 && !UNITY_2020_3_13 && !UNITY_2020_3_14 && !UNITY_2020_3_15 && !UNITY_2020_3_16) || (UNITY_2019_4_OR_NEWER && !UNITY_2019_4_0 && !UNITY_2019_4_1 && !UNITY_2019_4_2 && !UNITY_2019_4_3 && !UNITY_2019_4_4 && !UNITY_2019_4_5 && !UNITY_2019_4_6 && !UNITY_2019_4_7 && !UNITY_2019_4_8 && !UNITY_2019_4_9 && !UNITY_2019_4_10 && !UNITY_2019_4_11 && !UNITY_2019_4_12 && !UNITY_2019_4_13 && !UNITY_2019_4_14 && !UNITY_2019_4_15 && !UNITY_2019_4_16 && !UNITY_2019_4_17 && !UNITY_2019_4_18 && !UNITY_2019_4_19 && !UNITY_2019_4_20 && !UNITY_2019_4_21 && !UNITY_2019_4_22 && !UNITY_2019_4_23 && !UNITY_2019_4_24 && !UNITY_2019_4_25 && !UNITY_2019_4_26 && !UNITY_2019_4_27 && !UNITY_2019_4_28 && !UNITY_2019_4_29 && !UNITY_2019_4_30)
+ // Unity added Android x86_64 support in 2021.2.0 and backported to 2020.3.17 and 2019.4.31
+ #define AVPROVIDEO_UNITY_ANDROID_X8664_SUPPORT
+#endif
+#if UNITY_2019_1_OR_NEWER
+ #define AVPROVIDEO_UNITY_UWP_ARM64_SUPPORT
+#endif
+#if UNITY_2018_1_OR_NEWER
+ #define AVPROVIDEO_UNITY_BUILDWITHREPORT_SUPPORT
+#endif
+
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Build;
+#if AVPROVIDEO_UNITY_BUILDWITHREPORT_SUPPORT
+using UnityEditor.Build.Reporting;
+#endif
+using System.Collections.Generic;
+using System.IO;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Some versions of Unity do not support specific CPU architectures for plugin files
+ /// so this Build Preprocessor checks the plugin files for those and either disables
+ /// them if their arch is not supported, or assigns the correct arch and enables them
+ ///
+ public class PluginProcessor :
+ #if AVPROVIDEO_UNITY_BUILDWITHREPORT_SUPPORT
+ IPreprocessBuildWithReport
+ #else
+ IPreprocessBuild
+ #endif
+ {
+ internal class CpuArchitecture
+ {
+ internal CpuArchitecture(string code, bool isSupportedByThisUnityVersion)
+ {
+ _code = code;
+ _isSupportedByThisUnityVersion = isSupportedByThisUnityVersion;
+ }
+ private string _code;
+ private bool _isSupportedByThisUnityVersion;
+
+ internal string Code()
+ {
+ return _code;
+ }
+
+ internal bool IsSupportedByThisUnityVersion()
+ {
+ return _isSupportedByThisUnityVersion;
+ }
+ }
+
+ internal class PluginFile
+ {
+ internal PluginFile(BuildTarget buildTarget, string relativeFilePath, bool supportsEditor, CpuArchitecture cpuArchitecture)
+ {
+ _buildTarget = buildTarget;
+ _relativeFilePath = relativeFilePath;
+ _cpuArchitecture = cpuArchitecture;
+ _supportsEditor = supportsEditor;
+ }
+
+ internal bool IsBuildTarget(BuildTarget buildTarget)
+ {
+ return (_buildTarget == buildTarget);
+ }
+
+ internal BuildTarget BuildTarget()
+ {
+ return _buildTarget;
+ }
+
+ internal bool IsForFile(string path)
+ {
+ return path.Replace("\\", "/").Contains(_relativeFilePath);
+ }
+
+ internal bool IsSupportedByThisUnityVersion()
+ {
+ return _cpuArchitecture.IsSupportedByThisUnityVersion();
+ }
+
+ internal string CpuArchitectureCode()
+ {
+ return _cpuArchitecture.Code();
+ }
+
+ internal bool SupportsEditor()
+ {
+ return _supportsEditor;
+ }
+
+ private BuildTarget _buildTarget;
+ private string _relativeFilePath;
+ private CpuArchitecture _cpuArchitecture;
+ private bool _supportsEditor;
+ }
+
+ private static List _pluginFiles = new List(32);
+
+ internal static void AddPluginFiles(BuildTarget buildTarget, string[] filenames, string folderPrefix, bool supportsEditor, CpuArchitecture cpuArchitecture)
+ {
+ foreach (string filename in filenames)
+ {
+ _pluginFiles.Add(new PluginFile(buildTarget, folderPrefix + filename, supportsEditor, cpuArchitecture));
+ }
+ }
+
+ internal static void AddPlugins_Android()
+ {
+ #if AVPROVIDEO_UNITY_ANDROID_ARM64_SUPPORT
+ const bool IsAndroidArm64Supported = true;
+ #else
+ const bool IsAndroidArm64Supported = false;
+ #endif
+ #if AVPROVIDEO_UNITY_ANDROID_X86_SUPPORT
+ const bool IsAndroidX86Supported = true;
+ #else
+ const bool IsAndroidX86Supported = false;
+ #endif
+ #if AVPROVIDEO_UNITY_ANDROID_X8664_SUPPORT
+ const bool IsAndroidX8664Supported = true;
+ #else
+ const bool IsAndroidX8664Supported = false;
+ #endif
+ string[] filenames = {
+ "libAudio360.so",
+ "libAudio360-JNI.so",
+ "libAVProVideo2Native.so",
+ "libopus.so",
+ "libopusJNI.so",
+ "libresample-rh.so",
+ "libsamplerate-android.so",
+ "libssrc-android.so",
+ };
+ BuildTarget target = BuildTarget.Android;
+ AddPluginFiles(target, filenames, "Android/libs/armeabi-v7a/", false, new CpuArchitecture("ARMv7", true));
+ AddPluginFiles(target, filenames, "Android/libs/arm64-v8a/", false, new CpuArchitecture("ARM64", IsAndroidArm64Supported));
+ AddPluginFiles(target, filenames, "Android/libs/x86/", false, new CpuArchitecture("X86", IsAndroidX86Supported));
+ AddPluginFiles(target, filenames, "Android/libs/x86_64/", false, new CpuArchitecture("X86_64", IsAndroidX8664Supported));
+ }
+
+ internal static void AddPlugins_UWP()
+ {
+ #if AVPROVIDEO_UNITY_UWP_ARM64_SUPPORT
+ const bool IsUwpArm64Supported = true;
+ #else
+ const bool IsUwpArm64Supported = false;
+ #endif
+
+ string[] filenames = {
+ "Audio360.dll",
+ "AVProVideo.dll",
+ "AVProVideoWinRT.dll",
+ };
+ BuildTarget target = BuildTarget.WSAPlayer;
+ AddPluginFiles(target, filenames, "WSA/UWP/ARM/", false, new CpuArchitecture("ARM", true));
+ AddPluginFiles(target, filenames, "WSA/UWP/ARM64/", false, new CpuArchitecture("ARM64", IsUwpArm64Supported));
+ AddPluginFiles(target, filenames, "WSA/UWP/x86/", false, new CpuArchitecture("X86", true));
+ AddPluginFiles(target, filenames, "WSA/UWP/x86_64/", false, new CpuArchitecture("X64", true));
+ }
+
+ private static void BuildPluginFileList()
+ {
+ _pluginFiles.Clear();
+ AddPlugins_Android();
+ AddPlugins_UWP();
+ }
+
+ private class SFileToDelete
+ {
+ public SFileToDelete(string fn)
+ {
+ filename = fn;
+ fullPath = "";
+ found = false;
+ }
+
+ public string filename;
+ public string fullPath;
+ public bool found;
+ };
+
+ private static void RemoveLegacyPluginFiles()
+ {
+ List aFilesToDelete = new List();
+
+#if (UNITY_EDITOR && UNITY_ANDROID)
+ aFilesToDelete.Add( new SFileToDelete( "Android/guava-27.1-android.jar" ) );
+ aFilesToDelete.Add( new SFileToDelete( "Android/libs/arm64-v8a/libc++_shared.so" ) );
+ aFilesToDelete.Add( new SFileToDelete( "Android/libs/armeabi-v7a/libc++_shared.so" ) );
+ aFilesToDelete.Add( new SFileToDelete( "Android/libs/x86/libc++_shared.so" ) );
+ aFilesToDelete.Add( new SFileToDelete( "Android/libs/x86_64/libc++_shared.so" ) );
+#endif
+
+ if( aFilesToDelete.Count > 0 )
+ {
+ int iNumFoundFilesToDelete = 0;
+ string aFilesToDeleteString = "";
+
+ PluginImporter[] importers = PluginImporter.GetAllImporters();
+ foreach (PluginImporter pi in importers)
+ {
+ foreach( SFileToDelete fileToDelete in aFilesToDelete )
+ {
+ string pluginFilename = pi.assetPath;
+ pluginFilename.Replace("\\", "/");
+ if( pluginFilename.Contains( fileToDelete.filename ) )
+ {
+ fileToDelete.fullPath = pi.assetPath;
+ fileToDelete.found = true;
+
+ if( iNumFoundFilesToDelete > 0 )
+ {
+ aFilesToDeleteString += "\n";
+ }
+ aFilesToDeleteString += pi.assetPath;
+ ++iNumFoundFilesToDelete;
+ }
+ }
+ }
+
+ if( iNumFoundFilesToDelete > 0 )
+ {
+ string message = ( iNumFoundFilesToDelete == 1 ) ? "A legacy AVPro Video plugin file has been found that requires deleting in order to build." : "Legacy AVPro Video plugin files have been found that require deleting in order to build.";
+ Debug.Log("[AVProVideo] " + message + " Files: " + aFilesToDeleteString );
+ if ( EditorUtility.DisplayDialog( "AVPro Video Legacy File", message + "\n\nDelete the following files?\n\n" + aFilesToDeleteString, "Delete", "Ignore" ) )
+ {
+ foreach( SFileToDelete fileToDelete in aFilesToDelete )
+ {
+ bool bDeleted = AssetDatabase.DeleteAsset( fileToDelete.fullPath );
+ if( bDeleted )
+ {
+ Debug.Log( "[AVProVideo] Deleting " + fileToDelete.fullPath );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public int callbackOrder { get { return 0; } }
+
+#if AVPROVIDEO_UNITY_BUILDWITHREPORT_SUPPORT
+ public void OnPreprocessBuild(BuildReport report)
+ {
+ RemoveLegacyPluginFiles();
+
+ BuildPluginFileList();
+ CheckNativePlugins(report.summary.platform);
+ }
+#else
+ public void OnPreprocessBuild(BuildTarget target, string path)
+ {
+ RemoveLegacyPluginFiles();
+
+ BuildPluginFileList();
+ CheckNativePlugins(target);
+ }
+#endif
+
+ internal static void CheckNativePlugins(BuildTarget target)
+ {
+ PluginImporter[] importers = PluginImporter.GetAllImporters();
+ foreach (PluginImporter pi in importers)
+ {
+ // Currently we're only interested in native plugins
+ if (!pi.isNativePlugin) continue;
+
+ // Skip plugins that aren't in the AVProVideo path
+ // NOTE: This is commented out for now to allow the case where users have moved the plugin files to another folder.
+ // Eventually might need a more robust method, perhaps using GUIDS
+ //if (!pi.assetPath.Contains("AVProVideo")) continue;
+
+ foreach (PluginFile pluginFile in _pluginFiles)
+ {
+ if (pluginFile.IsBuildTarget(target) &&
+ pluginFile.IsForFile(pi.assetPath))
+ {
+ pi.SetCompatibleWithAnyPlatform(false);
+ if (pluginFile.IsSupportedByThisUnityVersion())
+ {
+ Debug.Log("[AVProVideo] Enabling " + pluginFile.CpuArchitectureCode() + " " + pi.assetPath);
+ pi.SetCompatibleWithEditor(pluginFile.SupportsEditor());
+ pi.SetCompatibleWithPlatform(pluginFile.BuildTarget(), true);
+ pi.SetPlatformData(pluginFile.BuildTarget(), "CPU", pluginFile.CpuArchitectureCode());
+ }
+ else
+ {
+ pi.SetCompatibleWithEditor(false);
+ pi.SetCompatibleWithPlatform(pluginFile.BuildTarget(), false);
+ pi.SetPlatformData(pluginFile.BuildTarget(), "CPU", "");
+ Debug.Log("[AVProVideo] Disabling " + pluginFile.CpuArchitectureCode() + " " + pi.assetPath);
+ }
+ pi.SaveAndReimport();
+ break;
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PluginProcessor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PluginProcessor.cs.meta
new file mode 100755
index 0000000..87212a2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PluginProcessor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e2b91117f576bb5438faa22e38d811b3
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_Android.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_Android.cs
new file mode 100755
index 0000000..e0c30cf
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_Android.cs
@@ -0,0 +1,70 @@
+#if UNITY_ANDROID
+
+using UnityEngine;
+using UnityEditor.Android;
+using System.IO;
+using System.Text;
+
+//-----------------------------------------------------------------------------
+// Copyright 2012-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ public class PostProcessBuild_Android : IPostGenerateGradleAndroidProject
+ {
+ public int callbackOrder { get { return 1; } }
+
+ public void OnPostGenerateGradleAndroidProject( string path )
+ {
+ GradleProperty( path );
+ }
+
+ private void GradleProperty( string path )
+ {
+#if UNITY_2020_1_OR_NEWER || UNITY_2020_OR_NEWER
+ // When using Unity 2020.1 and above it has been seen that the build process overly optimises which causes issues in the ExoPlayer library.
+ // To overcome this issue, we need to add 'android.enableDexingArtifactTransform=false' to the gradle.properties.
+ // Note that this can be done by the developer at project level already.
+
+ Debug.Log("[AVProVideo] Post-processing Android project: patching gradle.properties");
+
+ StringBuilder stringBuilder = new StringBuilder();
+
+ // Path to gradle.properties
+ string filePath = Path.Combine( path, "..", "gradle.properties" );
+
+ if( File.Exists( filePath ) )
+ {
+ // Load in all the lines in the file
+ string[] allLines = File.ReadAllLines( filePath );
+
+ foreach( string line in allLines )
+ {
+ if( line.Length > 0 )
+ {
+ // Add everything except enableDexingArtifactTransform
+ if ( !line.Contains( "android.enableDexingArtifactTransform" ) )
+ {
+ stringBuilder.AppendLine( line );
+ }
+ }
+ }
+ }
+
+#if UNITY_6000_0_OR_NEWER
+ // Add in line to set useFullClasspathForDexingTransform to true
+ stringBuilder.AppendLine( "android.useFullClasspathForDexingTransform=true" );
+#else
+ // Add in line to set enableDexingArtifactTransform to false
+ stringBuilder.AppendLine( "android.enableDexingArtifactTransform=false" );
+#endif
+
+ // Write out the amended file
+ File.WriteAllText( filePath, stringBuilder.ToString() );
+#endif
+ }
+ }
+}
+
+#endif // UNITY_ANDROID
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_Android.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_Android.cs.meta
new file mode 100755
index 0000000..478ed15
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_Android.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 532847372d6add8498ce0da18f7a619e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_iOS.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_iOS.cs
new file mode 100755
index 0000000..d552684
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_iOS.cs
@@ -0,0 +1,408 @@
+//-----------------------------------------------------------------------------
+// Copyright 2012-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+#if (UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS) && UNITY_2017_1_OR_NEWER
+
+// Unity versions where xcframework support was added
+// 2023.2.18f1
+// 2022.3.23f1
+// 2021.3.37f1
+
+// There has to be a better way...
+#if UNITY_2023_2_OR_NEWER && !(UNITY_2023_2_0 || UNITY_2023_2_1 || UNITY_2023_2_2 || UNITY_2023_2_3 || UNITY_2023_2_4 || UNITY_2023_2_5 || UNITY_2023_2_6 || UNITY_2023_2_7 || UNITY_2023_2_8 || UNITY_2023_2_9 || UNITY_2023_2_10 || UNITY_2023_2_11 || UNITY_2023_2_12 || UNITY_2023_2_13 || UNITY_2023_2_14 || UNITY_2023_2_15 || UNITY_2023_2_16 || UNITY_2023_2_17)
+#define AVPROVIDEO_UNITY_SUPPORTS_XCFRAMEWORKS
+#elif UNITY_2023_1_OR_NEWER
+#define AVPROVIDEO_UNITY_DOES_NOT_SUPPORT_XCFRAMEWORKS
+#elif UNITY_2022_3_OR_NEWER && !(UNITY_2022_3_0 || UNITY_2022_3_1 || UNITY_2022_3_2 || UNITY_2022_3_3 || UNITY_2022_3_4 || UNITY_2022_3_5 || UNITY_2022_3_6 || UNITY_2022_3_7 || UNITY_2022_3_8 || UNITY_2022_3_9 || UNITY_2022_3_10 || UNITY_2022_3_11 || UNITY_2022_3_12 || UNITY_2022_3_13 || UNITY_2022_3_14 || UNITY_2022_3_15 || UNITY_2022_3_16 || UNITY_2022_3_17 || UNITY_2022_3_18 || UNITY_2022_3_19 || UNITY_2022_3_20 || UNITY_2022_3_21 || UNITY_2022_3_22)
+#define AVPROVIDEO_UNITY_SUPPORTS_XCFRAMEWORKS
+#elif UNITY_2022_1_OR_NEWER
+#define AVPROVIDEO_UNITY_DOES_NOT_SUPPORT_XCFRAMEWORKS
+#elif UNITY_2021_3_OR_NEWER && !(UNITY_2021_3_0 || UNITY_2021_3_1 || UNITY_2021_3_2 || UNITY_2021_3_3 || UNITY_2021_3_4 || UNITY_2021_3_5 || UNITY_2021_3_6 || UNITY_2021_3_7 || UNITY_2021_3_8 || UNITY_2021_3_9 || UNITY_2021_3_10 || UNITY_2021_3_11 || UNITY_2021_3_12 || UNITY_2021_3_13 || UNITY_2021_3_14 || UNITY_2021_3_15 || UNITY_2021_3_16 || UNITY_2021_3_17 || UNITY_2021_3_18 || UNITY_2021_3_19 || UNITY_2021_3_20 || UNITY_2021_3_21 || UNITY_2021_3_22 || UNITY_2021_3_23 || UNITY_2021_3_24 || UNITY_2021_3_25 || UNITY_2021_3_26 || UNITY_2021_3_27 || UNITY_2021_3_28 || UNITY_2021_3_29 || UNITY_2021_3_30 || UNITY_2021_3_31 || UNITY_2021_3_32 || UNITY_2021_3_33 || UNITY_2021_3_34 || UNITY_2021_3_35 || UNITY_2021_3_36)
+#define AVPROVIDEO_UNITY_SUPPORTS_XCFRAMEWORKS
+#else
+#define AVPROVIDEO_UNITY_DOES_NOT_SUPPORT_XCFRAMEWORKS
+#endif
+
+#if UNITY_2022_3 || UNITY_6000_0_OR_NEWER
+#define UNITY_SUPPORTS_VISIONOS
+#endif
+
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Callbacks;
+using UnityEditor.iOS.Xcode;
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+
+ public class PostProcessBuild_iOS
+ {
+ const string AVProVideoPluginName = "AVProVideo.xcframework";
+
+ const string AVProVideoBootstrap = "extern void AVPPluginUnityRegisterRenderingPlugin(void*);\nvoid AVPPluginBootstrap(void) {\n\tAVPPluginUnityRegisterRenderingPlugin(UnityRegisterRenderingPluginV5);\n}\n";
+ const string AVProVideoForceSwift = "import Foundation\n";
+
+ private class Platform
+ {
+ public BuildTarget target { get; }
+ public string name { get; }
+ public string guid { get; }
+
+ public static Platform GetPlatformForTarget(BuildTarget target)
+ {
+ switch (target)
+ {
+ case BuildTarget.iOS:
+ return new Platform(BuildTarget.iOS, "iOS", "a7ee58e0e533849d3a37458bc7df6df7");
+
+ case BuildTarget.tvOS:
+ return new Platform(BuildTarget.tvOS, "tvOS", "f83f62879d8fb417cb18d0547c9bfd02");
+#if UNITY_SUPPORTS_VISIONOS
+ case BuildTarget.VisionOS:
+ return new Platform(BuildTarget.VisionOS, "visionOS", "fe151797423674af0941aae11c872b90");
+#endif
+ default:
+ return null;
+ }
+ }
+
+ private Platform(BuildTarget target, string name, string guid)
+ {
+ this.target = target;
+ this.name = name;
+ this.guid = guid;
+ }
+ }
+
+ ///
+ /// Get the plugin path for the platform specified
+ ///
+ /// The platform
+ /// The plugin's file name
+ /// The path of the plugin within Unity's assets folder
+ private static string PluginPathForPlatform(Platform platform, string pluginName)
+ {
+ // See if we can find the plugin by GUID
+ string pluginPath = AssetDatabase.GUIDToAssetPath(platform.guid);
+
+ // If not, try and find it by name
+ if (pluginPath.Length == 0)
+ {
+ Debug.LogWarningFormat("[AVProVideo] Failed to find plugin by GUID, will attempt to find it by name.");
+ string[] guids = AssetDatabase.FindAssets(pluginName);
+ if (guids != null && guids.Length > 0)
+ {
+ foreach (string guid in guids)
+ {
+ string assetPath = AssetDatabase.GUIDToAssetPath(guid);
+ if (assetPath.Contains(platform.name))
+ {
+ pluginPath = assetPath;
+ break;
+ }
+ }
+ }
+ }
+
+ if (pluginPath.Length > 0)
+ {
+ Debug.LogFormat("[AVProVideo] Found plugin at '{0}'", pluginPath);
+ }
+
+ return pluginPath;
+ }
+
+ ///
+ /// Gets the target guid if Unity's framework target from the project provided
+ ///
+ /// The project to get the guid from
+ ///
+ private static string GetUnityFrameworkTargetGuid(PBXProject project)
+ {
+ return project.GetUnityFrameworkTargetGuid();
+ }
+
+ ///
+ /// Copies a directory.
+ ///
+ ///
+ /// Intended for use outside of Unity's project structure, this will skip meta files when copying.
+ ///
+ /// The directory info of the directory to copy
+ /// The directory info of the destination directory
+ private static void CopyDirectory(DirectoryInfo srcDirInfo, DirectoryInfo dstDirInfo)
+ {
+ // Make sure the target directory exists
+ Directory.CreateDirectory(dstDirInfo.FullName);
+
+ // Copy over the sub-directories
+ foreach (DirectoryInfo subSrcDirInfo in srcDirInfo.GetDirectories())
+ {
+ DirectoryInfo subDstDirInfo = dstDirInfo.CreateSubdirectory(subSrcDirInfo.Name);
+ CopyDirectory(subSrcDirInfo, subDstDirInfo);
+ }
+
+ // Copy over the files
+ foreach (FileInfo srcFileInfo in srcDirInfo.GetFiles())
+ {
+ if (srcFileInfo.Extension == ".meta")
+ {
+ // Do not want to copy Unity's meta files into the built project
+ continue;
+ }
+ else
+ if (srcFileInfo.Name == ".DS_Store")
+ {
+ // Do not want to copy .DS_Store files into the built project
+ continue;
+ }
+ else
+ {
+ srcFileInfo.CopyTo(Path.Combine(dstDirInfo.FullName, srcFileInfo.Name), true);
+ }
+ }
+ }
+
+ ///
+ /// Copies a directory.
+ ///
+ ///
+ /// Intended for use outside of Unity's project structure, this will skip meta files when copying.
+ ///
+ /// The path of the directory to copy
+ /// The path where the directory will be copied to
+ private static void CopyDirectory(string src, string dst)
+ {
+ CopyDirectory(new DirectoryInfo(src), new DirectoryInfo(dst));
+ }
+
+ ///
+ /// Tests the target build platform to see if it's supported by this script
+ ///
+ /// The target build platform
+ /// true if the build target is supported, false otherwise
+ private static bool IsBuildTargetSupported(BuildTarget target)
+ {
+ switch (target)
+ {
+ case BuildTarget.iOS:
+ case BuildTarget.tvOS:
+#if UNITY_SUPPORTS_VISIONOS
+ case BuildTarget.VisionOS:
+#endif
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ ///
+ /// Gets the Xcode project name for the target specified.
+ ///
+ /// The build target
+ /// The Xcode project name
+ private static string GetXcodeProjectNameForBuildTarget(BuildTarget target)
+ {
+ switch (target)
+ {
+ case BuildTarget.iOS:
+ case BuildTarget.tvOS:
+ return "Unity-iPhone.xcodeproj";
+#if UNITY_SUPPORTS_VISIONOS
+ case BuildTarget.VisionOS:
+ return "Unity-VisionOS.xcodeproj";
+#endif
+ default:
+ Debug.LogError($"[AVProVideo] GetXcodeProjectNameForBuildTarget - unrecognised build target: {target}");
+ return null;
+ }
+ }
+
+ // Converts the Unity asset path to the expected path in the built Xcode project.
+ private static string ConvertPluginAssetPathToXcodeProjectPath(string pluginPath, string subFolder)
+ {
+
+ List components = new List(pluginPath.Split(new char[] { '/' }));
+#if UNITY_TVOS
+ // Unity just copies the xcframework into the frameworks folder
+ string frameworkPath = Path.Combine(subFolder, components[^1]);
+#else
+ #if UNITY_VISIONOS
+ // For reasons unknown unity puts everything under an ARM64 folder on visionOS
+ components.Insert(0, "ARM64");
+ components.Insert(0, subFolder);
+ #else
+ components[0] = subFolder;
+ #endif
+ #if UNITY_2019_1_OR_NEWER
+ string frameworkPath = string.Join("/", components);
+ #else
+ string frameworkPath = string.Join("/", components.ToArray());
+ #endif
+#endif
+ return frameworkPath;
+ }
+
+ //
+ private static void StripMetaFilesFromDirectory(DirectoryInfo dirInfo)
+ {
+ // Remove any meta files
+ foreach (FileInfo srcFileInfo in dirInfo.GetFiles())
+ {
+ if (srcFileInfo.Extension == ".meta")
+ {
+ Debug.Log($"[AVProVideo] Deleting {srcFileInfo.FullName}");
+ File.Delete(srcFileInfo.FullName);
+ }
+ else
+ if (srcFileInfo.Name == ".DS_Store")
+ {
+ Debug.Log($"[AVProVideo] Deleting {srcFileInfo.FullName}");
+ File.Delete(srcFileInfo.FullName);
+ }
+ }
+
+ // Do the same for any sub-directories
+ foreach (DirectoryInfo subDirInfo in dirInfo.GetDirectories("*"))
+ {
+ StripMetaFilesFromDirectory(subDirInfo);
+ }
+ }
+
+ ///
+ /// Post-process the generated Xcode project to add the plugin and any build configuration required.
+ ///
+ /// The target build platform
+ /// The path to the built project
+ [PostProcessBuild]
+ public static void ModifyProject(BuildTarget target, string path)
+ {
+ if (!IsBuildTargetSupported(target))
+ {
+ // Nothing to be done
+ return;
+ }
+
+ Debug.Log("[AVProVideo] Post-processing generated Xcode project...");
+ Platform platform = Platform.GetPlatformForTarget(target);
+ if (platform == null)
+ {
+ Debug.LogWarningFormat("[AVProVideo] Unknown build target: {0}, stopping", target);
+ return;
+ }
+
+ // Create the path to the generated Xcode project file
+ string xcodeProjectName = GetXcodeProjectNameForBuildTarget(target);
+ if (xcodeProjectName == null)
+ {
+ return;
+ }
+
+ string xcodeProjectPath = Path.Combine(path, xcodeProjectName, "project.pbxproj");
+ Debug.Log($"[AVProVideo] Opening Xcode project at: {path}");
+
+ // Open the project
+ PBXProject project = new PBXProject();
+ project.ReadFromFile(xcodeProjectPath);
+
+ // Attempt to find the plugin path
+ string pluginPath = PluginPathForPlatform(platform, AVProVideoPluginName);
+ if (pluginPath.Length == 0)
+ {
+ Debug.LogErrorFormat("[AVProVideo] Failed to find '{0}' for '{1}' in the Unity project. Something is horribly wrong, please reinstall AVPro Video.", AVProVideoPluginName, platform);
+ return;
+ }
+
+ Debug.Log($"[AVProVideo] Plugin path: {pluginPath}");
+
+ string destPluginPath = Path.Combine("Libraries", "AVProVideo");
+ Directory.CreateDirectory(Path.Combine(path, destPluginPath));
+
+ // Get the Unity framework target GUID
+ string unityFrameworkTargetGuid = GetUnityFrameworkTargetGuid(project);
+
+#if AVPROVIDEO_UNITY_DOES_NOT_SUPPORT_XCFRAMEWORKS
+ // Get the path to the xcframework
+ string xcframeworkPath = Path.Combine(destPluginPath, AVProVideoPluginName);
+
+ // Copy over the xcframework to the generated xcode project
+ Debug.Log($"[AVProVideo] Copying AVProVideo.xcframework into the Xcode project at {destPluginPath}");
+ CopyDirectory(pluginPath, Path.Combine(path, xcframeworkPath));
+
+ if (!project.ContainsFileByProjectPath(xcframeworkPath))
+ {
+ Debug.Log("[AVProVideo] Adding AVProVideo.xcframework to the UnityFramework target");
+ // Add the xcframework and sundry files to the project
+ string xcframeworkGuid = project.AddFile(xcframeworkPath, xcframeworkPath);
+ // Get the frameworks build phase and add the xcframework to it
+ string frameworksBuildPhaseForUnityFrameworkTarget = project.GetFrameworksBuildPhaseByTarget(unityFrameworkTargetGuid);
+ project.AddFileToBuildSection(unityFrameworkTargetGuid, frameworksBuildPhaseForUnityFrameworkTarget, xcframeworkGuid);
+ }
+#else
+ // If we've upgraded Unity to a version that supports xcframeworks we need to purge the meta files from the plugin
+ // string xcframeworkPath = ConvertPluginAssetPathToXcodeProjectPath(pluginPath, "Frameworks");
+
+ string xcframeworkPath = string.Empty;
+
+ IReadOnlyList paths = project.GetRealPathsOfAllFiles(PBXSourceTree.Source);
+ foreach (string p in paths)
+ {
+ if (p.EndsWith(AVProVideoPluginName))
+ {
+ xcframeworkPath = p;
+ break;
+ }
+ }
+
+ if (!string.IsNullOrEmpty(xcframeworkPath))
+ {
+ string dest_xcframeworkPath = Path.Combine(path, xcframeworkPath);
+ Debug.Log($"[AVProVideo] xcframework path is: {dest_xcframeworkPath}");
+ StripMetaFilesFromDirectory(new DirectoryInfo(dest_xcframeworkPath));
+ }
+
+ // string dest_xcframeworkPath = Path.Combine(path, xcframeworkPath);
+ // if (!project.ContainsFileByProjectPath(xcframeworkPath))
+ // {
+ // Debug.Log("[AVProVideo] Stripping meta files from AVProVideo.xcframework");
+ // StripMetaFilesFromDirectory(new DirectoryInfo(dest_xcframeworkPath));
+ // }
+ else
+ {
+ Debug.LogError($"[AVProVideo] Failed to find AVProPlugin.xcframework in the built project");
+ }
+#endif
+
+ Debug.Log("[AVProVideo] Writing AVProVideoBootstrap.m to the UnityFramework target");
+ string bootstrapPath = Path.Combine(destPluginPath, "AVProVideoBootstrap.m");
+ File.WriteAllText(Path.Combine(path, bootstrapPath), AVProVideoBootstrap);
+ string bootstrapGuid = project.AddFile(bootstrapPath, bootstrapPath);
+ project.AddFileToBuild(unityFrameworkTargetGuid, bootstrapGuid);
+
+ string forceSwiftPath = Path.Combine(destPluginPath, "AVProVideoForceSwift.swift");
+ Debug.Log("[AVProVideo] Writing AVProVideoForceSwift.swift to the UnityFramework target");
+ File.WriteAllText(Path.Combine(path, forceSwiftPath), AVProVideoForceSwift);
+ string forceSwiftGuid = project.AddFile(forceSwiftPath, forceSwiftPath);
+ project.AddFileToBuild(unityFrameworkTargetGuid, forceSwiftGuid);
+
+ // Make sure the swift version is set to 5.0
+ string swiftVersionStr = project.GetBuildPropertyForAnyConfig(unityFrameworkTargetGuid, "SWIFT_VERSION");
+ decimal swiftVersion;
+ if (!Decimal.TryParse(swiftVersionStr, out swiftVersion) || (swiftVersion < 5))
+ {
+ Debug.Log("[AVProVideo] setting SWIFT_VERSION to 5.0 for the UnityFramework target");
+ project.SetBuildProperty(unityFrameworkTargetGuid, "SWIFT_VERSION", "5.0");
+ }
+
+ // Done
+ project.WriteToFile(xcodeProjectPath);
+ Debug.Log("[AVProVideo] Finished modifying Xcode project");
+ }
+ }
+}
+
+#endif
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_iOS.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_iOS.cs.meta
new file mode 100755
index 0000000..6afba61
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_iOS.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 65f3d7a146fd284418d5a70fd677b7b2
+timeCreated: 1591790256
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_macOS.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_macOS.cs
new file mode 100755
index 0000000..56d0831
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_macOS.cs
@@ -0,0 +1,170 @@
+#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
+
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Callbacks;
+
+//-----------------------------------------------------------------------------
+// Copyright 2012-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ public class PBXProjectHandlerException : System.Exception
+ {
+ public PBXProjectHandlerException(string message)
+ : base(message)
+ {
+
+ }
+ }
+
+ public class PBXProjectHandler
+ {
+ private static System.Type _PBXProjectType;
+ private static System.Type PBXProjectType
+ {
+ get
+ {
+ if (_PBXProjectType == null)
+ {
+ _PBXProjectType = System.Type.GetType("UnityEditor.iOS.Xcode.PBXProject, UnityEditor.iOS.Extensions.Xcode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
+ if (_PBXProjectType == null)
+ {
+ throw new PBXProjectHandlerException("Failed to get type \"PBXProject\"");
+ }
+ }
+ return _PBXProjectType;
+ }
+ }
+
+ private static Dictionary _PBXProjectTypeMethods;
+ private static Dictionary PBXProjectTypeMethods
+ {
+ get
+ {
+ if (_PBXProjectTypeMethods == null)
+ {
+ _PBXProjectTypeMethods = new Dictionary();
+ }
+ return _PBXProjectTypeMethods;
+ }
+ }
+
+ private static MethodInfo GetMethod(string name, System.Type[] types)
+ {
+ string lookup = name + types.ToString();
+ MethodInfo method;
+ if (!PBXProjectTypeMethods.TryGetValue(lookup, out method))
+ {
+ method = _PBXProjectType.GetMethod(name, types);
+ if (method != null)
+ {
+ _PBXProjectTypeMethods[lookup] = method;
+ }
+ else
+ {
+ throw new PBXProjectHandlerException(string.Format("Unknown method \"{0}\"", name));
+ }
+ }
+ return method;
+ }
+
+ private object _project;
+
+ public PBXProjectHandler()
+ {
+ _project = System.Activator.CreateInstance(PBXProjectType);
+ }
+
+ public void ReadFromFile(string path)
+ {
+ MethodInfo method = GetMethod("ReadFromFile", new System.Type[] { typeof(string) });
+ Debug.LogFormat("[AVProVideo] Reading Xcode project at: {0}", path);
+ method.Invoke(_project, new object[] { path });
+ }
+
+ public void WriteToFile(string path)
+ {
+ MethodInfo method = GetMethod("WriteToFile", new System.Type[] { typeof(string) });
+ Debug.LogFormat("[AVProVideo] Writing Xcode project to: {0}", path);
+ method.Invoke(_project, new object[] { path });
+ }
+
+ public string TargetGuidByName(string name)
+ {
+ MethodInfo method = GetMethod("TargetGuidByName", new System.Type[] { typeof(string) });
+ string guid = (string)method.Invoke(_project, new object[] { name });
+ Debug.LogFormat("[AVProVideo] Target GUID for '{0}' is '{1}'", name, guid);
+ return guid;
+ }
+
+ public void SetBuildProperty(string guid, string property, string value)
+ {
+ MethodInfo method = GetMethod("SetBuildProperty", new System.Type[] { typeof(string), typeof(string), typeof(string) });
+ Debug.LogFormat("[AVProVideo] Setting build property '{0}' to '{1}' for target with guid '{2}'", property, value, guid);
+ method.Invoke(_project, new object[] { guid, property, value });
+ }
+ }
+
+ public class PostProcessBuild_macOS
+ {
+ private static bool ActualModifyProjectAtPath(string path)
+ {
+ if (!Directory.Exists(path))
+ {
+ Debug.LogWarningFormat("[AVProVideo] Failed to find Xcode project with path: {0}", path);
+ return false;
+ }
+
+ Debug.LogFormat("[AVProVideo] Modifying Xcode project at: {0}", path);
+ string projectPath = Path.Combine(path, "project.pbxproj");
+ try
+ {
+ PBXProjectHandler handler = new PBXProjectHandler();
+ handler.ReadFromFile(projectPath);
+ string guid = handler.TargetGuidByName(Application.productName);
+ handler.SetBuildProperty(guid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
+ handler.WriteToFile(projectPath);
+ return true;
+ }
+ catch (PBXProjectHandlerException ex)
+ {
+ Debug.LogErrorFormat("[AVProVideo] {0}", ex);
+ }
+
+ return false;
+ }
+
+ [PostProcessBuild]
+ public static void ModifyProject(BuildTarget target, string path)
+ {
+ if (target != BuildTarget.StandaloneOSX)
+ return;
+
+#if AVPROVIDEO_SUPPORT_MACOSX_10_14_3_AND_OLDER
+
+ Debug.Log("[AVProVideo] Post-processing Xcode project");
+
+ string projectPath = Path.Combine(path, Path.GetFileName(path) + ".xcodeproj");
+ if (ActualModifyProjectAtPath(projectPath))
+ {
+ Debug.Log("[AVProVideo] Finished");
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to modify Xcode project");
+ Debug.Log("[AVProVideo] You will need to manually set \"Always Embed Swift Standard Libraries\" to \"YES\" in the target's build settings if you're targetting macOS versions prior to 10.14.4");
+ }
+
+#endif // AVPROVIDEO_SUPPORT_MACOSX_10_14_3_AND_OLDER
+
+ }
+ }
+
+} // namespace RenderHeads.Media.AVProVideo.Editor
+
+#endif
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_macOS.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_macOS.cs.meta
new file mode 100755
index 0000000..02bad3c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PostProcessBuild_macOS.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b5e7d0eecf59540cca67bfad3855cef1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PreProcessBuild.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PreProcessBuild.cs
new file mode 100755
index 0000000..4157fb9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PreProcessBuild.cs
@@ -0,0 +1,116 @@
+#if UNITY_2018_1_OR_NEWER
+ #define UNITY_SUPPORTS_BUILD_REPORT
+#endif
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEngine.Rendering;
+using UnityEditor.Build;
+#if UNITY_SUPPORTS_BUILD_REPORT
+using UnityEditor.Build.Reporting;
+#endif
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ public class PreProcessBuild :
+ #if UNITY_SUPPORTS_BUILD_REPORT
+ IPreprocessBuildWithReport
+ #else
+ IPreprocessBuild
+ #endif
+ {
+ public int callbackOrder { get { return 0; } }
+
+ #if UNITY_SUPPORTS_BUILD_REPORT
+ public void OnPreprocessBuild(BuildReport report)
+ {
+ OnPreprocessBuild(report.summary.platform, report.summary.outputPath);
+ }
+ #endif
+
+ public void OnPreprocessBuild(BuildTarget target, string path)
+ {
+ if (IsTargetMacOS(target) || target == BuildTarget.iOS || target == BuildTarget.tvOS)
+ {
+ int indexMetal = GetGraphicsApiIndex(target, GraphicsDeviceType.Metal);
+ if (indexMetal < 0)
+ {
+ string message = "Metal graphics API is required by AVPro Video.";
+ message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";
+ ShowAbortDialog(message);
+ }
+
+ int indexOpenGLCore = GetGraphicsApiIndex(target, GraphicsDeviceType.OpenGLCore);
+ if (indexOpenGLCore >= 0 && indexMetal >=0 && indexOpenGLCore < indexMetal)
+ {
+ string message = "OpenGL graphics API is not supported by AVPro Video.";
+ message += "\n\nVideo will play but no video frames will be displayed.";
+ message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";
+ ShowAbortDialog(message);
+ }
+#if !UNITY_2023_1_OR_NEWER
+ int indexOpenGLES2 = GetGraphicsApiIndex(target, GraphicsDeviceType.OpenGLES2);
+ if (indexOpenGLES2 >= 0 && indexMetal >=0 && indexOpenGLES2 < indexMetal)
+ {
+ string message = "OpenGLES2 graphics API is not supported by AVPro Video.";
+ message += "\n\nVideo will play but no video frames will be displayed.";
+ message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";
+ ShowAbortDialog(message);
+ }
+#endif
+ int indexOpenGLES3 = GetGraphicsApiIndex(target, GraphicsDeviceType.OpenGLES3);
+ if (indexOpenGLES3 >= 0 && indexMetal >=0 && indexOpenGLES3 < indexMetal)
+ {
+ string message = "OpenGLES3 graphics API is not supported by AVPro Video.";
+ message += "\n\nVideo will play but no video frames will be displayed.";
+ message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";
+ ShowAbortDialog(message);
+ }
+ }
+
+ int indexVulkan = GetGraphicsApiIndex(target, GraphicsDeviceType.Vulkan);
+ if (indexVulkan >= 0)
+ {
+ if (target != BuildTarget.Android)
+ {
+ string message = "Vulkan graphics API is not supported by AVPro Video.";
+ message += "\n\nPlease go to Player Settings > Auto Graphics API and remove Vulkan from the list.";
+ ShowAbortDialog(message);
+ }
+ }
+ }
+
+ static void ShowAbortDialog(string message)
+ {
+ if (!EditorUtility.DisplayDialog("Continue Build?", message, "Continue", "Cancel"))
+ {
+ throw new BuildFailedException(message);
+ }
+ }
+
+ static bool IsTargetMacOS(BuildTarget target)
+ {
+ #if UNITY_2017_3_OR_NEWER
+ return (target == BuildTarget.StandaloneOSX);
+ #else
+ return (target == BuildTarget.StandaloneOSXUniversal || target == BuildTarget.StandaloneOSXIntel);
+ #endif
+ }
+
+ static int GetGraphicsApiIndex(BuildTarget target, GraphicsDeviceType api)
+ {
+ int result = -1;
+ GraphicsDeviceType[] devices = UnityEditor.PlayerSettings.GetGraphicsAPIs(target);
+ for (int i = 0; i < devices.Length; i++)
+ {
+ if (devices[i] == api)
+ {
+ result = i;
+ break;
+ }
+ }
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PreProcessBuild.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PreProcessBuild.cs.meta
new file mode 100755
index 0000000..f1e14c8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/PreProcessBuild.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 310970e3e18699c43bbab984cf33049e
+timeCreated: 1620956493
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentItems.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentItems.cs
new file mode 100755
index 0000000..4f8289d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentItems.cs
@@ -0,0 +1,91 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ ///
+ public static class RecentItems
+ {
+ private const int MaxRecentItems = 16;
+
+ private static List _recentFiles = new List(MaxRecentItems);
+ private static List _recentUrls = new List(MaxRecentItems);
+ // TODO: add a list for favourites to allow user to create their own list?
+
+ public static List Files { get { return _recentFiles; } }
+ public static List Urls { get { return _recentUrls; } }
+
+ static RecentItems()
+ {
+ MediaPlayer.InternalMediaLoadedEvent.RemoveListener(Add);
+ MediaPlayer.InternalMediaLoadedEvent.AddListener(Add);
+ }
+
+ public static void Load()
+ {
+ _recentFiles = EditorHelper.GetEditorPrefsToStringList(MediaPlayerEditor.SettingsPrefix + "RecentFiles");
+ _recentUrls = EditorHelper.GetEditorPrefsToStringList(MediaPlayerEditor.SettingsPrefix + "RecentUrls");
+ }
+
+ public static void Save()
+ {
+ EditorHelper.SetEditorPrefsFromStringList(MediaPlayerEditor.SettingsPrefix + "RecentFiles", _recentFiles);
+ EditorHelper.SetEditorPrefsFromStringList(MediaPlayerEditor.SettingsPrefix + "RecentUrls", _recentUrls);
+ }
+
+ public static void Add(string path)
+ {
+ if (path.Contains("://"))
+ {
+ Add(path, _recentUrls);
+ }
+ else
+ {
+ Add(path, _recentFiles);
+ }
+ }
+
+ private static void Add(string path, List list)
+ {
+ if (!list.Contains(path))
+ {
+ list.Insert(0, path);
+ if (list.Count > MaxRecentItems)
+ {
+ // Remove the oldest item from the list
+ list.RemoveAt(list.Count - 1);
+ }
+ }
+ else
+ {
+ // If it already contains the item, then move it to the top
+ list.Remove(path);
+ list.Insert(0, path);
+ }
+ Save();
+ }
+
+ public static void ClearMissingFiles()
+ {
+ if (_recentFiles != null && _recentFiles.Count > 0)
+ {
+ List newList = new List(_recentFiles.Count);
+ for (int i = 0; i < _recentFiles.Count; i++)
+ {
+ string path = _recentFiles[i];
+ if (System.IO.File.Exists(path))
+ {
+ newList.Add(path);
+ }
+ }
+ _recentFiles = newList;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentItems.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentItems.cs.meta
new file mode 100755
index 0000000..099a8a4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentItems.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 397a9516709d2504c85543618f07bff3
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentMenu.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentMenu.cs
new file mode 100755
index 0000000..1fbcdd2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentMenu.cs
@@ -0,0 +1,295 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ ///
+ public class RecentMenu
+ {
+ public static void Create(SerializedProperty propPath, SerializedProperty propMediaSource, string fileExtensions, bool autoLoadMedia, int mediaReferencePickerId = -1)
+ {
+ RecentItems.Load();
+ RecentMenu menu = new RecentMenu();
+ menu.FileBrowseButton(propPath, propMediaSource, fileExtensions, autoLoadMedia, mediaReferencePickerId);
+ }
+
+ private void FileBrowseButton(SerializedProperty propPath, SerializedProperty propMediaSource, string fileExtensions, bool autoLoadMedia, int mediaReferencePickerId = -1)
+ {
+ GenericMenu toolsMenu = new GenericMenu();
+ if (mediaReferencePickerId >= 0)
+ {
+ toolsMenu.AddItem(new GUIContent("Media References..."), false, Callback_BrowseMediaReferences, (object)mediaReferencePickerId);
+ }
+ toolsMenu.AddItem(new GUIContent("Browse..."), false, Callback_Browse, new BrowseData(propPath, propMediaSource, fileExtensions, autoLoadMedia));
+ CreateMenu_StreamingAssets(toolsMenu, "StreamingAssets/", propPath, propMediaSource, autoLoadMedia);
+ CreateMenu_RecentFiles(toolsMenu, RecentItems.Files, "Recent Files/" , propPath, propMediaSource, autoLoadMedia);
+ CreateMenu_RecentUrls(toolsMenu, RecentItems.Urls, "Recent URLs/", propPath, propMediaSource, autoLoadMedia);
+ toolsMenu.ShowAsContext();
+ }
+
+ private struct RecentMenuItemData
+ {
+ public RecentMenuItemData(string path, SerializedProperty propPath, SerializedProperty propMediaSource, bool autoLoadMedia)
+ {
+ this.path = path;
+ this.propPath = propPath;
+ this.propMediaSource = propMediaSource;
+ this.autoLoadMedia = autoLoadMedia;
+ }
+
+ public string path;
+ public bool autoLoadMedia;
+ public SerializedProperty propPath;
+ public SerializedProperty propMediaSource;
+ }
+
+ private void Callback_Select(object obj)
+ {
+ RecentMenuItemData data = (RecentMenuItemData)obj;
+
+ // Move it to the top of the list
+ RecentItems.Add(data.path);
+
+ // Resolve to relative path
+ MediaPath mediaPath = EditorHelper.GetMediaPathFromFullPath(data.path);
+
+ SerializedProperty propMediaPath = data.propPath.FindPropertyRelative("_path");
+ SerializedProperty propMediaPathType = data.propPath.FindPropertyRelative("_pathType");
+
+ // Assign to properties
+ propMediaPath.stringValue = mediaPath.Path;
+ propMediaPathType.enumValueIndex = (int)mediaPath.PathType;
+ if (data.propMediaSource != null)
+ {
+ data.propMediaSource.enumValueIndex = (int)MediaSource.Path;
+ }
+
+ // Mark as modified
+ data.propPath.serializedObject.ApplyModifiedProperties();
+ foreach (Object o in data.propPath.serializedObject.targetObjects)
+ {
+ EditorUtility.SetDirty(o);
+ }
+
+ if (data.autoLoadMedia)
+ {
+ MediaPlayer mediaPlayer = (MediaPlayer)data.propPath.serializedObject.targetObject;
+ if (mediaPlayer != null)
+ {
+ mediaPlayer.OpenMedia(mediaPlayer.MediaPath, autoPlay:true);
+ }
+ }
+ }
+
+ private void Callback_ClearList(object obj)
+ {
+ ((List)obj).Clear();
+ RecentItems.Save();
+ }
+
+ private void Callback_ClearMissingFiles()
+ {
+ RecentItems.ClearMissingFiles();
+ RecentItems.Save();
+ }
+
+ private struct BrowseData
+ {
+ public BrowseData(SerializedProperty propPath, SerializedProperty propMediaSource, string extensions, bool autoLoadMedia)
+ {
+ this.extensions = extensions;
+ this.propPath = propPath;
+ this.propMediaSource = propMediaSource;
+ this.autoLoadMedia = autoLoadMedia;
+ }
+
+ public bool autoLoadMedia;
+ public string extensions;
+ public SerializedProperty propPath;
+ public SerializedProperty propMediaSource;
+ }
+
+ private void Callback_BrowseMediaReferences(object obj)
+ {
+ int controlID = (int)obj;
+ EditorGUIUtility.ShowObjectPicker(null, false, "", controlID);
+ }
+
+ private void Callback_Browse(object obj)
+ {
+ BrowseData data = (BrowseData)obj;
+ SerializedProperty propFilePath = data.propPath.FindPropertyRelative("_path");
+ SerializedProperty propFilePathType = data.propPath.FindPropertyRelative("_pathType");
+ string startFolder = EditorHelper.GetBrowsableFolder(propFilePath.stringValue, (MediaPathType)propFilePathType.enumValueIndex);
+ string videoPath = propFilePath.stringValue;
+ string fullPath = string.Empty;
+ MediaPath mediaPath = new MediaPath();
+ if (EditorHelper.OpenMediaFileDialog(startFolder, ref mediaPath, ref fullPath, data.extensions))
+ {
+ // Assign to properties
+ propFilePath.stringValue = mediaPath.Path;
+ propFilePathType.enumValueIndex = (int)mediaPath.PathType;
+ if (data.propMediaSource != null) data.propMediaSource.enumValueIndex = (int)MediaSource.Path;
+
+ // Mark as modified
+ data.propPath.serializedObject.ApplyModifiedProperties();
+ foreach (Object o in data.propPath.serializedObject.targetObjects)
+ {
+ EditorUtility.SetDirty(o);
+ }
+
+ if (data.autoLoadMedia)
+ {
+ MediaPlayer mediaPlayer = (MediaPlayer)data.propPath.serializedObject.targetObject;
+ if (mediaPlayer != null)
+ {
+ mediaPlayer.OpenMedia(mediaPlayer.MediaPath, autoPlay:true);
+ }
+ }
+
+ RecentItems.Add(fullPath);
+ }
+ }
+
+ private void CreateMenu_RecentFiles(GenericMenu menu, List items, string prefix, SerializedProperty propPath, SerializedProperty propMediaSource, bool autoLoadMedia)
+ {
+ int missingCount = 0;
+ for (int i = 0; i < items.Count; i++)
+ {
+ string path = items[i];
+ // Slashes in path must be replaced as they cause the menu to create submenuts
+ string itemName = ReplaceSlashes(path);
+ // TODO: shorten if itemName too long
+ if (System.IO.File.Exists(path))
+ {
+ menu.AddItem(new GUIContent(prefix + itemName), false, Callback_Select, new RecentMenuItemData(path, propPath, propMediaSource, autoLoadMedia));
+ }
+ else
+ {
+ menu.AddDisabledItem(new GUIContent(prefix + itemName));
+ missingCount++;
+ }
+ }
+ if (items.Count > 0)
+ {
+ menu.AddSeparator(prefix + "");
+ menu.AddItem(new GUIContent(prefix + "Clear"), false, Callback_ClearList, items);
+ if (missingCount > 0)
+ {
+ menu.AddItem(new GUIContent(prefix + "Clear Missing (" + missingCount + ")"), false, Callback_ClearMissingFiles);
+ }
+ }
+ else
+ {
+ menu.AddDisabledItem(new GUIContent(prefix + "No recent files yet"));
+ }
+ }
+
+ private void CreateMenu_RecentUrls(GenericMenu menu, List items, string prefix, SerializedProperty propPath, SerializedProperty propMediaSource, bool autoLoadMedia)
+ {
+ for (int i = 0; i < items.Count; i++)
+ {
+ string path = items[i];
+ // Slashes in path must be replaced as they cause the menu to create submenuts
+ string itemName = ReplaceSlashes(path);
+ // TODO: shorten if itemName too long
+ menu.AddItem(new GUIContent(prefix + itemName), false, Callback_Select, new RecentMenuItemData(path, propPath, propMediaSource, autoLoadMedia));
+ }
+ if (items.Count > 0)
+ {
+ menu.AddSeparator(prefix + "");
+ menu.AddItem(new GUIContent(prefix + "Clear"), false, Callback_ClearList, items);
+ }
+ else
+ {
+ menu.AddDisabledItem(new GUIContent(prefix + "No recent URLs yet"));
+ }
+ }
+
+ private static string ReplaceSlashes(string text)
+ {
+ string slashReplacement = "\u2215";
+#if UNITY_EDITOR_WIN
+ // Special replacement for "//" in URLS so they aren't spaced too far apart
+ text = text.Replace("//", " \u2215 \u2215 ");
+
+ // On Windows we have to add extra spaces so it doesn't look squashed together
+ slashReplacement = " \u2215 ";
+#endif
+
+ text = text.Replace("/", slashReplacement);//.Replace("\\", slashReplacement);
+
+ // Unity will place text after " _" on the right of the menu, so we replace it so this doesn't happen
+ text = text.Replace(" _", "_");
+
+ return text;
+ }
+
+ private static List FindMediaFilesInStreamingAssetsFolder()
+ {
+ List files = new List();
+ if (System.IO.Directory.Exists(Application.streamingAssetsPath))
+ {
+ string[] allFiles = System.IO.Directory.GetFiles(Application.streamingAssetsPath, "*", System.IO.SearchOption.AllDirectories);
+ if (allFiles != null && allFiles.Length > 0)
+ {
+ // Filter by type
+ for (int i = 0; i < allFiles.Length; i++)
+ {
+ string file = allFiles[i];
+ bool remove = false;
+ if (file.EndsWith(".meta", System.StringComparison.InvariantCultureIgnoreCase))
+ {
+ remove = true;
+ }
+#if UNITY_EDITOR_OSX
+ remove = remove || file.EndsWith(".DS_Store");
+#endif
+ if (!remove)
+ {
+#if UNITY_EDITOR_WIN
+ // Using Directory.GetFiles returns paths with \ in so correct this to be /
+ file = file.Replace("\\", "/");
+#endif
+ files.Add(file);
+ }
+ }
+ }
+ }
+ return files;
+ }
+
+ private void CreateMenu_StreamingAssets(GenericMenu menu, string prefix, SerializedProperty propPath, SerializedProperty propMediaSource, bool autoLoadMedia)
+ {
+ List files = FindMediaFilesInStreamingAssetsFolder();
+ if (files.Count > 0)
+ {
+ for (int i = 0; i < files.Count; i++)
+ {
+ string path = files[i];
+ if (System.IO.File.Exists(path))
+ {
+ string itemName = path.Replace(Application.streamingAssetsPath, "");
+ if (itemName.StartsWith("/") || itemName.StartsWith("\\"))
+ {
+ itemName = itemName.Remove(0, 1);
+ }
+ itemName = itemName.Replace("\\", "/");
+
+ menu.AddItem(new GUIContent(prefix + itemName), false, Callback_Select, new RecentMenuItemData(path, propPath, propMediaSource, autoLoadMedia));
+ }
+ }
+ }
+ else
+ {
+ menu.AddDisabledItem(new GUIContent(prefix + "StreamingAssets folder missing or contains no files"));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentMenu.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentMenu.cs.meta
new file mode 100755
index 0000000..4d2dfee
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/RecentMenu.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 58699a0e0590c6e4ba19c09d612e0bb2
+timeCreated: 1448902492
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/SupportWindow.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/SupportWindow.cs
new file mode 100755
index 0000000..117ee56
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/SupportWindow.cs
@@ -0,0 +1,524 @@
+
+using UnityEngine;
+using UnityEditor;
+using System.Text;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System;
+
+//-----------------------------------------------------------------------------
+// Copyright 2016-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// A window to display options to the user to help them report bugs
+ /// Also collects some metadata about the machine specs, plugin version etc
+ ///
+ public class SupportWindow : EditorWindow
+ {
+ private class MyPopupWindow : PopupWindowContent
+ {
+ private string _text;
+ private string _url;
+ private string _buttonMessage;
+
+ public MyPopupWindow(string text, string buttonMessage,string url)
+ {
+ _text = text;
+ _url = url;
+ _buttonMessage = buttonMessage;
+ }
+
+ public override Vector2 GetWindowSize()
+ {
+ return new Vector2(400, 520);
+ }
+
+ public override void OnGUI(Rect rect)
+ {
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("Copy-Paste this text, then ", EditorStyles.boldLabel);
+ GUI.color = Color.green;
+ if (GUILayout.Button(_buttonMessage, GUILayout.ExpandWidth(true)))
+ {
+ Application.OpenURL(_url);
+ }
+ GUILayout.EndHorizontal();
+ GUI.color = Color.white;
+ EditorGUILayout.TextArea(_text);
+ }
+ }
+
+ private static bool _isCreated = false;
+ private static bool _isInit = false;
+
+ private const string SettingsPrefix = "AVProVideo.SupportWindow.";
+
+ private string _emailDescription = string.Empty;
+ private string _emailTopic = string.Empty;
+ private string _emailVideoFormat = string.Empty;
+ private string _emailDeviceSpecs = string.Empty;
+
+ //private bool _askForHelp = false;
+ private bool _trySelfSolve = false;
+ private Vector2 _scroll = Vector2.zero;
+
+ private int _selectionIndex = 0;
+ private static string[] _gridNames = { "Help Resources", "Ask for Help", "Update v2.x to v3.x" };
+
+ [MenuItem("Window/AVPro Video Support")]
+ public static void Init()
+ {
+ // Close window if it is already open
+ if (_isInit || _isCreated)
+ {
+ SupportWindow window = (SupportWindow)EditorWindow.GetWindow(typeof(SupportWindow));
+ window.Close();
+ return;
+ }
+
+ _isCreated = true;
+
+ // Get existing open window or if none, make a new one:
+ SupportWindow window2 = ScriptableObject.CreateInstance();
+ if (window2 != null)
+ {
+ window2.SetupWindow();
+ }
+ }
+
+ private void SetupWindow()
+ {
+ _isCreated = true;
+ float width = 512f;
+ float height = 512f;
+ this.position = new Rect((Screen.width / 2) - (width / 2f), (Screen.height / 2) - (height / 2f), width, height);
+ this.minSize = new Vector2(530f, 510f);
+ this.titleContent = new GUIContent("AVPro Video - Help & Support");
+ this.CreateGUI();
+ LoadSettings();
+ this.ShowUtility();
+ this.Repaint();
+ }
+
+ private void CreateGUI()
+ {
+ _isInit = true;
+ }
+
+ void OnEnable()
+ {
+ if (!_isCreated)
+ {
+ SetupWindow();
+ }
+ }
+
+ void OnDisable()
+ {
+ _isInit = false;
+ _isCreated = false;
+ SaveSettings();
+ Repaint();
+ }
+
+ private void SaveSettings()
+ {
+ EditorPrefs.SetString(SettingsPrefix + "EmailTopic", _emailTopic);
+ EditorPrefs.SetString(SettingsPrefix + "EmailDescription", _emailDescription);
+ EditorPrefs.SetString(SettingsPrefix + "EmailDeviceSpecs", _emailDeviceSpecs);
+ EditorPrefs.SetString(SettingsPrefix + "EmailVideoSpecs", _emailVideoFormat);
+ EditorPrefs.SetBool(SettingsPrefix + "ExpandSelfSolve", _trySelfSolve);
+ EditorPrefs.SetInt(SettingsPrefix + "SelectionIndex", _selectionIndex);
+ }
+
+ private void LoadSettings()
+ {
+ _emailTopic = EditorPrefs.GetString(SettingsPrefix + "EmailTopic", _emailTopic);
+ _emailDescription = EditorPrefs.GetString(SettingsPrefix + "EmailDescription", _emailDescription);
+ _emailDeviceSpecs = EditorPrefs.GetString(SettingsPrefix + "EmailDeviceSpecs", _emailDeviceSpecs);
+ _emailVideoFormat = EditorPrefs.GetString(SettingsPrefix + "EmailVideoSpecs", _emailVideoFormat);
+ _trySelfSolve = EditorPrefs.GetBool(SettingsPrefix + "ExpandSelfSolve", _trySelfSolve);
+ _selectionIndex = EditorPrefs.GetInt(SettingsPrefix + "SelectionIndex", _selectionIndex);
+ }
+
+ private string CollectSupportData()
+ {
+ string nl = System.Environment.NewLine;
+
+ string version = string.Format("AVPro Video: v{0} (plugin v{1})", Helper.AVProVideoVersion, GetPluginVersion());
+ string targetPlatform = "Target Platform: " + EditorUserBuildSettings.selectedBuildTargetGroup.ToString();
+ string unityVersion = "Unity: v" + Application.unityVersion + " " + Application.platform.ToString();
+
+ string deviceInfo = "OS: " + SystemInfo.deviceType + " - " + SystemInfo.deviceModel + " - " + SystemInfo.operatingSystem + " - " + Application.systemLanguage;
+ string cpuInfo = "CPU: " + SystemInfo.processorType + " - " + SystemInfo.processorCount + " threads - " + + SystemInfo.systemMemorySize + "KB";
+ string gfxInfo = "GPU: " + SystemInfo.graphicsDeviceName + " - " + SystemInfo.graphicsDeviceVendor + " - " + SystemInfo.graphicsDeviceVersion + " - " + SystemInfo.graphicsMemorySize + "KB - " + SystemInfo.maxTextureSize;
+
+ return version + nl + targetPlatform + nl + unityVersion + nl + deviceInfo + nl + cpuInfo + nl + gfxInfo;
+ }
+
+ void OnGUI()
+ {
+ if (!_isInit)
+ {
+ EditorGUILayout.LabelField("Initialising...");
+ return;
+ }
+
+ GUILayout.Label("Having problems? We'll do our best to help.\n\nBelow is a collection of resources to help solve any issues you may encounter.", EditorStyles.wordWrappedLabel);
+ GUILayout.Space(16f);
+
+ /*GUI.color = Color.white;
+ GUI.backgroundColor = Color.clear;
+ if (_trySelfSolve)
+ {
+ GUI.color = Color.white;
+ GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f, 0.1f);
+ if (EditorGUIUtility.isProSkin)
+ {
+ GUI.backgroundColor = Color.black;
+ }
+ }
+ GUILayout.BeginVertical("box");
+ GUI.backgroundColor = Color.white;*/
+
+ _selectionIndex = GUILayout.Toolbar(_selectionIndex, _gridNames);
+
+ GUILayout.Space(16f);
+ /*if (GUILayout.Button("Try Solve the Issue Yourself", EditorStyles.toolbarButton))
+ {
+ //_trySelfSolve = !_trySelfSolve;
+ _trySelfSolve = true;
+ }
+ GUI.color = Color.white;
+ if (_trySelfSolve)*/
+ if (_selectionIndex == 0)
+ {
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("1) ");
+ GUILayout.Label("Check you're using the latest version of AVPro Video via the Asset Store. This is version " + Helper.AVProVideoVersion, EditorStyles.wordWrappedLabel);
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("2) ");
+ GUILayout.Label("Look at the example projects and scripts in the Demos folder");
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("3) ");
+ GUI.color = Color.green;
+ if (GUILayout.Button("Read the Documentation", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(MediaPlayerEditor.LinkUserManual);
+ }
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("4) ");
+ GUI.color = Color.green;
+ if (GUILayout.Button("Read the GitHub Issues", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(MediaPlayerEditor.LinkGithubIssues);
+ }
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("5) ");
+ GUI.color = Color.green;
+ if (GUILayout.Button("Read the Scripting Reference", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(MediaPlayerEditor.LinkScriptingClassReference);
+ }
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("6) ");
+ GUI.color = Color.green;
+ if (GUILayout.Button("Visit the AVPro Video Website", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(MediaPlayerEditor.LinkPluginWebsite);
+ }
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("7) ");
+ GUI.color = Color.green;
+ if (GUILayout.Button("Browse the Unity Forum", GUILayout.ExpandWidth(false)))
+ {
+ Application.OpenURL(MediaPlayerEditor.LinkForumPage);
+ }
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ }
+ else if (_selectionIndex == 1)
+ {
+ GUILayout.Label("Please fill out these fields when sending us a new issue.\nThis makes it much easier and faster to resolve the issue.", EditorStyles.wordWrappedLabel);
+ GUILayout.Space(16f);
+
+ GUILayout.BeginVertical("box");
+ _scroll = GUILayout.BeginScrollView(_scroll);
+
+ GUILayout.Label("Issue/Question Title", EditorStyles.boldLabel);
+ _emailTopic = GUILayout.TextField(_emailTopic);
+
+ GUILayout.Space(8f);
+ GUILayout.Label("What's the problem?", EditorStyles.boldLabel);
+ _emailDescription = EditorGUILayout.TextArea(_emailDescription, GUILayout.Height(64f));
+
+ GUILayout.Space(8f);
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("Tell us about your videos", EditorStyles.boldLabel);
+ GUILayout.Label("- Number of videos, resolution, codec, frame-rate, example URLs", EditorStyles.miniBoldLabel);
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ _emailVideoFormat = EditorGUILayout.TextArea(_emailVideoFormat, GUILayout.Height(32f));
+
+ GUILayout.Space(8f);
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("Which devices are you having the issue with?", EditorStyles.boldLabel);
+ GUILayout.Label("- Model, OS version number", EditorStyles.miniBoldLabel);
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ _emailDeviceSpecs = EditorGUILayout.TextField(_emailDeviceSpecs);
+
+ //GUILayout.Space(16f);
+ ////GUILayout.Label("System Information");
+ //GUILayout.TextArea(CollectSupportData());
+
+ string emailBody = System.Environment.NewLine + System.Environment.NewLine;
+ emailBody += "Problem description:" + System.Environment.NewLine + System.Environment.NewLine + _emailDescription + System.Environment.NewLine + System.Environment.NewLine;
+ emailBody += "Device (which devices are you having the issue with - model, OS version number):" + System.Environment.NewLine + System.Environment.NewLine + _emailDeviceSpecs + System.Environment.NewLine + System.Environment.NewLine;
+ emailBody += "Media (tell us about your videos - number of videos, resolution, codec, frame-rate, example URLs):" + System.Environment.NewLine + System.Environment.NewLine + _emailVideoFormat + System.Environment.NewLine + System.Environment.NewLine;
+ emailBody += "System Information:" + System.Environment.NewLine + System.Environment.NewLine + CollectSupportData() + System.Environment.NewLine + System.Environment.NewLine;
+
+ //GUILayout.Space(16f);
+//
+ //GUILayout.Label("Email Content");
+ //EditorGUILayout.TextArea(emailBody);
+
+ GUILayout.EndScrollView();
+ GUILayout.EndVertical();
+
+ GUILayout.Space(16f);
+
+ GUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ GUI.color = Color.green;
+ if (GUILayout.Button("Send at GitHub Issues ➔", GUILayout.ExpandWidth(false), GUILayout.Height(32f)))
+ {
+ PopupWindow.Show(buttonRect, new MyPopupWindow(emailBody, "Go to GitHub", MediaPlayerEditor.LinkGithubIssuesNew));
+ }
+ /*if (GUILayout.Button("Send at the Unity Forum ➔", GUILayout.ExpandWidth(false), GUILayout.Height(32f)))
+ {
+ PopupWindow.Show(buttonRect, new MyPopupWindow(emailBody, "Go to Forum", MediaPlayerEditor.LinkForumLastPage));
+ }*/
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ buttonRect = GUILayoutUtility.GetLastRect();
+ }
+
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ }
+ else if (_selectionIndex == 2)
+ {
+ GUILayout.Label("There are a number of files/folders that need to be removed going from AVPro Video version 2.x to AVPro Video v3.x in order for v3.x to build and run correctly.\n\nIn order to complete a smooth upgrade a project using AVPro Video v2.x to v3.x please follow the following steps:", EditorStyles.wordWrappedLabel);
+ GUILayout.Space(16f);
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("1) Import the latest AVPro Video v3.x asset bundle into a project that already contains AVPro Video v2.x", EditorStyles.wordWrappedLabel);
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+
+ GUILayout.BeginHorizontal();
+ GUILayout.Label("2) Click the update button");
+ if (GUILayout.Button("Update", GUILayout.ExpandWidth(true)))
+ {
+ List aFilesToDelete = new List();
+
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer.aar", "d04cd71ba09f0a548ac774e50236a6f7", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-common.aar", "782210c1836944347b3b8315635ef044", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-container.aar", "2232bec870b56e04aa0107d97204456e", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-core.aar", "782210c1836944347b3b8315658ef044", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-dash.aar", "d06cd71ba09f0a548ac774e50236a6f7", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-database.aar", "a35ee71df09a0a348ac774e75237a6a1", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-datasource.aar", "d06cd71df09a0a348ac774e75237a6a1", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-decoder.aar", "d06cd71ba09f0a548ac774e75236a6a1", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-extractor.aar", "782210c2926744347b3b8315658ef044", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-hls.aar", "d07cd71ba09f0a548ac774e50236a6f7", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-rtsp.aar", "782210a1816945347b3b8315658ef052", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/exoplayer-smoothstreaming.aar", "d08cd71ba09f0a548ac774e50236a6f7", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/Android/extension-rtmp.aar", "782210c1836944347b3b8315658ef041", false) );
+ //
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/iOS/AVProVideo.framework", "2a1facf97326449499b63c03811b1ab2", true) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/iOS/AVProVideoBootstrap.m", "4df32662530a57c4f83b79e6313690dc", false) );
+ //
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.framework", "bcf659e3a94d748d6a100d5531540d1a", true) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Plugins/tvOS/AVProVideoBootstrap.m", "154f23675acd6c54e8667de25ac31b67", false) );
+ //
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Scripts/Internal/Players/AndroidMediaPlayer.cs", "80eb525dd677aa440823910b09b23ae0", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Scripts/Internal/Players/AppleMediaPlayer.cs", "3f68628a1ef6349648e502d1c66b5114", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Scripts/Internal/Players/AppleMediaPlayer+Native.cs", "0bf374b5848b649e6b3840fe1dc03cd2", false) );
+ aFilesToDelete.Add( new SFileToDelete( "Assets/AVProVideo/Runtime/Scripts/Internal/Players/AppleMediaPlayerExtensions.cs", "e27ea5523e11f44c09e8d368eb1f2983", false) );
+
+ int iNumberFilesDeleted = DeleteFiles_V2_To_V3(aFilesToDelete, new[] { ".aar", ".m", ".cs" } );
+
+ EditorUtility.DisplayDialog("Complete", "Update from AVPro Video v2.x to v3.x is complete.\n\n" + iNumberFilesDeleted + " files/folders were removed in the process", "ok");
+ }
+ GUI.color = Color.white;
+ GUILayout.FlexibleSpace();
+ GUILayout.EndHorizontal();
+ }
+ //GUILayout.EndVertical();
+
+ GUILayout.FlexibleSpace();
+
+ if (GUILayout.Button("Close"))
+ {
+ this.Close();
+ }
+ }
+
+ private class SFileToDelete
+ {
+ public SFileToDelete( string filename, string guid, bool bDirectory )
+ {
+ m_Filename = filename;
+ m_guid = guid;
+ m_FullPath = null;
+ m_bIsDirectory = bDirectory;
+ }
+
+ public string m_Filename;
+ public string m_guid;
+ public string m_FullPath;
+ public bool m_bIsDirectory;
+ };
+
+ private int DeleteFiles_V2_To_V3( List aFilesToDelete, string[] allowedExtensions )
+ {
+ int iNumRemoved = 0;
+
+ try
+ {
+ // Folders first
+ IEnumerable aAllFoders = Directory.GetDirectories( Application.dataPath, "*", SearchOption.AllDirectories );
+ foreach( string directoryPath in aAllFoders )
+ {
+ Uri relativeDirectory = (new Uri(Application.dataPath)).MakeRelativeUri(new Uri(directoryPath));
+ UnityEngine.Object asssetObject = AssetDatabase.LoadAssetAtPath( relativeDirectory.ToString() );
+ if(asssetObject)
+ {
+ string guid;
+ long file;
+ if( AssetDatabase.TryGetGUIDAndLocalFileIdentifier( asssetObject, out guid, out file ) )
+ {
+ // Is this a file we want to delete?
+ foreach( SFileToDelete sFileToDelete in aFilesToDelete )
+ {
+ if( !string.IsNullOrEmpty( sFileToDelete.m_guid ) &&
+ sFileToDelete.m_bIsDirectory &&
+ sFileToDelete.m_guid.Equals( guid ) )
+ {
+ // A hit, delete
+ Directory.Delete( directoryPath, true );
+ File.Delete( directoryPath + ".meta" );
+
+ iNumRemoved += 2;
+ }
+ }
+ }
+ }
+ }
+
+ // Files
+ IEnumerable aAllFiles = Directory.GetFiles( Application.dataPath, "*.*", SearchOption.AllDirectories ).Where(file => allowedExtensions.Any(file.ToLower().EndsWith));
+ foreach( string filePath in aAllFiles )
+ {
+ Uri relativeFilename = (new Uri(Application.dataPath)).MakeRelativeUri(new Uri(filePath));
+ UnityEngine.Object asssetObject = AssetDatabase.LoadAssetAtPath( relativeFilename.ToString() );
+ if(asssetObject)
+ {
+ string guid;
+ long file;
+ if( AssetDatabase.TryGetGUIDAndLocalFileIdentifier( asssetObject, out guid, out file ) )
+ {
+ // Is this a file we want to delete?
+ foreach( SFileToDelete sFileToDelete in aFilesToDelete )
+ {
+ if( !string.IsNullOrEmpty( sFileToDelete.m_guid ) &&
+ !sFileToDelete.m_bIsDirectory &&
+ sFileToDelete.m_guid.Equals( guid ) )
+ {
+ // A hit, delete
+ File.Delete( filePath );
+ File.Delete( filePath + ".meta" );
+
+ iNumRemoved += 2;
+ }
+ }
+ }
+ }
+ }
+ }
+ catch (UnauthorizedAccessException UAEx)
+ {
+ Console.WriteLine(UAEx.Message);
+ }
+ catch (PathTooLongException PathEx)
+ {
+ Console.WriteLine(PathEx.Message);
+ }
+
+ return iNumRemoved;
+ }
+
+
+ private Rect buttonRect;
+
+ private struct Native
+ {
+#if UNITY_EDITOR_WIN
+ [System.Runtime.InteropServices.DllImport("AVProVideo")]
+ public static extern System.IntPtr GetPluginVersion();
+#elif UNITY_EDITOR_OSX
+ [System.Runtime.InteropServices.DllImport("AVProVideo")]
+ public static extern string AVPGetVersion();
+#endif
+ }
+
+ private static string GetPluginVersion()
+ {
+ string version = "Unknown";
+ try
+ {
+#if UNITY_EDITOR_WIN
+ version = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Native.GetPluginVersion());
+#elif UNITY_EDITOR_OSX
+ version = Native.AVPGetVersion();
+#endif
+ }
+ catch (System.DllNotFoundException e)
+ {
+ Debug.LogError("[AVProVideo] Failed to load DLL. " + e.Message);
+ }
+ return version;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/SupportWindow.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/SupportWindow.cs.meta
new file mode 100755
index 0000000..1aa9f65
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/SupportWindow.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e7d92cb5b84798a44b49bb610befa0cf
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/VideoResolveOptionsDrawer.cs b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/VideoResolveOptionsDrawer.cs
new file mode 100755
index 0000000..8fbde64
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/VideoResolveOptionsDrawer.cs
@@ -0,0 +1,71 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+#if AVPRO_FEATURE_VIDEORESOLVE
+ [CustomPropertyDrawer(typeof(VideoResolveOptions))]
+ public class VideoResolveOptionsDrawer : PropertyDrawer
+ {
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return 0f; }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUI.BeginProperty(position, GUIContent.none, property);
+
+ SerializedProperty propApplyHSBC = property.FindPropertyRelative("applyHSBC");
+ EditorGUILayout.PropertyField(propApplyHSBC, new GUIContent("Image Adjustments"));
+
+ if (propApplyHSBC.boolValue)
+ {
+ SerializedProperty propHue = property.FindPropertyRelative("hue");
+ SerializedProperty propSaturation = property.FindPropertyRelative("saturation");
+ SerializedProperty propBrightness = property.FindPropertyRelative("brightness");
+ SerializedProperty propContrast = property.FindPropertyRelative("contrast");
+ SerializedProperty propGamma = property.FindPropertyRelative("gamma");
+
+ EditorGUILayout.PropertyField(propHue);
+ EditorGUILayout.PropertyField(propSaturation);
+ EditorGUILayout.PropertyField(propBrightness);
+ EditorGUILayout.PropertyField(propContrast);
+ EditorGUILayout.PropertyField(propGamma);
+ }
+
+ {
+ SerializedProperty propTint = property.FindPropertyRelative("tint");
+ SerializedProperty propGenerateMipMaps = property.FindPropertyRelative("generateMipmaps");
+ EditorGUILayout.PropertyField(propTint);
+ EditorGUILayout.PropertyField(propGenerateMipMaps);
+ }
+
+ EditorGUI.EndProperty();
+ }
+ }
+
+ [CustomPropertyDrawer(typeof(VideoResolve))]
+ public class VideoResolveDrawer : PropertyDrawer
+ {
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return 0f; }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUI.BeginProperty(position, GUIContent.none, property);
+
+ SerializedProperty propOptions = property.FindPropertyRelative("_options");
+ SerializedProperty propTargetRenderTexture = property.FindPropertyRelative("_targetRenderTexture");
+
+ EditorGUILayout.PropertyField(propOptions, true);
+ EditorGUILayout.PropertyField(propTargetRenderTexture, new GUIContent("Render Texture"));
+ if (propTargetRenderTexture.objectReferenceValue != null)
+ {
+ SerializedProperty propTargetRenderTextureScale = property.FindPropertyRelative("_targetRenderTextureScale");
+ EditorGUILayout.PropertyField(propTargetRenderTextureScale);
+ }
+
+ EditorGUI.EndProperty();
+ }
+ }
+#endif
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/VideoResolveOptionsDrawer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/VideoResolveOptionsDrawer.cs.meta
new file mode 100755
index 0000000..2eb639c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/Scripts/VideoResolveOptionsDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 66da0bc3f380f71408dd648351fb36dd
+timeCreated: 1614875698
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/_AVProVideo.Editor.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Editor/_AVProVideo.Editor.asmdef
new file mode 100755
index 0000000..c8f9149
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/_AVProVideo.Editor.asmdef
@@ -0,0 +1,7 @@
+{
+ "name": "AVProVideo.Editor",
+ "references": [ "AVProVideo.Runtime" ],
+ "includePlatforms": [
+ "Editor"
+ ]
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Editor/_AVProVideo.Editor.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Editor/_AVProVideo.Editor.asmdef.meta
new file mode 100755
index 0000000..b373993
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Editor/_AVProVideo.Editor.asmdef.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b7e953b0f2cefdb479f1f95f12b72863
+timeCreated: 1546681457
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions.meta
new file mode 100755
index 0000000..3de08bf
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: af2056dac7a9a1c4c8ced95ba9749998
+folderAsset: yes
+timeCreated: 1591790245
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline.meta
new file mode 100755
index 0000000..6fdba28
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: bdad1096e91a02f44bfdeb7ce4e8d8f7
+folderAsset: yes
+timeCreated: 1591790245
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlAsset.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlAsset.cs
new file mode 100755
index 0000000..b04adb5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlAsset.cs
@@ -0,0 +1,46 @@
+// You need to define AVPRO_PACKAGE_TIMELINE manually to use this script
+// We could set up the asmdef to reference the package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+//#define AVPRO_PACKAGE_TIMELINE
+#if (UNITY_2018_1_OR_NEWER && AVPRO_PACKAGE_TIMELINE)
+using UnityEngine;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Playables
+{
+ [System.Serializable]
+ public class MediaPlayerControlAsset : PlayableAsset
+ {
+ public Object binding { get; set; }
+ //public ExposedReference mediaPlayer;
+
+ public MediaReference mediaReference;
+
+ [Range(0f, 1f)]
+ public float audioVolume = 1f;
+ public double startTime = -1.0;
+ public bool pauseOnEnd = true;
+
+ public override Playable CreatePlayable (PlayableGraph graph, GameObject owner)
+ {
+ var playable = ScriptPlayable.Create(graph);
+
+ var behaviour = playable.GetBehaviour();
+ //behaviour.mediaPlayer = mediaPlayer.Resolve(graph.GetResolver());
+ behaviour.audioVolume = audioVolume;
+ behaviour.pauseOnEnd = pauseOnEnd;
+ behaviour.startTime = startTime;
+ behaviour.mediaReference = mediaReference;
+ behaviour.mediaPlayer = (MediaPlayer)binding;
+
+ return playable;
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlAsset.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlAsset.cs.meta
new file mode 100755
index 0000000..d365e37
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlAsset.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 55976ecf17b24e6438718da0257699d3
+timeCreated: 1605888478
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlBehaviour.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlBehaviour.cs
new file mode 100755
index 0000000..0e68b34
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlBehaviour.cs
@@ -0,0 +1,64 @@
+// You need to define AVPRO_PACKAGE_TIMELINE manually to use this script
+// We could set up the asmdef to reference the package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+//#define AVPRO_PACKAGE_TIMELINE
+#if (UNITY_2018_1_OR_NEWER && AVPRO_PACKAGE_TIMELINE)
+using UnityEngine;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Playables
+{
+ public class MediaPlayerControlBehaviour : PlayableBehaviour
+ {
+ public MediaPlayer mediaPlayer = null;
+
+ public MediaReference mediaReference = null;
+ public float audioVolume = 1f;
+ public double startTime = -1.0;
+ public bool pauseOnEnd = true;
+
+ public override void OnBehaviourPlay(Playable playable, FrameData info)
+ {
+ if (mediaPlayer != null)
+ {
+ if (Application.isPlaying)
+ {
+ if (mediaReference != null && mediaReference != mediaPlayer.MediaReference)
+ {
+ mediaPlayer.OpenMedia(mediaReference, true);
+ if (mediaPlayer.Control != null)
+ {
+ mediaPlayer.Control.SeekFast(startTime);
+ }
+ }
+ else
+ {
+ mediaPlayer.Play();
+ }
+ }
+ }
+ }
+
+ public override void OnBehaviourPause(Playable playable, FrameData info)
+ {
+ if (mediaPlayer != null)
+ {
+ if (pauseOnEnd)
+ {
+ mediaPlayer.Pause();
+ }
+ }
+ }
+
+ public override void ProcessFrame(Playable playable, FrameData info, object playerData)
+ {
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlBehaviour.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlBehaviour.cs.meta
new file mode 100755
index 0000000..cf70647
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d76b1588cab8f6f4282ca316e24ea365
+timeCreated: 1605888480
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlMixerBehaviour.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlMixerBehaviour.cs
new file mode 100755
index 0000000..cb717e5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlMixerBehaviour.cs
@@ -0,0 +1,52 @@
+// You need to define AVPRO_PACKAGE_TIMELINE manually to use this script
+// We could set up the asmdef to reference the package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+//#define AVPRO_PACKAGE_TIMELINE
+#if (UNITY_2018_1_OR_NEWER && AVPRO_PACKAGE_TIMELINE)
+using UnityEngine;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Playables
+{
+ public class MediaPlayerControlMixerBehaviour : PlayableBehaviour
+ {
+ public float audioVolume = 1f;
+ public string videoPath = null;
+
+ public override void ProcessFrame(Playable playable, FrameData info, object playerData)
+ {
+ MediaPlayer mediaPlayer = playerData as MediaPlayer;
+ float finalVolume = 0f;
+
+ if (!mediaPlayer)
+ return;
+
+ int inputCount = playable.GetInputCount(); //get the number of all clips on this track
+ for (int i = 0; i < inputCount; i++)
+ {
+ float inputWeight = playable.GetInputWeight(i);
+ ScriptPlayable inputPlayable = (ScriptPlayable)playable.GetInput(i);
+ MediaPlayerControlBehaviour input = inputPlayable.GetBehaviour();
+
+ // Use the above variables to process each frame of this playable.
+ finalVolume += input.audioVolume * inputWeight;
+ }
+
+ if (mediaPlayer != null)
+ {
+ mediaPlayer.AudioVolume = finalVolume;
+ if (mediaPlayer.Control != null)
+ {
+ mediaPlayer.Control.SetVolume(finalVolume);
+ }
+ }
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlMixerBehaviour.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlMixerBehaviour.cs.meta
new file mode 100755
index 0000000..a8e3d4a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlMixerBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c390934e9ad7c29478a96808ee101c87
+timeCreated: 1605888480
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlTrack.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlTrack.cs
new file mode 100755
index 0000000..a45a100
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlTrack.cs
@@ -0,0 +1,41 @@
+// You need to define AVPRO_PACKAGE_TIMELINE manually to use this script
+// We could set up the asmdef to reference the package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+//#define AVPRO_PACKAGE_TIMELINE
+#if (UNITY_2018_1_OR_NEWER && AVPRO_PACKAGE_TIMELINE)
+using UnityEngine;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Playables
+{
+ [TrackClipType(typeof(MediaPlayerControlAsset))]
+ [TrackBindingType(typeof(MediaPlayer))]
+ public class MediaPlayerControlTrack : TrackAsset
+ {
+ public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
+ {
+ // before building, update the binding field in the clips assets;
+ var director = go.GetComponent();
+ var binding = director.GetGenericBinding(this);
+
+ foreach (var c in GetClips())
+ {
+ var myAsset = c.asset as MediaPlayerControlAsset;
+ if (myAsset != null)
+ {
+ myAsset.binding = binding;
+ }
+ }
+
+ //return base.CreateTrackMixer(graph, go, inputCount);
+ return ScriptPlayable.Create(graph, inputCount);
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlTrack.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlTrack.cs.meta
new file mode 100755
index 0000000..d47b087
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/MediaPlayerControlTrack.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 971a512f8f09bfb4aa96fb25d0439255
+timeCreated: 1605888480
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/_AVProVideo.Extensions.Timeline.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/_AVProVideo.Extensions.Timeline.asmdef
new file mode 100755
index 0000000..e6e6c5e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/_AVProVideo.Extensions.Timeline.asmdef
@@ -0,0 +1,8 @@
+{
+ "name": "AVProVideo.Extensions.Timeline",
+ "references": [
+ "AVProVideo.Runtime"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/_AVProVideo.Extensions.Timeline.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/_AVProVideo.Extensions.Timeline.asmdef.meta
new file mode 100755
index 0000000..4168612
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/Timeline/_AVProVideo.Extensions.Timeline.asmdef.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 417edd1c17e270f4a9afe6e95eff9b6e
+timeCreated: 1591797492
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI.meta
new file mode 100755
index 0000000..04390b0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e82bc7b2e03389f44a7c4c7f38f0db58
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor.meta
new file mode 100755
index 0000000..6ea42c8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b801737c3821d6e438ecf2a742d4f04b
+folderAsset: yes
+timeCreated: 1591797492
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/DisplayUGUIEditor.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/DisplayUGUIEditor.cs
new file mode 100755
index 0000000..e8dc7a3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/DisplayUGUIEditor.cs
@@ -0,0 +1,172 @@
+// UnityEngine.UI was moved to a package in 2019.2.0
+// Unfortunately no way to test for this across all Unity versions yet
+// You can set up the asmdef to reference the new package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+#define AVPRO_PACKAGE_UNITYUI
+#if (UNITY_2019_2_OR_NEWER && AVPRO_PACKAGE_UNITYUI) || (!UNITY_2019_2_OR_NEWER)
+
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.UI;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Editor
+{
+ ///
+ /// Editor for the DisplayUGUI component
+ ///
+ [CustomEditor(typeof(DisplayUGUI), true)]
+ [CanEditMultipleObjects]
+ public class DisplayUGUIEditor : GraphicEditor
+ {
+ // Note we have precedence for calling rectangle for just rect, even in the Inspector.
+ // For example in the Camera component's Viewport Rect.
+ // Hence sticking with Rect here to be consistent with corresponding property in the API.
+ private static readonly GUIContent m_guiTextUVRectContent = new GUIContent("UV Rect");
+
+ private SerializedProperty _propMediaPlayer;
+ private SerializedProperty _propUVRect;
+ private SerializedProperty _propDefaultTexture;
+ private SerializedProperty _propNoDefaultDisplay;
+ private SerializedProperty _propDisplayInEditor;
+ private SerializedProperty _propSetNativeSize;
+ private SerializedProperty _propScaleMode;
+
+ [MenuItem("GameObject/UI/AVPro Video uGUI", false, 0)]
+ public static void CreateGameObject()
+ {
+ GameObject parent = Selection.activeGameObject;
+ RectTransform parentCanvasRenderer = ( parent != null ) ? parent.GetComponent() : null;
+ if( parentCanvasRenderer )
+ {
+ GameObject go = new GameObject("AVPro Video");
+ go.transform.SetParent(parent.transform, false);
+ go.AddComponent();
+ go.AddComponent();
+ go.AddComponent();
+ Selection.activeGameObject = go;
+ }
+ else
+ {
+ EditorUtility.DisplayDialog("AVPro Video", "You must make the AVPro Video uGUI object as a child of a Canvas.", "Ok");
+ }
+ }
+
+ public override bool RequiresConstantRepaint()
+ {
+ DisplayUGUI displayComponent = target as DisplayUGUI;
+ return (displayComponent != null && displayComponent.HasValidTexture());
+ }
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+
+ _propMediaPlayer = this.CheckFindProperty("_mediaPlayer");
+ _propUVRect = this.CheckFindProperty("_uvRect");
+ _propSetNativeSize = this.CheckFindProperty("_setNativeSize");
+ _propScaleMode = this.CheckFindProperty("_scaleMode");
+ _propNoDefaultDisplay = this.CheckFindProperty("_noDefaultDisplay");
+ _propDisplayInEditor = this.CheckFindProperty("_displayInEditor");
+ _propDefaultTexture = this.CheckFindProperty("_defaultTexture");
+
+ SetShowNativeSize(true);
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ EditorGUILayout.PropertyField(_propMediaPlayer);
+ EditorGUILayout.PropertyField(_propDisplayInEditor);
+ EditorGUILayout.PropertyField(_propNoDefaultDisplay);
+ if (!_propNoDefaultDisplay.boolValue)
+ {
+ EditorGUILayout.PropertyField(_propDefaultTexture);
+ }
+ AppearanceControlsGUI();
+ RaycastControlsGUI();
+ EditorGUILayout.PropertyField(_propUVRect, m_guiTextUVRectContent);
+
+ EditorGUILayout.PropertyField(_propSetNativeSize);
+ EditorGUILayout.PropertyField(_propScaleMode);
+
+ SetShowNativeSize(false);
+ NativeSizeButtonGUI();
+
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ private void SetShowNativeSize(bool instant)
+ {
+ base.SetShowNativeSize(_propMediaPlayer.objectReferenceValue != null, instant);
+ }
+
+ ///
+ /// Allow the texture to be previewed.
+ ///
+ public override bool HasPreviewGUI()
+ {
+ DisplayUGUI rawImage = target as DisplayUGUI;
+ return rawImage != null;
+ }
+
+ ///
+ /// Draw the Image preview.
+ ///
+ public override void OnPreviewGUI(Rect drawArea, GUIStyle background)
+ {
+ DisplayUGUI rawImage = target as DisplayUGUI;
+ Texture tex = rawImage.mainTexture;
+
+ if (tex == null)
+ return;
+
+ // Create the texture rectangle that is centered inside rect.
+ Rect outerRect = drawArea;
+
+ Matrix4x4 m = GUI.matrix;
+ // Flip the image vertically
+ if (rawImage.HasValidTexture())
+ {
+ if (rawImage.Player.TextureProducer.RequiresVerticalFlip())
+ {
+ GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0f, outerRect.y + (outerRect.height / 2f)));
+ }
+ }
+
+ EditorGUI.DrawTextureTransparent(outerRect, tex, ScaleMode.ScaleToFit);//, outer.width / outer.height);
+ //SpriteDrawUtility.DrawSprite(tex, rect, outer, rawImage.uvRect, rawImage.canvasRenderer.GetColor());
+
+ GUI.matrix = m;
+ }
+
+ ///
+ /// Info String drawn at the bottom of the Preview
+ ///
+ public override string GetInfoString()
+ {
+ DisplayUGUI rawImage = target as DisplayUGUI;
+
+ string text = string.Empty;
+ if (rawImage.HasValidTexture())
+ {
+ text += string.Format("Video Size: {0}x{1}\n",
+ Mathf.RoundToInt(Mathf.Abs(rawImage.mainTexture.width)),
+ Mathf.RoundToInt(Mathf.Abs(rawImage.mainTexture.height)));
+ }
+
+ // Image size Text
+ text += string.Format("Display Size: {0}x{1}",
+ Mathf.RoundToInt(Mathf.Abs(rawImage.rectTransform.rect.width)),
+ Mathf.RoundToInt(Mathf.Abs(rawImage.rectTransform.rect.height)));
+
+ return text;
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/DisplayUGUIEditor.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/DisplayUGUIEditor.cs.meta
new file mode 100755
index 0000000..7847153
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/DisplayUGUIEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0e20933bfdb909544b98bc0de2926c4c
+timeCreated: 1438726873
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/_AVProVideo.Extensions.UnityUI.Editor.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/_AVProVideo.Extensions.UnityUI.Editor.asmdef
new file mode 100755
index 0000000..39aadab
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/_AVProVideo.Extensions.UnityUI.Editor.asmdef
@@ -0,0 +1,12 @@
+{
+ "name": "AVProVideo.Extensions.UnityUI.Editor",
+ "references": [
+ "AVProVideo.Runtime",
+ "AVProVideo.Editor",
+ "AVProVideo.Extensions.UnityUI"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/_AVProVideo.Extensions.UnityUI.Editor.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/_AVProVideo.Extensions.UnityUI.Editor.asmdef.meta
new file mode 100755
index 0000000..cc2ca09
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Editor/_AVProVideo.Extensions.UnityUI.Editor.asmdef.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 163aa7dfc21664e47a9d1ce803fb3e3f
+timeCreated: 1591797492
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime.meta
new file mode 100755
index 0000000..705d85c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d60008e579848de489d8104d999e0afa
+folderAsset: yes
+timeCreated: 1591797614
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/DisplayUGUI.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/DisplayUGUI.cs
new file mode 100755
index 0000000..f5a44e2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/DisplayUGUI.cs
@@ -0,0 +1,706 @@
+// UnityEngine.UI was moved to a package in 2019.2.0
+// Unfortunately no way to test for this across all Unity versions yet
+// You can set up the asmdef to reference the new package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+#define AVPRO_PACKAGE_UNITYUI
+#if (UNITY_2019_2_OR_NEWER && AVPRO_PACKAGE_UNITYUI) || (!UNITY_2019_2_OR_NEWER)
+
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS
+ #define UNITY_PLATFORM_SUPPORTS_YPCBCR
+#endif
+
+#if UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_WSA_10_0 || UNITY_IOS || UNITY_TVOS || UNITY_ANDROID || (UNITY_WEBGL && UNITY_2017_2_OR_NEWER)
+ #define UNITY_PLATFORM_SUPPORTS_LINEAR
+#endif
+
+#if (!UNITY_STANDALONE_WIN && !UNITY_EDITOR_WIN) && (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID)
+ #define UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM
+#endif
+#if (UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN))
+ #define UNITY_PLATFORM_SUPPORTS_VIDEOASPECTRATIO
+#endif
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Serialization;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Displays the video from MediaPlayer component using uGUI
+ ///
+ [HelpURL("http://renderheads.com/products/avpro-video/")]
+ [AddComponentMenu("AVPro Video/Display uGUI", 200)]
+ //[ExecuteInEditMode]
+ public class DisplayUGUI : MaskableGraphic
+ {
+ [SerializeField] MediaPlayer _mediaPlayer;
+
+ public MediaPlayer Player
+ {
+ get { return _mediaPlayer; }
+ set { ChangeMediaPlayer(value); }
+ }
+
+ [Tooltip("Default texture to display when the video texture is preparing")]
+ [SerializeField] Texture _defaultTexture;
+
+ public Texture DefaultTexture
+ {
+ get { return _defaultTexture; }
+ set { if (_defaultTexture != value) { _defaultTexture = value; } }
+ }
+
+ [FormerlySerializedAs("m_UVRect")]
+ [SerializeField] Rect _uvRect = new Rect(0f, 0f, 1f, 1f);
+
+ public Rect UVRect
+ {
+ get { return _uvRect; }
+ set { _uvRect = value; }
+ }
+
+ [SerializeField] bool _setNativeSize = false;
+
+ public bool ApplyNativeSize
+ {
+ get { return _setNativeSize; }
+ set { _setNativeSize = value; }
+ }
+
+ [SerializeField] ScaleMode _scaleMode = ScaleMode.ScaleToFit;
+
+ public ScaleMode ScaleMode
+ {
+ get { return _scaleMode; }
+ set { _scaleMode = value; }
+ }
+
+ [SerializeField] bool _noDefaultDisplay = true;
+
+ public bool NoDefaultDisplay
+ {
+ get { return _noDefaultDisplay; }
+ set { _noDefaultDisplay = value; }
+ }
+
+ [SerializeField] bool _displayInEditor = true;
+
+ public bool DisplayInEditor
+ {
+ get { return _displayInEditor; }
+ set { _displayInEditor = value; }
+ }
+
+ private int _lastWidth;
+ private int _lastHeight;
+ private Orientation _lastOrientation;
+ private bool _flipY;
+ private Texture _lastTexture;
+ private static Shader _shaderStereoPacking;
+ private static Shader _shaderAlphaPacking;
+ private static Shader _shaderAndroidOES;
+ private static Shader _shaderAndroidOESAlphaPacking;
+
+ private bool _isUserMaterial = true;
+ private Material _material;
+
+ private List _vertices = new List(4);
+ private static List QuadIndices = new List(new int[] { 0, 1, 2, 2, 3, 0 });
+
+ protected override void Awake()
+ {
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.AddListener(OnMediaPlayerEvent);
+ }
+
+ base.Awake();
+ }
+
+ // Callback function to handle events
+ private void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.FirstFrameReady:
+ if (_isUserMaterial && null != GetRequiredShader())
+ {
+ Debug.LogWarning("[AVProVideo] Custom material is being used but the video requires our internal shader for correct rendering. Consider removing custom shader or modifying it for AVPro Video support.", this);
+ }
+ LateUpdate();
+ break;
+ case MediaPlayerEvent.EventType.PropertiesChanged:
+ case MediaPlayerEvent.EventType.ResolutionChanged:
+ case MediaPlayerEvent.EventType.Closing:
+ LateUpdate();
+ break;
+ }
+ // TODO: remove this, we're just doing this so we can make sure texture is correct when running in EDIT mode
+ LateUpdate();
+ }
+
+ private void ChangeMediaPlayer(MediaPlayer player)
+ {
+ if (_mediaPlayer != player)
+ {
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.RemoveListener(OnMediaPlayerEvent);
+ }
+ _mediaPlayer = player;
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.AddListener(OnMediaPlayerEvent);
+ }
+ LateUpdate();
+ }
+ }
+
+ private static Shader EnsureShader(Shader shader, string name)
+ {
+ if (shader == null)
+ {
+ shader = Shader.Find(name);
+ if (shader == null)
+ {
+ Debug.LogWarning("[AVProVideo] Missing shader " + name);
+ }
+ }
+
+ return shader;
+ }
+
+ private static Shader EnsureAlphaPackingShader()
+ {
+ _shaderAlphaPacking = EnsureShader(_shaderAlphaPacking, "AVProVideo/Internal/UI/Transparent Packed (stereo)");
+ return _shaderAlphaPacking;
+ }
+
+ private static Shader EnsureStereoPackingShader()
+ {
+ _shaderStereoPacking = EnsureShader(_shaderStereoPacking, "AVProVideo/Internal/UI/Stereo");
+ return _shaderStereoPacking;
+ }
+
+ private Shader EnsureAndroidOESShader()
+ {
+ _shaderAndroidOES = EnsureShader(_shaderAndroidOES, "AVProVideo/Internal/UI/Stereo - AndroidOES");
+ return _shaderAndroidOES;
+ }
+
+ private static Shader EnsureAndroidOESAlphaPackingShader()
+ {
+ _shaderAndroidOESAlphaPacking = EnsureShader(_shaderAndroidOESAlphaPacking, "AVProVideo/Internal/UI/Transparent Packed (stereo) - AndroidOES");
+ return _shaderAndroidOESAlphaPacking;
+ }
+
+ protected override void Start()
+ {
+ _isUserMaterial = (this.m_Material != null);
+ if (_isUserMaterial)
+ {
+ _material = new Material(this.material);
+ this.material = _material;
+ }
+ base.Start();
+ }
+
+ protected override void OnDestroy()
+ {
+ // Destroy existing material
+ if (_material != null)
+ {
+ this.material = null;
+
+#if UNITY_EDITOR
+ Material.DestroyImmediate(_material);
+#else
+ Material.Destroy(_material);
+#endif
+ _material = null;
+ }
+ ChangeMediaPlayer(null);
+ base.OnDestroy();
+ }
+
+ private Shader GetRequiredShader()
+ {
+ Shader result = null;
+
+ if (result == null && _mediaPlayer.TextureProducer != null)
+ {
+ switch (_mediaPlayer.TextureProducer.GetTextureStereoPacking())
+ {
+ case StereoPacking.None:
+ break;
+ case StereoPacking.LeftRight:
+ case StereoPacking.TopBottom:
+ case StereoPacking.TwoTextures:
+ result = EnsureStereoPackingShader();
+ break;
+ }
+
+ if (_mediaPlayer.TextureProducer.GetTextureTransparency() == TransparencyMode.Transparent)
+ {
+ result = EnsureAlphaPackingShader();
+ }
+
+ switch (_mediaPlayer.TextureProducer.GetTextureAlphaPacking())
+ {
+ case AlphaPacking.None:
+ break;
+ case AlphaPacking.LeftRight:
+ case AlphaPacking.TopBottom:
+ result = EnsureAlphaPackingShader();
+ break;
+ }
+ }
+
+#if UNITY_PLATFORM_SUPPORTS_LINEAR
+ if (result == null && _mediaPlayer.Info != null)
+ {
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear && !_mediaPlayer.Info.PlayerSupportsLinearColorSpace())
+ {
+ result = EnsureAlphaPackingShader();
+ }
+ }
+#endif
+ if (result == null && _mediaPlayer.TextureProducer != null && _mediaPlayer.TextureProducer.GetTextureCount() == 2)
+ {
+ result = EnsureAlphaPackingShader();
+ }
+
+// if (_mediaPlayer.TextureProducer != null && _mediaPlayer.IsUsingAndroidOESPath() && (_defaultTexture == null || _lastTexture != _defaultTexture ))
+ if (_mediaPlayer.TextureProducer != null && _mediaPlayer.IsUsingAndroidOESPath())
+ {
+ // This shader handles stereo too
+ result = EnsureAndroidOESShader();
+
+ if (_mediaPlayer.TextureProducer.GetTextureTransparency() == TransparencyMode.Transparent)
+ {
+ result = EnsureAndroidOESAlphaPackingShader();
+ }
+ switch (_mediaPlayer.TextureProducer.GetTextureAlphaPacking())
+ {
+ case AlphaPacking.None:
+ break;
+ case AlphaPacking.LeftRight:
+ case AlphaPacking.TopBottom:
+ result = EnsureAndroidOESAlphaPackingShader();
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ ///
+ /// Returns the texture used to draw this Graphic.
+ ///
+ public override Texture mainTexture
+ {
+ get
+ {
+ Texture result = Texture2D.whiteTexture;
+ if (HasValidTexture())
+ {
+ Texture resamplerTex = _mediaPlayer.FrameResampler == null || _mediaPlayer.FrameResampler.OutputTexture == null ? null : _mediaPlayer.FrameResampler.OutputTexture[0];
+ result = _mediaPlayer.UseResampler ? resamplerTex : _mediaPlayer.TextureProducer.GetTexture();
+ }
+ else
+ {
+ if (_noDefaultDisplay)
+ {
+ result = null;
+ }
+ else if (_defaultTexture != null)
+ {
+ result = _defaultTexture;
+ }
+
+#if UNITY_EDITOR
+ if (result == null && _displayInEditor)
+ {
+ result = Resources.Load("AVProVideoIcon");
+ }
+#endif
+ }
+ return result;
+ }
+ }
+
+ public bool HasValidTexture()
+ {
+ return (Application.isPlaying && _mediaPlayer != null && _mediaPlayer.TextureProducer != null && _mediaPlayer.TextureProducer.GetTexture() != null);
+ }
+
+ private void UpdateInternalMaterial()
+ {
+ if (_mediaPlayer != null)
+ {
+ // Get required shader
+ Shader currentShader = null;
+ if (_material != null)
+ {
+ currentShader = _material.shader;
+ }
+ Shader nextShader = GetRequiredShader();
+
+ // If the shader requirement has changed
+ if (currentShader != nextShader)
+ {
+ // Destroy existing material
+ if (_material != null)
+ {
+ this.material = null;
+#if UNITY_EDITOR
+ Material.DestroyImmediate(_material);
+#else
+ Material.Destroy(_material);
+#endif
+ _material = null;
+ }
+
+ // Create new material
+ if (nextShader != null)
+ {
+ _material = new Material(nextShader);
+ }
+ }
+
+ this.material = _material;
+ }
+ }
+
+ // We do a LateUpdate() to allow for any changes in the texture that may have happened in Update()
+ void LateUpdate()
+ {
+ if (_setNativeSize)
+ {
+ SetNativeSize();
+ }
+
+ if (_lastTexture != mainTexture)
+ {
+ _lastTexture = mainTexture;
+ SetVerticesDirty();
+ SetMaterialDirty();
+ }
+
+ if (HasValidTexture())
+ {
+ if (mainTexture != null)
+ {
+ Orientation orientation = Helper.GetOrientation(_mediaPlayer.Info.GetTextureTransform());
+ if (mainTexture.width != _lastWidth || mainTexture.height != _lastHeight || orientation != _lastOrientation)
+ {
+ _lastWidth = mainTexture.width;
+ _lastHeight = mainTexture.height;
+ _lastOrientation = orientation;
+ SetVerticesDirty();
+ SetMaterialDirty();
+ }
+ }
+ }
+
+ if (Application.isPlaying)
+ {
+ if (!_isUserMaterial)
+ {
+ UpdateInternalMaterial();
+ }
+ }
+
+ if (material != null && _mediaPlayer != null)
+ {
+ // TODO: only run when dirty
+ VideoRender.SetupMaterialForMedia(materialForRendering, _mediaPlayer);
+ }
+ }
+
+ ///
+ /// Texture to be used.
+ ///
+ public MediaPlayer CurrentMediaPlayer
+ {
+ get
+ {
+ return _mediaPlayer;
+ }
+ set
+ {
+ if (_mediaPlayer != value)
+ {
+ _mediaPlayer = value;
+ //SetVerticesDirty();
+ SetMaterialDirty();
+ }
+ }
+ }
+
+ ///
+ /// UV rectangle used by the texture.
+ ///
+ public Rect uvRect
+ {
+ get
+ {
+ return _uvRect;
+ }
+ set
+ {
+ if (_uvRect == value)
+ {
+ return;
+ }
+ _uvRect = value;
+ SetVerticesDirty();
+ }
+ }
+
+ ///
+ /// Adjust the scale of the Graphic to make it pixel-perfect.
+ ///
+ [ContextMenu("Set Native Size")]
+ public override void SetNativeSize()
+ {
+ Texture tex = mainTexture;
+ if (tex != null)
+ {
+ int w = Mathf.RoundToInt(tex.width * uvRect.width);
+ int h = Mathf.RoundToInt(tex.height * uvRect.height);
+
+ if (_mediaPlayer != null)
+ {
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM && !(!UNITY_EDITOR && UNITY_ANDROID)
+ if (_mediaPlayer.Info != null)
+ {
+ Orientation ori = Helper.GetOrientation(_mediaPlayer.Info.GetTextureTransform());
+ if (ori == Orientation.Portrait || ori == Orientation.PortraitFlipped)
+ {
+ w = Mathf.RoundToInt(tex.height * uvRect.width);
+ h = Mathf.RoundToInt(tex.width * uvRect.height);
+ }
+ }
+#endif
+ if (_mediaPlayer.TextureProducer != null)
+ {
+ if (_mediaPlayer.TextureProducer.GetTextureAlphaPacking() == AlphaPacking.LeftRight ||
+ _mediaPlayer.TextureProducer.GetTextureStereoPacking() == StereoPacking.LeftRight)
+ {
+ w /= 2;
+ }
+ else if (_mediaPlayer.TextureProducer.GetTextureAlphaPacking() == AlphaPacking.TopBottom ||
+ _mediaPlayer.TextureProducer.GetTextureStereoPacking() == StereoPacking.TopBottom)
+ {
+ h /= 2;
+ }
+ }
+ }
+
+ rectTransform.anchorMax = rectTransform.anchorMin;
+ rectTransform.sizeDelta = new Vector2(w, h);
+ }
+ }
+
+ protected override void OnPopulateMesh(VertexHelper vh)
+ {
+ vh.Clear();
+
+ _OnFillVBO(_vertices);
+
+ vh.AddUIVertexStream(_vertices, QuadIndices );
+ }
+
+ private void _OnFillVBO(List vbo)
+ {
+ _flipY = false;
+ if (HasValidTexture())
+ {
+ _flipY = _mediaPlayer.TextureProducer.RequiresVerticalFlip();
+ }
+
+ Rect uvRect = _uvRect;
+ Vector4 v = GetDrawingDimensions(_scaleMode, ref uvRect);
+
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM
+ Matrix4x4 m = Matrix4x4.identity;
+ if (HasValidTexture())
+ {
+ m = Helper.GetMatrixForOrientation(Helper.GetOrientation(_mediaPlayer.Info.GetTextureTransform()));
+ }
+#endif
+
+ vbo.Clear();
+
+ var vert = UIVertex.simpleVert;
+ vert.color = color;
+
+ vert.position = new Vector2(v.x, v.y);
+
+ vert.uv0 = new Vector2(uvRect.xMin, uvRect.yMin);
+ if (_flipY)
+ {
+ vert.uv0 = new Vector2(uvRect.xMin, 1.0f - uvRect.yMin);
+ }
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM
+ vert.uv0 = m.MultiplyPoint3x4(vert.uv0);
+#endif
+ vbo.Add(vert);
+
+ vert.position = new Vector2(v.x, v.w);
+ vert.uv0 = new Vector2(uvRect.xMin, uvRect.yMax);
+ if (_flipY)
+ {
+ vert.uv0 = new Vector2(uvRect.xMin, 1.0f - uvRect.yMax);
+ }
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM
+ vert.uv0 = m.MultiplyPoint3x4(vert.uv0);
+#endif
+ vbo.Add(vert);
+
+ vert.position = new Vector2(v.z, v.w);
+ vert.uv0 = new Vector2(uvRect.xMax, uvRect.yMax);
+ if (_flipY)
+ {
+ vert.uv0 = new Vector2(uvRect.xMax, 1.0f - uvRect.yMax);
+ }
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM
+ vert.uv0 = m.MultiplyPoint3x4(vert.uv0);
+#endif
+ vbo.Add(vert);
+
+ vert.position = new Vector2(v.z, v.y);
+ vert.uv0 = new Vector2(uvRect.xMax, uvRect.yMin);
+ if (_flipY)
+ {
+ vert.uv0 = new Vector2(uvRect.xMax, 1.0f - uvRect.yMin);
+ }
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM
+ vert.uv0 = m.MultiplyPoint3x4(vert.uv0);
+#endif
+ vbo.Add(vert);
+ }
+
+ private Vector4 GetDrawingDimensions(ScaleMode scaleMode, ref Rect uvRect)
+ {
+ Vector4 returnSize = Vector4.zero;
+
+ if (mainTexture != null)
+ {
+ var padding = Vector4.zero;
+
+ var textureSize = new Vector2(mainTexture.width, mainTexture.height);
+ {
+ // Adjust textureSize based on orientation
+#if UNITY_PLATFORM_SUPPORTS_VIDEOTRANSFORM && !(!UNITY_EDITOR && UNITY_ANDROID)
+ if (HasValidTexture())
+ {
+ Matrix4x4 m = Helper.GetMatrixForOrientation(Helper.GetOrientation(_mediaPlayer.Info.GetTextureTransform()));
+ textureSize = m.MultiplyVector(textureSize);
+ textureSize.x = Mathf.Abs(textureSize.x);
+ textureSize.y = Mathf.Abs(textureSize.y);
+ }
+#endif
+#if UNITY_PLATFORM_SUPPORTS_VIDEOASPECTRATIO
+ if (HasValidTexture())
+ {
+ float par = _mediaPlayer.TextureProducer.GetTexturePixelAspectRatio();
+ if (par > 0f)
+ {
+ if (par > 1f)
+ {
+ textureSize.x *= par;
+ }
+ else
+ {
+ textureSize.y /= par;
+ }
+ }
+ }
+#endif
+ // Adjust textureSize based on alpha/stereo packing
+ if (_mediaPlayer != null && _mediaPlayer.TextureProducer != null)
+ {
+ if (_mediaPlayer.TextureProducer.GetTextureAlphaPacking() == AlphaPacking.LeftRight ||
+ _mediaPlayer.TextureProducer.GetTextureStereoPacking() == StereoPacking.LeftRight)
+ {
+ textureSize.x /= 2;
+ }
+ else if (_mediaPlayer.TextureProducer.GetTextureAlphaPacking() == AlphaPacking.TopBottom ||
+ _mediaPlayer.TextureProducer.GetTextureStereoPacking() == StereoPacking.TopBottom)
+ {
+ textureSize.y /= 2;
+ }
+ }
+ }
+
+ Rect r = GetPixelAdjustedRect();
+
+ // Fit the above textureSize into rectangle r
+ int spriteW = Mathf.RoundToInt( textureSize.x );
+ int spriteH = Mathf.RoundToInt( textureSize.y );
+
+ var size = new Vector4( padding.x / spriteW,
+ padding.y / spriteH,
+ (spriteW - padding.z) / spriteW,
+ (spriteH - padding.w) / spriteH );
+
+
+ {
+ if (textureSize.sqrMagnitude > 0.0f)
+ {
+ if (scaleMode == ScaleMode.ScaleToFit)
+ {
+ float spriteRatio = textureSize.x / textureSize.y;
+ float rectRatio = r.width / r.height;
+
+ if (spriteRatio > rectRatio)
+ {
+ float oldHeight = r.height;
+ r.height = r.width * (1.0f / spriteRatio);
+ r.y += (oldHeight - r.height) * rectTransform.pivot.y;
+ }
+ else
+ {
+ float oldWidth = r.width;
+ r.width = r.height * spriteRatio;
+ r.x += (oldWidth - r.width) * rectTransform.pivot.x;
+ }
+ }
+ else if (scaleMode == ScaleMode.ScaleAndCrop)
+ {
+ float aspectRatio = textureSize.x / textureSize.y;
+ float screenRatio = r.width / r.height;
+ if (screenRatio > aspectRatio)
+ {
+ float adjust = aspectRatio / screenRatio;
+ uvRect = new Rect(uvRect.xMin, (uvRect.yMin * adjust) + (1f - adjust) * 0.5f, uvRect.width, adjust * uvRect.height);
+ }
+ else
+ {
+ float adjust = screenRatio / aspectRatio;
+ uvRect = new Rect(uvRect.xMin * adjust + (0.5f - adjust * 0.5f), uvRect.yMin, adjust * uvRect.width, uvRect.height);
+ }
+ }
+ }
+ }
+
+ returnSize = new Vector4( r.x + r.width * size.x,
+ r.y + r.height * size.y,
+ r.x + r.width * size.z,
+ r.y + r.height * size.w );
+
+ }
+
+ return returnSize;
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/DisplayUGUI.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/DisplayUGUI.cs.meta
new file mode 100755
index 0000000..6ef5324
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/DisplayUGUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0f17cdc186456a4469a139a104d2ca72
+timeCreated: 1544813301
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/SubtitlesUGUI.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/SubtitlesUGUI.cs
new file mode 100755
index 0000000..ba2eec9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/SubtitlesUGUI.cs
@@ -0,0 +1,130 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Update a standard uGUI Text element with subtitle text as it plays from the MediaPlayer
+ ///
+ [AddComponentMenu("AVPro Video/Subtitles uGUI", 201)]
+ [HelpURL("http://renderheads.com/products/avpro-video/")]
+ public class SubtitlesUGUI : MonoBehaviour
+ {
+ [SerializeField] MediaPlayer _mediaPlayer = null;
+ [SerializeField] Text _text = null;
+ [SerializeField] Image _backgroundImage = null;
+ [SerializeField] int _backgroundHorizontalPadding = 32;
+ [SerializeField] int _backgroundVerticalPadding = 16;
+ [SerializeField, Range(-1, 1024)] int _maxCharacters = 256;
+
+ public MediaPlayer Player
+ {
+ set { ChangeMediaPlayer(value); }
+ get { return _mediaPlayer; }
+ }
+
+ public Text Text
+ {
+ set { _text = value; }
+ get { return _text; }
+ }
+
+ void Start()
+ {
+ ChangeMediaPlayer(_mediaPlayer);
+ }
+
+ void OnDestroy()
+ {
+ ChangeMediaPlayer(null);
+ }
+
+ void Update()
+ {
+ // TODO: Currently we need to call this each frame, as when it is called right after SetText()
+ // the ContentSizeFitter hasn't run yet, so effectively the box is a frame behind.
+ UpdateBackgroundRect();
+ }
+
+ public void ChangeMediaPlayer(MediaPlayer newPlayer)
+ {
+ // When changing the media player, handle event subscriptions
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.RemoveListener(OnMediaPlayerEvent);
+ _mediaPlayer = null;
+ }
+
+ SetText(string.Empty);
+
+ if (newPlayer != null)
+ {
+ newPlayer.Events.AddListener(OnMediaPlayerEvent);
+ _mediaPlayer = newPlayer;
+ }
+ }
+
+ private void SetText(string text)
+ {
+ _text.text = text;
+ UpdateBackgroundRect();
+ }
+
+ private string PrepareText(string text)
+ {
+ // Crop text that is too long
+ if (_maxCharacters >= 0 && text.Length > _maxCharacters)
+ {
+ text = text.Substring(0, _maxCharacters);
+ }
+
+ // Change RichText for Unity uGUI Text
+ text = text.Replace("", "");
+ text = text.Replace("", string.Empty);
+ text = text.Replace("", string.Empty);
+ return text;
+ }
+
+ private void UpdateBackgroundRect()
+ {
+ if (_backgroundImage)
+ {
+ if (string.IsNullOrEmpty(_text.text))
+ {
+ _backgroundImage.enabled = false;
+ }
+ else
+ {
+ _backgroundImage.enabled = true;
+ _backgroundImage.rectTransform.sizeDelta = _text.rectTransform.sizeDelta;
+ _backgroundImage.rectTransform.anchoredPosition = _text.rectTransform.anchoredPosition;
+ _backgroundImage.rectTransform.offsetMin -= new Vector2(_backgroundHorizontalPadding, _backgroundVerticalPadding);
+ _backgroundImage.rectTransform.offsetMax += new Vector2(_backgroundHorizontalPadding, _backgroundVerticalPadding);
+ }
+ }
+ }
+
+ // Callback function to handle events
+ private void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.Closing:
+ {
+ SetText(string.Empty);
+ break;
+ }
+ case MediaPlayerEvent.EventType.SubtitleChange:
+ {
+ SetText(PrepareText(_mediaPlayer.Subtitles.GetSubtitleText()));
+ break;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/SubtitlesUGUI.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/SubtitlesUGUI.cs.meta
new file mode 100755
index 0000000..ea5abc0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/Runtime/SubtitlesUGUI.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2d4bbe43657314a49a5f730e66dafebd
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/_AVProVideo.Extensions.UnityUI.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/_AVProVideo.Extensions.UnityUI.asmdef
new file mode 100755
index 0000000..d9677dd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/_AVProVideo.Extensions.UnityUI.asmdef
@@ -0,0 +1,8 @@
+{
+ "name": "AVProVideo.Extensions.UnityUI",
+ "references": [
+ "AVProVideo.Runtime"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/_AVProVideo.Extensions.UnityUI.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/_AVProVideo.Extensions.UnityUI.asmdef.meta
new file mode 100755
index 0000000..23d7b7f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/UnityUI/_AVProVideo.Extensions.UnityUI.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3bd657f68851a7f448c82186c6797ee0
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph.meta
new file mode 100755
index 0000000..655e614
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 017104cd07f4a72439b9bb8ffd34b807
+folderAsset: yes
+timeCreated: 1587506896
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/ApplyToVfxGraph.cs b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/ApplyToVfxGraph.cs
new file mode 100755
index 0000000..452690f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/ApplyToVfxGraph.cs
@@ -0,0 +1,152 @@
+// You need to define AVPRO_PACKAGE_VFXGRAPH manually to use this script
+// We could set up the asmdef to reference the package, but the package doesn't
+// existing in Unity 2017 etc, and it throws an error due to missing reference
+//#define AVPRO_PACKAGE_VFXGRAPH
+#if (UNITY_2018_3_OR_NEWER && AVPRO_PACKAGE_VFXGRAPH)
+using UnityEngine;
+using UnityEngine.VFX;
+using RenderHeads.Media.AVProVideo;
+
+//-----------------------------------------------------------------------------
+// Copyright 2019-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Sets the texture from the MediaPlayer to a texture parameter in a VFX Graph
+ ///
+ [AddComponentMenu("AVPro Video/Apply To VFX Graph", 300)]
+ [HelpURL("http://renderheads.com/products/avpro-video/")]
+ public class ApplyToVfxGraph : MonoBehaviour
+ {
+ [Header("Media Source")]
+
+ [SerializeField] MediaPlayer _mediaPlayer = null;
+
+ [Tooltip("Default texture to display when the video texture is preparing")]
+ [SerializeField] Texture2D _defaultTexture = null;
+
+ [Space(8f)]
+ [Header("VFX Target")]
+
+ [SerializeField] VisualEffect _visualEffect = null;
+ [SerializeField] string _texturePropertyName = string.Empty;
+
+ public Texture2D DefaultTexture
+ {
+ get { return _defaultTexture; }
+ set { if (_defaultTexture != value) { _defaultTexture = value; _isDirty = true; } }
+ }
+
+ public VisualEffect VisualEffect
+ {
+ get { return _visualEffect; }
+ set { _visualEffect = value; _isDirty = true; }
+ }
+
+ public string TexturePropertyName
+ {
+ get { return _texturePropertyName; }
+ set { _texturePropertyName = value; _textureProp = Shader.PropertyToID(_texturePropertyName); _isDirty = true; }
+ }
+
+ public MediaPlayer MediaPlayer
+ {
+ get { return _mediaPlayer; }
+ set { ChangeMediaPlayer(value); }
+ }
+
+ private bool _isDirty = true;
+ private int _textureProp = 0;
+
+ void OnEnable()
+ {
+ // Force evaluations
+ TexturePropertyName = _texturePropertyName;
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.AddListener(OnMediaPlayerEvent);
+ }
+ }
+
+#if UNITY_EDITOR
+ void OnValidate()
+ {
+ _isDirty = true;
+ }
+#endif
+
+ void OnDisable()
+ {
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.RemoveListener(OnMediaPlayerEvent);
+ }
+ }
+
+ // Callback function to handle events
+ private void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.FirstFrameReady:
+ case MediaPlayerEvent.EventType.PropertiesChanged:
+ ForceUpdate();
+ break;
+ case MediaPlayerEvent.EventType.Closing:
+ _isDirty = true; // Allow the update to happen on the next frame, as the video is still closing
+ break;
+ }
+ }
+
+ private void ChangeMediaPlayer(MediaPlayer player)
+ {
+ if (_mediaPlayer != player)
+ {
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.RemoveListener(OnMediaPlayerEvent);
+ }
+ _mediaPlayer = player;
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.AddListener(OnMediaPlayerEvent);
+ }
+ _isDirty = true;
+ }
+ }
+
+ public void ForceUpdate()
+ {
+ _isDirty = true;
+ LateUpdate();
+ }
+
+ void LateUpdate()
+ {
+ if (_isDirty)
+ {
+ ApplyMapping();
+ }
+ }
+
+ private void ApplyMapping()
+ {
+ if (_visualEffect != null && !string.IsNullOrEmpty(_texturePropertyName))
+ {
+ if (_mediaPlayer != null && _mediaPlayer.TextureProducer != null && _mediaPlayer.TextureProducer.GetTexture() != null)
+ {
+ _visualEffect.SetTexture(_textureProp, _mediaPlayer.TextureProducer.GetTexture());
+ _isDirty = false;
+ }
+ else if (_defaultTexture != null)
+ {
+ _visualEffect.SetTexture(_textureProp, _defaultTexture);
+ _isDirty = false;
+ }
+ }
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/ApplyToVfxGraph.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/ApplyToVfxGraph.cs.meta
new file mode 100755
index 0000000..3fc7348
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/ApplyToVfxGraph.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 876043e54db05b045a4c75425318e3f1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/_AVProVideo.Extensions.VisualEffectGraph.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/_AVProVideo.Extensions.VisualEffectGraph.asmdef
new file mode 100755
index 0000000..5caeaac
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/_AVProVideo.Extensions.VisualEffectGraph.asmdef
@@ -0,0 +1,9 @@
+{
+ "name": "AVProVideo.Extensions.VisualEffectGraph",
+ "references": [
+ "AVProVideo.Runtime"
+ ],
+ "optionalUnityReferences": [],
+ "includePlatforms": [],
+ "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/_AVProVideo.Extensions.VisualEffectGraph.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/_AVProVideo.Extensions.VisualEffectGraph.asmdef.meta
new file mode 100755
index 0000000..d5dd014
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Extensions/VisualEffectGraph/_AVProVideo.Extensions.VisualEffectGraph.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 00c900f8a139a2540ab354c9ce09ac0e
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses.meta
new file mode 100755
index 0000000..8cc72cd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: ef2ae43ab160a7b4c915a3b986a03770
+folderAsset: yes
+timeCreated: 1607543899
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/ExoPlayer-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/ExoPlayer-License.txt
new file mode 100755
index 0000000..d645695
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/ExoPlayer-License.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/ExoPlayer-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/ExoPlayer-License.txt.meta
new file mode 100755
index 0000000..cb84a48
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/ExoPlayer-License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: be9775e9ca2e05246805ef637f2620a6
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/FacebookAudio360-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/FacebookAudio360-License.txt
new file mode 100755
index 0000000..c185e06
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/FacebookAudio360-License.txt
@@ -0,0 +1,22 @@
+Facebook 360 Audio Terms
+These Facebook 360 Audio Terms (“Terms”) govern your use of the Facebook 360 Audio Engine software (including any updates, upgrades and/or new versions thereof that are made available to you) (collectively, the “Software”). By clicking “Download” and accessing or using the Software, you agree to the Terms.
+
+Last updated on 11 August 2017
+
+1. Subject to these Terms, Facebook hereby grants to you a worldwide, non-exclusive, no-charge, non-transferable, non-sublicenseable, royalty-free copyright license to (a) use and reproduce the Software in object code format for inclusion in your applications, content, games, and demos (collectively referred to as “Developer Content”), and (b) distribute the Software solely as incorporated in your Developer Content.
+2. You agree:
+a) Not to copy or use the Software for any purpose except as expressley permitted by these Terms;
+b) Not to modify, disassemble, decompile or otherwise reverse engineer the Software;
+c) To ensure that your employees, agents and other parties under your control who will use the Software do so in accordance with these Terms and are accordingly notified of the same;
+d) Not to permit or facilitate the use of the Software in any manner which would constitute a breach of these Terms; and
+e) Not to place or distribute the Software (except as incorporated in your Developer Content) on any website, File Transfer Protocol server or similar location without the express prior written consent of Facebook.
+3. You will use reasonable efforts to include in the Developer Content any logo, audio badge and/or other branding for the Software that Facebook may reasonably request, and Facebook hereby grants you a limited, non-exclusive, non-transferable, non-sublicenseable license to use such branding assets solely in the manner Facebook requests.
+4. Facebook may make changes to these Terms at any time by notifying you in writing (including email) describing the changes made. Any such changes will become effective, and will be deemed accepted by you, thirty (30) days following your receipt of notice (except any changes Facebook notifies you are required by law, which will become effective immediately) (the “Notice Period”). If you do not agree to any or all changes to these Terms, you must cease use of the Software during the Notice Period as to any prospective Developer Content, which will be your sole and exclusive remedy. Any then-existing Developer Content will continue to be governed by the then-prior version of these Terms. You agree that your continued use of the Software after the Notice Period constitutes your agreement to the applicable changes to these Terms.
+5. Facebook reserves the right to terminate these Terms and all your rights hereunder in the event: (a) you materially breach these Terms and fail to cure such breach within ten (10) business days after notice of breach from Facebook; (b) a claim is threatened or made by a third party that the Developer Content infringes its intellectual property or proprietary rights; (c) the Developer Content violates or infringes applicable law; or (d) Facebook believes in good faith that your use of the Software poses a risk to, or could adversely impact, Facebook’s or its affiliates’ products or business. Termination pursuant to this Section 5 shall be effective: (i) immediately upon notice from Facebook for termination under the foregoing subsections (b) or (c), and (ii) within thirty (30) days’ after notice from Facebook for termination under subsection (d). Termination under subsection (d) shall be effective as to any prospective Developer Content but not as to any then-existing Developer Content, provided, however, that you shall use commercially reasonable efforts to create and distribute new versions of the Developer Content during such thirty (30) day notice period which does not utilize the Software (“New Versions”) and encourage end users to replace the Developer Content with the New Versions.
+6. You may not assign any rights or obligations under these Terms without the advance written consent of Facebook, which may be withheld in its sole discretion; provided, however, that you may, without such consent, assign these Terms in connection with the transfer or sale of all or substantially all of your business or assets related to these Terms, or in the event of a merger, consolidation, change in control or other similar transaction (a “Change of Control”). In the event of a Change of Control: (a) you will give written notice to Facebook within thirty (30) days after the Change of Control; and (b) Facebook may immediately terminate rights or obligations under these Terms any time between the Change of Control and thirty (30) days after it receives that written notice. Facebook may assign its rights or obligations under these Terms in its sole discretion.
+7. Your remedies under these Terms shall be limited to the right to collect money damages, if any, and you hereby waive your right to injunctive or other equitable relief.
+8. Your use of third-party materials included in the Software may be subject to other terms and conditions typically found in separate third-party license agreements or “READ ME” files included with such third-party materials. To the extent such other terms and conditions conflict with these Terms, the former will control with respect to the applicable third-party materials.
+9. Facebook may include in the Software additional content (e.g., samples) for demonstration, references or other specific purposes. Such content will be clearly marked in the Software and is subject to any included terms and conditions.
+10. If you are accepting these terms on behalf of a third party, you represent and warrant that you have the authority as agent to such party to use such feature on their behalf and bind such party to these terms.
+11. You are solely responsible for ensuring that your use of the Software complies with the Facebook Platform Policy located at https://developers.facebook.com/policy/.
+12. The Software is part of “Facebook” under Facebook’s Statement of Rights and Responsibilities (https://www.facebook.com/legal/terms, the “SRR”), and your use of the Software is deemed part of your use of, and actions on, “Facebook.” In the event of any express conflict between these Terms and the SRR, these Terms will govern solely with respect to your use of the Software and solely to the extent of the conflict. Facebook reserves the right to monitor or audit your compliance with these Terms and to update these Terms from time to time as described above.
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/FacebookAudio360-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/FacebookAudio360-License.txt.meta
new file mode 100755
index 0000000..418effe
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/FacebookAudio360-License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ab8d7f7be7dbf3b48b2871700a8025fc
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/GdclMpeg4-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/GdclMpeg4-License.txt
new file mode 100755
index 0000000..7d29177
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/GdclMpeg4-License.txt
@@ -0,0 +1,14 @@
+GDCL Source Code License
+Last updated: 20th February 2013
+
+License Agreement for Source Code provided by GDCL
+
+This software is supplied to you by Geraint Davies Consulting Ltd (‘GDCL’) in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this software.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, GDCL grants you a personal, non-exclusive license, to use, reproduce, modify and redistribute the software, with or without modifications, in source and/or binary forms; provided that if you redistribute the software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the software, and that in all cases attribution of GDCL as the original author of the source code shall be included in all such resulting software products or distributions.
+
+Neither the name, trademarks, service marks or logos of Geraint Davies or GDCL may be used to endorse or promote products derived from the software without specific prior written permission from GDCL. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by GDCL herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the software may be incorporated.
+
+The software is provided by GDCL on an “AS IS” basis. GDCL MAKE NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL GDCL BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF GDCL HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/GdclMpeg4-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/GdclMpeg4-License.txt.meta
new file mode 100755
index 0000000..0e0264d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/GdclMpeg4-License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 73bae5634cade6c44a13fbaf3463df37
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-3rdParty.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-3rdParty.txt
new file mode 100755
index 0000000..a94fa48
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-3rdParty.txt
@@ -0,0 +1,57 @@
+SNAPPY:
+
+Copyright 2011, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-----------------------------------------------------------------------------
+
+SQUISH:
+
+Copyright (c) 2006 Simon Brown si@sjbrown.co.uk
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-----------------------------------------------------------------------------
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-3rdParty.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-3rdParty.txt.meta
new file mode 100755
index 0000000..f756e24
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-3rdParty.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 123f6b279ef2f314085fe0d7d04d95fe
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-License.txt
new file mode 100755
index 0000000..d79557a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-License.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2012-2013, Tom Butterworth and Vidvox LLC. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-License.txt.meta
new file mode 100755
index 0000000..1309e78
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Hap-License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 913089523f966664fa6e14e68ef44722
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/HapInAvFoundation-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/HapInAvFoundation-License.txt
new file mode 100755
index 0000000..48922ae
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/HapInAvFoundation-License.txt
@@ -0,0 +1,24 @@
+HAP AND THE HAPINAVFOUNDATION FRAMEWORK
+
+Copyright (c) 2012-2014, Tom Butterworth and Vidvox LLC. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/HapInAvFoundation-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/HapInAvFoundation-License.txt.meta
new file mode 100755
index 0000000..b70746d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/HapInAvFoundation-License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cdef6ca7b14eb064b90edf1d7dbba6d1
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/LibSamplerate-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/LibSamplerate-License.txt
new file mode 100755
index 0000000..9f82626
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/LibSamplerate-License.txt
@@ -0,0 +1,25 @@
+Copyright (c) 2012-2016, Erik de Castro Lopo
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/LibSamplerate-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/LibSamplerate-License.txt.meta
new file mode 100755
index 0000000..a94e286
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/LibSamplerate-License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f00d6d79871a813408ae584af794ea15
+timeCreated: 1607543900
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/Third-Party Notices.txt b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Third-Party Notices.txt
new file mode 100755
index 0000000..1d19a43
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Third-Party Notices.txt
@@ -0,0 +1,45 @@
+"This asset is governed by the Asset Store EULA; however, the following components are governed by the licenses indicated below:
+
+Google ExoPlayer
+Apache License 2.0
+https://github.com/google/ExoPlayer
+
+
+Libsamplerate
+BSD 2-Clause "Simplified" License
+Copyright (c) 2012-2016, Erik de Castro Lopo All rights reserved.
+https://github.com/libsndfile/libsamplerate
+
+
+Vidvox Hap
+BSD 2-Clause "Simplified" License
+Copyright (c) 2012-2013, Tom Butterworth and Vidvox LLC.
+All rights reserved.
+https://github.com/Vidvox/hap
+
+
+HapInAVFoundation
+Copyright (c) 2012-2014, Tom Butterworth and Vidvox LLC.
+All rights reserved.
+https://github.com/Vidvox/hap-in-avfoundation
+
+
+Squish
+MIT License
+Copyright (c) 2006 Simon Brown si@sjbrown.co.uk
+
+
+Google Snappy
+BSD-type custom license
+Copyright 2011, Google Inc. All rights reserved.
+https://github.com/google/snappy
+
+
+Facebook Audio 360
+https://facebook360.fb.com/spatial-workstation/
+
+
+GDCL-MPEG4
+GDCL Source Code License
+Copyright (c) GDCL 2004-6. All Rights Reserved.
+https://www.gdcl.co.uk/downloads.htm
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Licenses/Third-Party Notices.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Third-Party Notices.txt.meta
new file mode 100755
index 0000000..33dcc55
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Licenses/Third-Party Notices.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 596059c57e34e2b41a793a8252804d6a
+timeCreated: 1607543899
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime.meta
new file mode 100755
index 0000000..e7137a9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 89ee47ef22faf9540bb381f817a762e6
+folderAsset: yes
+timeCreated: 1551709592
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins.meta
new file mode 100755
index 0000000..70bccd6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 44a4f634cbe11d749a36d11bf779d560
+folderAsset: yes
+timeCreated: 1541807141
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android.meta
new file mode 100755
index 0000000..c86aa2c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: a21f7f1c229b204429d1b4b288a93ff8
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/AVProVideo.jar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/AVProVideo.jar
new file mode 100755
index 0000000..f4c4864
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/AVProVideo.jar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/AVProVideo.jar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/AVProVideo.jar.meta
new file mode 100755
index 0000000..4c7377a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/AVProVideo.jar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: d03cd71ba09f0a548ac774e50236a6f7
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 1
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360-exo.jar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360-exo.jar
new file mode 100755
index 0000000..ddefdbe
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360-exo.jar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360-exo.jar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360-exo.jar.meta
new file mode 100755
index 0000000..cefc6d4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360-exo.jar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: d02cd71ba09f0a548ac774e50236a6f7
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360.jar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360.jar
new file mode 100755
index 0000000..cf7bdff
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360.jar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360.jar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360.jar.meta
new file mode 100755
index 0000000..62fbdc6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/audio360.jar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: d01cd71ba09f0a548ac774e50236a6f7
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/guava-31.1-android.jar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/guava-31.1-android.jar
new file mode 100755
index 0000000..8ff77a8
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/guava-31.1-android.jar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/guava-31.1-android.jar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/guava-31.1-android.jar.meta
new file mode 100755
index 0000000..14fc821
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/guava-31.1-android.jar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 986510c1836944347b3ba313758af501
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs.meta
new file mode 100755
index 0000000..e747e67
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 2003266eb39c94d528d797e009d518f8
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a.meta
new file mode 100755
index 0000000..d253ad2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6ed3d624465afd6468bb0af2091a8427
+folderAsset: yes
+timeCreated: 1489512342
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAVProVideo2Native.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAVProVideo2Native.so
new file mode 100755
index 0000000..7c68ed1
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAVProVideo2Native.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAVProVideo2Native.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAVProVideo2Native.so.meta
new file mode 100755
index 0000000..150a9be
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAVProVideo2Native.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 16580ba152d1f204a9d04de92628f82e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 1
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360-JNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360-JNI.so
new file mode 100755
index 0000000..566c080
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360-JNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360-JNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360-JNI.so.meta
new file mode 100755
index 0000000..b606d29
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360-JNI.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 5fbece163659f62498e5c764eec554a3
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360.so
new file mode 100755
index 0000000..62f5b5d
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360.so.meta
new file mode 100755
index 0000000..6bce938
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libAudio360.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: bed1fa60a484abf4aaee602523cd4615
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopus.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopus.so
new file mode 100755
index 0000000..e6bcaa8
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopus.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopus.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopus.so.meta
new file mode 100755
index 0000000..cdf994d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopus.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 16580ba152d1f204a9d04de92628f83e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopusJNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopusJNI.so
new file mode 100755
index 0000000..12b973a
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopusJNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopusJNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopusJNI.so.meta
new file mode 100755
index 0000000..28a2e0e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libopusJNI.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 6b6e96a3e19b669478613c9e775c45f9
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libresample-rh.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libresample-rh.so
new file mode 100755
index 0000000..60096e0
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libresample-rh.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libresample-rh.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libresample-rh.so.meta
new file mode 100755
index 0000000..91c0ccd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libresample-rh.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 26580ba152d1f204b9d04de92628f83e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libsamplerate-android.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libsamplerate-android.so
new file mode 100755
index 0000000..c889cfe
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libsamplerate-android.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libsamplerate-android.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libsamplerate-android.so.meta
new file mode 100755
index 0000000..1ce9cdc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/arm64-v8a/libsamplerate-android.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 36582ba152d1f204b9d04de92628a83e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a.meta
new file mode 100755
index 0000000..fe99f50
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f84e28fb654e15d48942c2fe31e2d7db
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAVProVideo2Native.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAVProVideo2Native.so
new file mode 100755
index 0000000..e94f3e5
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAVProVideo2Native.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAVProVideo2Native.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAVProVideo2Native.so.meta
new file mode 100755
index 0000000..0c52155
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAVProVideo2Native.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 01abcb0de4bacfb41950797e45b50768
+timeCreated: 1465825274
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 1
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360-JNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360-JNI.so
new file mode 100755
index 0000000..73bbbdb
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360-JNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360-JNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360-JNI.so.meta
new file mode 100755
index 0000000..c851cd3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360-JNI.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 346e35f1eecc1e449a49ce90cb8746aa
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360.so
new file mode 100755
index 0000000..ebe46ce
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360.so.meta
new file mode 100755
index 0000000..9762388
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libAudio360.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: f8ce1f4e613a5bb46b6daf1275564345
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopus.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopus.so
new file mode 100755
index 0000000..579eb88
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopus.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopus.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopus.so.meta
new file mode 100755
index 0000000..10ab091
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopus.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: d252582ae2a235546bff54c3b37c9d91
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopusJNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopusJNI.so
new file mode 100755
index 0000000..d80eeaa
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopusJNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopusJNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopusJNI.so.meta
new file mode 100755
index 0000000..ecf8af9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libopusJNI.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 2d15274d87e193c429c6bbb5d22d6889
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libresample-rh.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libresample-rh.so
new file mode 100755
index 0000000..b829d6d
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libresample-rh.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libresample-rh.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libresample-rh.so.meta
new file mode 100755
index 0000000..1292be4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libresample-rh.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 17580ba152d1f204b9d04de92628f83e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libsamplerate-android.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libsamplerate-android.so
new file mode 100755
index 0000000..a49ff7b
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libsamplerate-android.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libsamplerate-android.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libsamplerate-android.so.meta
new file mode 100755
index 0000000..e14cc5d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/armeabi-v7a/libsamplerate-android.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 2a15271d87e133c429c6bbb5d22d6889
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86.meta
new file mode 100755
index 0000000..22e3e0e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 632a512331d214be7980adacd5825166
+folderAsset: yes
+timeCreated: 1459511658
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAVProVideo2Native.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAVProVideo2Native.so
new file mode 100755
index 0000000..270f0bb
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAVProVideo2Native.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAVProVideo2Native.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAVProVideo2Native.so.meta
new file mode 100755
index 0000000..b5d96a9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAVProVideo2Native.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: fef09def6abbb10498a91d1ccf15475a
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 1
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360-JNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360-JNI.so
new file mode 100755
index 0000000..c368c48
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360-JNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360-JNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360-JNI.so.meta
new file mode 100755
index 0000000..1779945
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360-JNI.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 7e5c878f344b98545883e0d12bf11271
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360.so
new file mode 100755
index 0000000..37f7386
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360.so.meta
new file mode 100755
index 0000000..1a54185
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libAudio360.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 4d539d2b1007e8249a0f40ce055b763c
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopus.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopus.so
new file mode 100755
index 0000000..edaae7a
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopus.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopus.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopus.so.meta
new file mode 100755
index 0000000..9fb9685
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopus.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 6570c8aa0c696e944be583378a97496e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopusJNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopusJNI.so
new file mode 100755
index 0000000..6139585
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopusJNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopusJNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopusJNI.so.meta
new file mode 100755
index 0000000..63cd0c9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libopusJNI.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: fef09def6abbb10498a91d1ccf15473a
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libresample-rh.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libresample-rh.so
new file mode 100755
index 0000000..1dec4e6
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libresample-rh.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libresample-rh.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libresample-rh.so.meta
new file mode 100755
index 0000000..39f27c8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libresample-rh.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 16580ba252d8f204b9d04de92628f83e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libsamplerate-android.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libsamplerate-android.so
new file mode 100755
index 0000000..885557b
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libsamplerate-android.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libsamplerate-android.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libsamplerate-android.so.meta
new file mode 100755
index 0000000..00775cc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86/libsamplerate-android.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 2a15271d87e133c429c6ba25d78d6889
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64.meta
new file mode 100755
index 0000000..95b5032
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cc24fa0ccea3ca641a62a3cb5ce699b1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAVProVideo2Native.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAVProVideo2Native.so
new file mode 100755
index 0000000..a360728
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAVProVideo2Native.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAVProVideo2Native.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAVProVideo2Native.so.meta
new file mode 100755
index 0000000..f47ba0f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAVProVideo2Native.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: fef09abc6abbb29398a91d1ccf15475a
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 1
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360-JNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360-JNI.so
new file mode 100755
index 0000000..822ccb4
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360-JNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360-JNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360-JNI.so.meta
new file mode 100755
index 0000000..3f72388
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360-JNI.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 7e5c357f344b98545128e0d12ab11271
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360.so
new file mode 100755
index 0000000..c14c4f8
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360.so.meta
new file mode 100755
index 0000000..60e329f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libAudio360.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 4d539d2d2743e8249a0f76ce055b763c
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopus.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopus.so
new file mode 100755
index 0000000..4ad0e2b
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopus.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopus.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopus.so.meta
new file mode 100755
index 0000000..16bfc1b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopus.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 6570c8bf0c696e123be583378a97496e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopusJNI.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopusJNI.so
new file mode 100755
index 0000000..4aee680
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopusJNI.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopusJNI.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopusJNI.so.meta
new file mode 100755
index 0000000..6d2e543
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libopusJNI.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: fef09def6eba10436a91d1ccf15473aa
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libresample-rh.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libresample-rh.so
new file mode 100755
index 0000000..ff63eb6
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libresample-rh.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libresample-rh.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libresample-rh.so.meta
new file mode 100755
index 0000000..28f1d04
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libresample-rh.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 27980ba252d8f204b9d04de92628f83e
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libsamplerate-android.so b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libsamplerate-android.so
new file mode 100755
index 0000000..3be035c
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libsamplerate-android.so differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libsamplerate-android.so.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libsamplerate-android.so.meta
new file mode 100755
index 0000000..8657a3d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libs/x86_64/libsamplerate-android.so.meta
@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: 2c15271d87e133c429c6ba87d78d6386
+timeCreated: 1510239370
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: X86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libsamplerate-License.txt b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libsamplerate-License.txt
new file mode 100755
index 0000000..9f82626
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libsamplerate-License.txt
@@ -0,0 +1,25 @@
+Copyright (c) 2012-2016, Erik de Castro Lopo
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libsamplerate-License.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libsamplerate-License.txt.meta
new file mode 100755
index 0000000..ea4a3ae
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/libsamplerate-License.txt.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 712310c1836956347e3b8315658ef048
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-common.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-common.aar
new file mode 100755
index 0000000..db79a30
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-common.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-common.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-common.aar.meta
new file mode 100755
index 0000000..85fdd61
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-common.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 986510c1836944327b3ba213758af502
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-container.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-container.aar
new file mode 100755
index 0000000..b660752
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-container.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-container.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-container.aar.meta
new file mode 100755
index 0000000..b442fd2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-container.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 986510c1836933327b3ba213753af503
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-database.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-database.aar
new file mode 100755
index 0000000..882017a
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-database.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-database.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-database.aar.meta
new file mode 100755
index 0000000..931b5e4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-database.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 986510c1846943427b3ba213743af504
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-cronet.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-cronet.aar
new file mode 100755
index 0000000..d33f873
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-cronet.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-cronet.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-cronet.aar.meta
new file mode 100755
index 0000000..6cd670b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-cronet.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 986510c1856943527b3ba213755af505
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-okhttp.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-okhttp.aar
new file mode 100755
index 0000000..58cafc6
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-okhttp.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-okhttp.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-okhttp.aar.meta
new file mode 100755
index 0000000..b5495a2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-okhttp.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 966610c1856943526b3ba213755af606
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-rtmp.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-rtmp.aar
new file mode 100755
index 0000000..5541f60
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-rtmp.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-rtmp.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-rtmp.aar.meta
new file mode 100755
index 0000000..1c61913
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource-rtmp.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 966610c1856973576b3ba213757af607
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource.aar
new file mode 100755
index 0000000..ca1ed38
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource.aar.meta
new file mode 100755
index 0000000..749bea9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-datasource.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 8d4d8bfe9e8107e4cb3ed558b4a25660
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-decoder.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-decoder.aar
new file mode 100755
index 0000000..e84da1d
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-decoder.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-decoder.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-decoder.aar.meta
new file mode 100755
index 0000000..b02c50a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-decoder.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 988610c1856983576b3ba213757af608
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-dash.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-dash.aar
new file mode 100755
index 0000000..37160be
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-dash.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-dash.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-dash.aar.meta
new file mode 100755
index 0000000..8cfcf49
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-dash.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 19a610c1a96983536b3ba213757af60a
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-hls.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-hls.aar
new file mode 100755
index 0000000..a9991d9
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-hls.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-hls.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-hls.aar.meta
new file mode 100755
index 0000000..f0c823c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-hls.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 19ab10c1a96983b36b3ba213757af60b
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-rtsp.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-rtsp.aar
new file mode 100755
index 0000000..19e1b19
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-rtsp.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-rtsp.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-rtsp.aar.meta
new file mode 100755
index 0000000..29e35b0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-rtsp.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 19ac10c1a96983b36c3ba213757af60c
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-smoothstreaming.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-smoothstreaming.aar
new file mode 100755
index 0000000..4d246f9
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-smoothstreaming.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-smoothstreaming.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-smoothstreaming.aar.meta
new file mode 100755
index 0000000..6130762
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-smoothstreaming.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 19dc10d1a96983d36c3ba213757af60d
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-workmanager.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-workmanager.aar
new file mode 100755
index 0000000..f35dbf6
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-workmanager.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-workmanager.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-workmanager.aar.meta
new file mode 100755
index 0000000..00ffd9f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer-workmanager.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 19de10d1a96e8ed36c3ba213757af60e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer.aar
new file mode 100755
index 0000000..fc5f193
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer.aar.meta
new file mode 100755
index 0000000..795e6cc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-exoplayer.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 199610c1296983536b3ba213757af609
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-extractor.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-extractor.aar
new file mode 100755
index 0000000..1f497df
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-extractor.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-extractor.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-extractor.aar.meta
new file mode 100755
index 0000000..bddb8cf
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/media3-extractor.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 19fe10d1a96e8ed3fc3bf213757af60f
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/proguard-avprovideo.txt b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/proguard-avprovideo.txt
new file mode 100755
index 0000000..a38eff5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/proguard-avprovideo.txt
@@ -0,0 +1,3 @@
+-keep class com.renderheads.AVPro.Video.** { *; }
+-keep class com.google.android.exoplr2avp.** { *; }
+-keep class com.twobigears.audio360.** { *; }
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/proguard-avprovideo.txt.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/proguard-avprovideo.txt.meta
new file mode 100755
index 0000000..c9a4793
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/proguard-avprovideo.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 16a48ac54b9c03841ba400af5bbafc6c
+timeCreated: 1639133084
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/resample-rh.jar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/resample-rh.jar
new file mode 100755
index 0000000..a355737
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/resample-rh.jar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/resample-rh.jar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/resample-rh.jar.meta
new file mode 100755
index 0000000..1b85053
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/resample-rh.jar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 782210c1836944347b4b8315658ef648
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/rtmp-client-3.2.0.aar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/rtmp-client-3.2.0.aar
new file mode 100755
index 0000000..0367766
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/rtmp-client-3.2.0.aar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/rtmp-client-3.2.0.aar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/rtmp-client-3.2.0.aar.meta
new file mode 100755
index 0000000..7da7651
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/rtmp-client-3.2.0.aar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 282210c1236912347b4b8315658af638
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/zip_file.jar b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/zip_file.jar
new file mode 100755
index 0000000..589a049
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/zip_file.jar differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/zip_file.jar.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/zip_file.jar.meta
new file mode 100755
index 0000000..0cc9ba2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Android/zip_file.jar.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 782210c1836944347b3b8315658ef048
+timeCreated: 1468244265
+licenseType: Free
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings: {}
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA.meta
new file mode 100755
index 0000000..e624c77
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fa62f77468bf8a8489ef0a72c3e51ce0
+folderAsset: yes
+timeCreated: 1466635509
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP.meta
new file mode 100755
index 0000000..fec1d11
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 0015a9d8f1e31bd4c8af7c8195dab886
+folderAsset: yes
+timeCreated: 1466636212
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM.meta
new file mode 100755
index 0000000..167352b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: da5cd71ba09f0a548ac774e50236a6f7
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideo.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideo.dll
new file mode 100755
index 0000000..660e485
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideo.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideo.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideo.dll.meta
new file mode 100755
index 0000000..7509f18
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideo.dll.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 855efe2872a032d4fb533d8bbf373a96
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: ARM
+ SDK: UWP
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideoWinRT.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideoWinRT.dll
new file mode 100755
index 0000000..ef7ace6
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideoWinRT.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideoWinRT.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideoWinRT.dll.meta
new file mode 100755
index 0000000..0ee3a5e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM/AVProVideoWinRT.dll.meta
@@ -0,0 +1,149 @@
+fileFormatVersion: 2
+guid: 1d02b97c55097e94aa26100231b66a52
+timeCreated: 1543352727
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude WindowsStoreApps: 0
+ Exclude iOS: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OS: AnyOS
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 1
+ settings:
+ CPU: ARM
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64.meta
new file mode 100755
index 0000000..ad554fb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f55aa2578ac5b0449a3a3e50387f569f
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideo.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideo.dll
new file mode 100755
index 0000000..457cbbc
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideo.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideo.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideo.dll.meta
new file mode 100755
index 0000000..f3d3b12
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideo.dll.meta
@@ -0,0 +1,94 @@
+fileFormatVersion: 2
+guid: 60594004122890048a42c162b1715315
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude WindowsStoreApps: 0
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ DontProcess: false
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideoWinRT.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideoWinRT.dll
new file mode 100755
index 0000000..fcecee6
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideoWinRT.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideoWinRT.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideoWinRT.dll.meta
new file mode 100755
index 0000000..cef55ab
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/ARM64/AVProVideoWinRT.dll.meta
@@ -0,0 +1,149 @@
+fileFormatVersion: 2
+guid: 1d02b97c55098e94aa26100231b66a52
+timeCreated: 1543352727
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude WindowsStoreApps: 0
+ Exclude iOS: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OS: AnyOS
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86.meta
new file mode 100755
index 0000000..6d45d4a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 8eccc1911a8d14b4b8e46658ff18b2c4
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideo.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideo.dll
new file mode 100755
index 0000000..72a7330
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideo.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideo.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideo.dll.meta
new file mode 100755
index 0000000..44ef277
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideo.dll.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 647235627694b5843b3b3461bda59fd8
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: x86
+ SDK: UWP
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideoWinRT.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideoWinRT.dll
new file mode 100755
index 0000000..f384cc7
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideoWinRT.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideoWinRT.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideoWinRT.dll.meta
new file mode 100755
index 0000000..010a84c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/AVProVideoWinRT.dll.meta
@@ -0,0 +1,149 @@
+fileFormatVersion: 2
+guid: 9dba3755b2ce1ea4c8f455e959bc1bfa
+timeCreated: 1543330553
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude WindowsStoreApps: 0
+ Exclude iOS: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OS: AnyOS
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/Audio360.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/Audio360.dll
new file mode 100755
index 0000000..f604dc2
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/Audio360.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/Audio360.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/Audio360.dll.meta
new file mode 100755
index 0000000..f408284
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86/Audio360.dll.meta
@@ -0,0 +1,34 @@
+fileFormatVersion: 2
+guid: 947235627694b5843b3b3461bda59fd9
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 1
+ settings:
+ CPU: X86
+ SDK: UWP
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64.meta
new file mode 100755
index 0000000..28bf26c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f55aa2578ac5b0449a3a6e50387f569f
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideo.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideo.dll
new file mode 100755
index 0000000..659ddb4
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideo.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideo.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideo.dll.meta
new file mode 100755
index 0000000..369ae9c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideo.dll.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 3b25c194f2b9d8d48a0cd13422c0fbe7
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideoWinRT.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideoWinRT.dll
new file mode 100755
index 0000000..f4b6e1a
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideoWinRT.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideoWinRT.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideoWinRT.dll.meta
new file mode 100755
index 0000000..431ccaa
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/AVProVideoWinRT.dll.meta
@@ -0,0 +1,150 @@
+fileFormatVersion: 2
+guid: f0dcaa0e9423f364cadec44ece659971
+timeCreated: 1543330778
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude WindowsStoreApps: 0
+ Exclude iOS: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OS: Windows
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/Audio360.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/Audio360.dll
new file mode 100755
index 0000000..b075490
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/Audio360.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/Audio360.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/Audio360.dll.meta
new file mode 100755
index 0000000..d7ec255
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WSA/UWP/x86_64/Audio360.dll.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 9b25c194f2b9d8d48a0cd13422c0fbe9
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL.meta
new file mode 100755
index 0000000..9d89d80
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9820cb4aecb45ad4eaca0ef11c16e43c
+folderAsset: yes
+timeCreated: 1469702215
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL/AVProVideo.jslib b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL/AVProVideo.jslib
new file mode 100755
index 0000000..1d26c67
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL/AVProVideo.jslib
@@ -0,0 +1,1017 @@
+var AVProVideoWebGL =
+{
+ /*isNumber: function (item) {
+ return typeof(item) === "number" && !isNaN(item);
+ },
+ assert: function (equality, message) {
+ if (!equality)
+ console.log(message);
+ },*/
+ count: 0,
+ players: [],
+
+ isSafari: function() {
+ return navigator.vendor && navigator.vendor.indexOf('Apple') > -1 && navigator.userAgent && navigator.userAgent.indexOf('CriOS') == -1 && navigator.userAgent.indexOf('FxiOS') == -1;
+ },
+
+ is_iOS: function() {
+ return [
+ 'iPad Simulator',
+ 'iPhone Simulator',
+ 'iPod Simulator',
+ 'iPad',
+ 'iPhone',
+ 'iPod'
+ ].includes(navigator.platform)
+ // iPad on iOS 13 detection
+ || (navigator.userAgent.includes("Mac") && "ontouchend" in document);
+ },
+
+ hasPlayer__deps: ["players"],
+ hasPlayer: function (videoIndex)
+ {
+ if (videoIndex)
+ {
+ if (videoIndex == -1)
+ {
+ return false;
+ }
+
+ if (_players)
+ {
+ if (_players[videoIndex])
+ {
+ return true;
+ }
+ }
+ }
+ else
+ {
+ if (_players)
+ {
+ if (_players.length > 0)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+
+ AVPPlayerInsertVideoElement__deps: ["count", "players", "isSafari", "is_iOS"],
+ AVPPlayerInsertVideoElement: function (path, idValues, externalLibrary)
+ {
+ if (!path) { return false; }
+
+ // NOTE: When loading from the indexedDB (Application.persistentDataPath),
+ // URL.createObjectURL() must be used get a valid URL. See:
+ // http://www.misfitgeek.com/html5-off-line-storing-and-retrieving-videos-with-indexeddb/
+ path = Pointer_stringify(path);
+ _count++;
+
+ var vid = document.createElement("video");
+ var useNativeSrcPath = true;
+ var hls = null;
+
+ if (externalLibrary == 1)
+ {
+ useNativeSrcPath = false;
+ var player = dashjs.MediaPlayer().create();
+ player.initialize(vid, path, true);
+ }
+ else if (externalLibrary == 2 && !(_is_iOS() || _isSafari()))
+ {
+ useNativeSrcPath = false;
+ hls = new Hls();
+ hls.loadSource(path);
+ hls.attachMedia(vid);
+ hls.on(Hls.Events.MANIFEST_PARSED, function()
+ {
+ //video.play();
+ });
+ }
+ else if (externalLibrary == 3)
+ {
+ //useNativeSrcPath = false;
+ }
+
+ // Some sources say that this is the proper way to catch errors...
+ /*vid.addEventListener('error', function(event) {
+ console.log("Error: " + event);
+ }, true);*/
+
+ var hasSetCanPlay = false;
+ var playerIndex;
+ var id = _count;
+
+ var vidData = {
+ id: id,
+ video: vid,
+ ready: false,
+ hasMetadata: false,
+ isStalled: false,
+ buffering: false,
+ lastErrorCode: 0,
+ hlsjs: hls
+ };
+
+ _players.push(vidData);
+ playerIndex = (_players.length > 0) ? _players.length - 1 : 0;
+
+ /*const frameCounterCallback = function (timeNow, metadata) {
+ console.log("got a frame! " + metadata.presentedFrames + " " + metadata.presentationTime);
+ vid.requestVideoFrameCallback(frameCounterCallback);
+ };
+
+ if (HTMLVideoElement.prototype.requestVideoFrameCallback)
+ {
+ console.log("has frame callback support");
+ vid.requestVideoFrameCallback(frameCounterCallback);
+ }*/
+
+ vid.oncanplay = function()
+ {
+ if (!hasSetCanPlay)
+ {
+ hasSetCanPlay = true;
+ vidData.ready = true;
+ }
+ };
+
+ vid.onloadedmetadata = function()
+ {
+ vidData.hasMetadata = true;
+ };
+
+ vid.oncanplaythrough = function()
+ {
+ vidData.buffering = false;
+ };
+
+ vid.onplaying = function()
+ {
+ vidData.buffering = false;
+ vidData.isStalled = false;
+ //console.log("PLAYING");
+ };
+
+ vid.onwaiting = function()
+ {
+ vidData.buffering = true;
+ //console.log("WAITING");
+ };
+
+ vid.onstalled = function()
+ {
+ vidData.isStalled = true;
+ //console.log("STALLED");
+ }
+
+ /*vid.onpause = function() {
+ };*/
+
+ vid.onended = function()
+ {
+ vidData.buffering = false;
+ vidData.isStalled = false;
+ //console.log("ENDED");
+ };
+
+ vid.ontimeupdate = function()
+ {
+ vidData.buffering = false;
+ vidData.isStalled = false;
+ //console.log("vid current time: ", this.currentTime);
+ };
+
+ vid.onerror = function(texture)
+ {
+ var err = "unknown error";
+
+ switch (vid.error.code) {
+ case 1:
+ err = "video loading aborted";
+ break;
+ case 2:
+ err = "network loading error";
+ break;
+ case 3:
+ err = "video decoding failed / corrupted data or unsupported codec";
+ break;
+ case 4:
+ err = "video not supported";
+ break;
+ }
+
+ vidData.lastErrorCode = vid.error.code;
+
+ console.log("Error: " + err + " (errorcode=" + vid.error.code + ")", "color:red;");
+ };
+
+ vid.crossOrigin = "anonymous";
+ vid.preload = 'auto';
+ vid.autoplay = false;
+
+ if (_is_iOS())
+ {
+ vid.autoplay = true;
+ vid.playsInline = true;
+ }
+
+ if (useNativeSrcPath)
+ {
+ vid.src = path;
+ }
+
+ HEAP32[(idValues>>2)] = playerIndex;
+ HEAP32[(idValues>>2)+1] = id;
+
+ return true;
+ },
+
+ AVPPlayerGetLastError__deps: ["players", "hasPlayer"],
+ AVPPlayerGetLastError: function(playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ var ret = _players[playerIndex].lastErrorCode
+ _players[playerIndex].lastErrorCode = 0;
+
+ return ret;
+ },
+
+ AVPPlayerCreateVideoTexture__deps: ["players", "hasPlayer"],
+ AVPPlayerCreateVideoTexture: function (textureId)
+ {
+ const texture = GLctx.createTexture();
+ GL.textures[textureId] = texture;
+
+ //console.log("creating textureId " +textureId + " : " + GL.textures[textureId]);
+ GLctx.bindTexture(GLctx.TEXTURE_2D, texture);
+ },
+
+ AVPPlayerDestroyVideoTexture__deps: ["players", "hasPlayer"],
+ AVPPlayerDestroyVideoTexture: function (textureId)
+ {
+ GLctx.deleteTexture(GL.textures[textureId]);
+ },
+
+ AVPPlayerFetchVideoTexture__deps: ["players", "hasPlayer"],
+ AVPPlayerFetchVideoTexture: function (playerIndex, textureId, init)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ //console.log("updating textureId " +textureId + " : " + GL.textures[textureId]);
+ GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[textureId]);
+
+ //GLctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
+ if (!init)
+ {
+ //GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, _players[playerIndex].video);
+ GLctx.texSubImage2D(GLctx.TEXTURE_2D, 0, 0, 0, GLctx.RGBA, GLctx.UNSIGNED_BYTE, _players[playerIndex].video);
+ }
+ else
+ {
+ GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, _players[playerIndex].video);
+ }
+
+ //NB: This line causes the texture to not show unless something else is rendered (not sure why)
+ //GLctx.bindTexture(GLctx.TEXTURE_2D, null);
+ GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_WRAP_S, GLctx.CLAMP_TO_EDGE);
+ GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_WRAP_T, GLctx.CLAMP_TO_EDGE);
+ GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, false);
+ },
+
+ AVPPlayerUpdatePlayerIndex__deps: ["players", "hasPlayer"],
+ AVPPlayerUpdatePlayerIndex: function (id)
+ {
+ var result = -1;
+
+ if (!_hasPlayer()) { return result; }
+
+ _players.forEach(function (currentVid, index)
+ {
+ if (currentVid != null && currentVid.id == id)
+ {
+ result = index;
+ }
+ });
+
+ return result;
+ },
+
+ AVPPlayerWidth__deps: ["players", "hasPlayer"],
+ AVPPlayerWidth: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ return _players[playerIndex].video.videoWidth;
+ },
+
+ AVPPlayerHeight__deps: ["players", "hasPlayer"],
+ AVPPlayerHeight: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ return _players[playerIndex].video.videoHeight;
+ },
+
+ AVPPlayerReady__deps: ["players", "hasPlayer"],
+ AVPPlayerReady: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ if (_players)
+ {
+ if (_players.length > 0)
+ {
+ if (_players[playerIndex])
+ {
+ return _players[playerIndex].ready;
+ }
+ }
+ }
+ else
+ {
+ return false;
+ }
+
+ //return _players[playerIndex].video.readyState >= _players[playerIndex].video.HAVE_CURRENT_DATA;
+ },
+
+ AVPPlayerClose__deps: ["players", "hasPlayer"],
+ AVPPlayerClose: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ var vid = _players[playerIndex].video;
+
+ // Setting 'src' to an empty string results in the onerror handler being invoked and producing log noise on Chrome.
+ // Removing the src attribute and invoking load is a recommended best practice in the HTML Standard.
+ // See https://html.spec.whatwg.org/multipage/media.html#best-practices-for-authors-using-media-elements
+ vid.pause();
+ vid.removeAttribute("src"); // Previous: vid.src = "";
+ vid.load();
+
+ if (_players[playerIndex].hlsjs != null)
+ {
+ _players[playerIndex].hlsjs.destroy();
+ _players[playerIndex].hlsjs = null;
+ }
+
+ _players[playerIndex].video = null;
+ _players[playerIndex] = null;
+
+ var allEmpty = true;
+ for (i = 0; i < _players.length; i++) {
+ if (_players[i] != null) {
+ allEmpty = false;
+ break;
+ }
+ }
+ if (allEmpty)
+ {
+ _players = [];
+ }
+ //_players = _players.splice(playerIndex, 1);
+
+ // Remove from DOM
+ //vid.parentNode.removeChild(vid);
+ },
+
+ AVPPlayerSetLooping__deps: ["players", "hasPlayer"],
+ AVPPlayerSetLooping: function (playerIndex, loop)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ _players[playerIndex].video.loop = loop;
+ },
+
+ AVPPlayerIsLooping__deps: ["players", "hasPlayer"],
+ AVPPlayerIsLooping: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].video.loop;
+ },
+
+ AVPPlayerHasMetadata__deps: ["players", "hasPlayer"],
+ AVPPlayerHasMetadata: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return (_players[playerIndex].video.readyState >= 1);
+ },
+
+ AVPPlayerIsPlaying__deps: ["players", "hasPlayer"],
+ AVPPlayerIsPlaying: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var video = _players[playerIndex].video;
+
+ return (!video.paused && !video.ended);// || video.seeking || video.readyState < video.HAVE_FUTURE_DATA);
+ },
+
+ AVPPlayerIsSeeking__deps: ["players", "hasPlayer"],
+ AVPPlayerIsSeeking: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].video.seeking;
+ },
+
+ AVPPlayerIsPaused__deps: ["players", "hasPlayer"],
+ AVPPlayerIsPaused: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].video.paused;
+ },
+
+ AVPPlayerIsFinished__deps: ["players", "hasPlayer"],
+ AVPPlayerIsFinished: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].video.ended;
+ },
+
+ AVPPlayerIsBuffering__deps: ["players", "hasPlayer"],
+ AVPPlayerIsBuffering: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].buffering;
+ },
+
+ AVPPlayerIsPlaybackStalled__deps: ["players", "hasPlayer"],
+ AVPPlayerIsPlaybackStalled: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].isStalled;
+ },
+
+ AVPPlayerPlay__deps: ["players", "hasPlayer"],
+ AVPPlayerPlay: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ // https://webkit.org/blog/7734/auto-play-policy-changes-for-macos/
+ // https://developers.google.com/web/updates/2017/06/play-request-was-interrupted
+ var playPromise = _players[playerIndex].video.play();
+ if (playPromise !== undefined)
+ {
+ playPromise.then(function()
+ {
+ // Automatic playback started!
+ // Show playing UI.
+ })
+ .catch(function(error)
+ {
+ // Auto-play was prevented
+ // Show paused UI.
+ return false;
+ });
+ }
+ return true;
+ },
+
+ AVPPlayerPause__deps: ["players", "hasPlayer"],
+ AVPPlayerPause: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ _players[playerIndex].video.pause();
+ },
+
+ AVPPlayerSeekToTime__deps: ["players", "hasPlayer"],
+ AVPPlayerSeekToTime: function (playerIndex, timeSec, fast)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ var vid = _players[playerIndex].video;
+
+ if (vid.seekable && vid.seekable.length > 0)
+ {
+ var timeNorm = 0.0;
+ if (vid.duration > 0.0)
+ {
+ timeNorm = timeSec / vid.duration;
+ }
+ for (i = 0; i < vid.seekable.length; i++)
+ {
+ if (timeNorm >= vid.seekable.start(i) && timeNorm <= vid.seekable.end(i))
+ {
+ if (fast && vid.fastSeek)
+ {
+ vid.fastSeek(timeNorm);
+ }
+ else
+ {
+ vid.currentTime = timeSec;
+ }
+ return;
+ }
+ }
+ }
+ else
+ {
+ if (timeSec == 0.0)
+ {
+ vid.load();
+ }
+ else
+ {
+ vid.currentTime = timeSec;
+ }
+ }
+ },
+
+ AVPPlayerGetCurrentTime__deps: ["players", "hasPlayer"],
+ AVPPlayerGetCurrentTime: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0.0; }
+
+ return _players[playerIndex].video.currentTime;
+ },
+
+ AVPPlayerGetDuration__deps: ["players", "hasPlayer"],
+ AVPPlayerGetDuration: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0.0; }
+
+ return _players[playerIndex].video.duration;
+ },
+
+ AVPPlayerGetPlaybackRate__deps: ["players", "hasPlayer"],
+ AVPPlayerGetPlaybackRate: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0.0; }
+
+ return _players[playerIndex].video.playbackRate;
+ },
+
+ AVPPlayerSetPlaybackRate__deps: ["players", "hasPlayer"],
+ AVPPlayerSetPlaybackRate: function (playerIndex, rate)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ _players[playerIndex].video.playbackRate = rate;
+ },
+
+ AVPPlayerSetMuted__deps: ["players", "hasPlayer"],
+ AVPPlayerSetMuted: function (playerIndex, mute)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ _players[playerIndex].video.muted = mute;
+ },
+
+ AVPPlayerIsMuted__deps: ["players", "hasPlayer"],
+ AVPPlayerIsMuted: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].video.muted;
+ },
+
+ AVPPlayerSetVolume__deps: ["players", "hasPlayer"],
+ AVPPlayerSetVolume: function (playerIndex, volume)
+ {
+ if (!_hasPlayer(playerIndex)) { return; }
+
+ _players[playerIndex].video.volume = volume;
+ },
+
+ AVPPlayerGetVolume__deps: ["players", "hasPlayer"],
+ AVPPlayerGetVolume: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0.0; }
+
+ return _players[playerIndex].video.volume;
+ },
+
+ AVPPlayerHasVideo__deps: ["players", "hasPlayer"],
+ AVPPlayerHasVideo: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var isChrome = !!window.chrome && !!window.chrome.webstore;
+
+ if (isChrome)
+ {
+ return Boolean(_players[playerIndex].video.webkitVideoDecodedByteCount > 0);
+ }
+
+ if (_players[playerIndex].video.videoTracks)
+ {
+ return Boolean(_players[playerIndex].video.videoTracks.length > 0);
+ }
+
+ return true;
+ },
+
+ AVPPlayerHasAudio__deps: ["players", "hasPlayer"],
+ AVPPlayerHasAudio: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ return _players[playerIndex].video.mozHasAudio || Boolean(_players[playerIndex].video.webkitAudioDecodedByteCount) ||
+ Boolean(_players[playerIndex].video.audioTracks && _players[playerIndex].video.audioTracks.length);
+ },
+
+ AVPPlayerGetDecodedFrameCount__deps: ["players", "hasPlayer"],
+ AVPPlayerGetDecodedFrameCount: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ var vid = _players[playerIndex].video;
+ if (vid.readyState <= HTMLMediaElement.HAVE_CURRENT_DATA) { return 0; }
+
+ var frameCount = 0;
+
+ if (vid.mozPresentedFrames)
+ {
+ frameCount = vid.mozPresentedFrames;
+ }
+ else if (vid.mozDecodedFrames)
+ {
+ frameCount = vid.mozDecodedFrames;
+ }
+ else if (vid.webkitDecodedFrameCount)
+ {
+ frameCount = vid.webkitDecodedFrameCount;
+ }
+
+ /*var q = vid.getVideoPlaybackQuality();
+ if (q)
+ {
+ console.log("frames: " + q.totalVideoFrames + " " + q.droppedVideoFrames);
+ }*/
+
+ return frameCount;
+ },
+
+ AVPPlayerSupportedDecodedFrameCount__deps: ["players", "hasPlayer"],
+ AVPPlayerSupportedDecodedFrameCount: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var vid = _players[playerIndex].video;
+
+ if (vid.mozPresentedFrames)
+ {
+ return true;
+ }
+ else if (vid.mozDecodedFrames)
+ {
+ return true;
+ }
+ else if (vid.webkitDecodedFrameCount)
+ {
+ return true;
+ }
+
+ return false;
+ },
+
+ AVPPlayerGetNumBufferedTimeRanges__deps: ["players", "hasPlayer"],
+ AVPPlayerGetNumBufferedTimeRanges: function(playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ if (_players[playerIndex].video.buffered)
+ {
+ return _players[playerIndex].video.buffered.length;
+ }
+ return 0;
+ },
+
+ AVPPlayerGetTimeRangeStart__deps: ["players", "hasPlayer"],
+ AVPPlayerGetTimeRangeStart: function(playerIndex, rangeIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0.0; }
+
+ if (_players[playerIndex].video.buffered)
+ {
+ if(rangeIndex >= _players[playerIndex].video.buffered.length)
+ {
+ return 0.0;
+ }
+ return _players[playerIndex].video.buffered.start(rangeIndex);
+ }
+ return 0.0;
+ },
+
+ AVPPlayerGetTimeRangeEnd__deps: ["players", "hasPlayer"],
+ AVPPlayerGetTimeRangeEnd: function(playerIndex, rangeIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0.0; }
+
+ if (_players[playerIndex].video.buffered)
+ {
+ if(rangeIndex >= _players[playerIndex].video.buffered.length)
+ {
+ return 0.0;
+ }
+ return _players[playerIndex].video.buffered.end(rangeIndex);
+ }
+ return 0.0;
+ },
+
+ AVPPlayerGetVideoTrackCount__deps: ["players", "hasPlayer", "AVPPlayerHasVideo"],
+ AVPPlayerGetVideoTrackCount: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ var result = 0;
+ var tracks = _players[playerIndex].video.videoTracks;
+ if (tracks)
+ {
+ result = tracks.length;
+ }
+ else
+ {
+ if (_AVPPlayerHasVideo(playerIndex))
+ {
+ result = 1;
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetAudioTrackCount__deps: ["players", "hasPlayer", "AVPPlayerHasAudio"],
+ AVPPlayerGetAudioTrackCount: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ var result = 0;
+ var tracks = _players[playerIndex].video.audioTracks;
+ if (tracks)
+ {
+ result = tracks.length;
+ }
+ else
+ {
+ if (_AVPPlayerHasAudio(playerIndex))
+ {
+ result = 1;
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetTextTrackCount__deps: ["players", "hasPlayer"],
+ AVPPlayerGetTextTrackCount: function (playerIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return 0; }
+
+ var result = 0;
+ var tracks = _players[playerIndex].video.textTracks;
+ if (tracks)
+ {
+ result = tracks.length;
+ }
+ return result;
+ },
+
+ AVPPlayerSetActiveVideoTrack__deps: ["players", "hasPlayer"],
+ AVPPlayerSetActiveVideoTrack: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = false;
+ if (_players[playerIndex].video.videoTracks)
+ {
+ var tracks = _players[playerIndex].video.videoTracks;
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ tracks[trackIndex].selected = true;
+ result = true;
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerSetActiveAudioTrack: ["players", "hasPlayer"],
+ AVPPlayerSetActiveAudioTrack: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = false;
+ if (_players[playerIndex].video.audioTracks)
+ {
+ var tracks = _players[playerIndex].video.audioTracks;
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ for (i = 0; i < tracks.length; i++)
+ {
+ tracks[i].enabled = (i === trackIndex);
+ }
+ result = true;
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerSetActiveTextTrack: ["players", "hasPlayer"],
+ AVPPlayerSetActiveTextTrack: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = false;
+ if (_players[playerIndex].video.textTracks)
+ {
+ var tracks = _players[playerIndex].video.textTracks;
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ for (i = 0; i < tracks.length; i++)
+ {
+ tracks[i].mode = (i === trackIndex)?"showing":"disabled";
+ }
+ result = true;
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerStringToBuffer: [],
+ AVPPlayerStringToBuffer: function (text)
+ {
+ // Get size of the string
+ var bufferSize = lengthBytesUTF8(text) + 1;
+ // Allocate memory space
+ var buffer = _malloc(bufferSize);
+ // Copy old data to the new one then return it
+ stringToUTF8(text, buffer, bufferSize);
+ return buffer;
+ },
+
+ AVPPlayerGetVideoTrackName: ["players", "hasPlayer", "AVPPlayerStringToBuffer"],
+ AVPPlayerGetVideoTrackName: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = null;
+ var tracks = _players[playerIndex].video.videoTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = _AVPPlayerStringToBuffer(tracks[trackIndex].label);
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetAudioTrackName: ["players", "hasPlayer", "AVPPlayerStringToBuffer"],
+ AVPPlayerGetAudioTrackName: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = null;
+ var tracks = _players[playerIndex].video.audioTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = _AVPPlayerStringToBuffer(tracks[trackIndex].label);
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetTextTrackName: ["players", "hasPlayer", "AVPPlayerStringToBuffer"],
+ AVPPlayerGetTextTrackName: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = null;
+ var tracks = _players[playerIndex].video.textTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = _AVPPlayerStringToBuffer(tracks[trackIndex].label);
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetVideoTrackLanguage: ["players", "hasPlayer", "AVPPlayerStringToBuffer"],
+ AVPPlayerGetVideoTrackLanguage: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = null;
+ var tracks = _players[playerIndex].video.videoTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = _AVPPlayerStringToBuffer(tracks[trackIndex].language);
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetAudioTrackLanguage: ["players", "hasPlayer", "AVPPlayerStringToBuffer"],
+ AVPPlayerGetAudioTrackLanguage: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = null;
+ var tracks = _players[playerIndex].video.audioTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = _AVPPlayerStringToBuffer(tracks[trackIndex].language);
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerGetTextTrackLanguage: ["players", "hasPlayer", "AVPPlayerStringToBuffer"],
+ AVPPlayerGetTextTrackLanguage: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = null;
+ var tracks = _players[playerIndex].video.textTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = _AVPPlayerStringToBuffer(tracks[trackIndex].language);
+ }
+ }
+ return result;
+ },
+
+ AVPPlayerIsVideoTrackActive: ["players", "hasPlayer", "AVPPlayerHasVideo"],
+ AVPPlayerIsVideoTrackActive: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = false;
+ var tracks = _players[playerIndex].video.videoTracks;
+ if (tracks)
+ {
+ result = (tracks.selectedIndex === trackIndex);
+ }
+ else
+ {
+ result = _AVPPlayerHasVideo(playerIndex);
+ }
+ return result;
+ },
+
+ AVPPlayerIsAudioTrackActive: ["players", "hasPlayer", "AVPPlayerHasAudio"],
+ AVPPlayerIsAudioTrackActive: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = false;
+ var tracks = _players[playerIndex].video.audioTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = tracks[trackIndex].enabled;
+ }
+ }
+ else
+ {
+ result = _AVPPlayerHasAudio(playerIndex);
+ }
+ return result;
+ },
+
+ AVPPlayerIsTextTrackActive: ["players", "hasPlayer"],
+ AVPPlayerIsTextTrackActive: function (playerIndex, trackIndex)
+ {
+ if (!_hasPlayer(playerIndex)) { return false; }
+
+ var result = false;
+ var tracks = _players[playerIndex].video.textTracks;
+ if (tracks)
+ {
+ if (trackIndex >=0 && trackIndex < tracks.length)
+ {
+ result = (tracks[trackIndex].mode === "showing");
+ }
+ }
+ return result;
+ }
+};
+
+autoAddDeps(AVProVideoWebGL, 'count');
+autoAddDeps(AVProVideoWebGL, 'players');
+autoAddDeps(AVProVideoWebGL, 'hasPlayer');
+autoAddDeps(AVProVideoWebGL, 'AVPPlayerHasVideo');
+autoAddDeps(AVProVideoWebGL, 'AVPPlayerHasAudio');
+autoAddDeps(AVProVideoWebGL, 'AVPPlayerStringToBuffer');
+mergeInto(LibraryManager.library, AVProVideoWebGL);
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL/AVProVideo.jslib.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL/AVProVideo.jslib.meta
new file mode 100755
index 0000000..256fec2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/WebGL/AVProVideo.jslib.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: 676a447b782bee64aa3364c6abc3ebe6
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ WebGL:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows.meta
new file mode 100755
index 0000000..aae0955
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b6d2cf61b759e1f458f8c7fd862ee0ef
+folderAsset: yes
+timeCreated: 1591798085
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86.meta
new file mode 100755
index 0000000..0b23a20
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: beca7112b92c2e348a369af0141596b2
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideo.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideo.dll
new file mode 100755
index 0000000..7dfd85c
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideo.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideo.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideo.dll.meta
new file mode 100755
index 0000000..a67cc9d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideo.dll.meta
@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: 38dfb99d7bab76e4497fc5b3f3cb0dd3
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 0
+ Exclude Linux: 0
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 0
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 0
+ Exclude Win64: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ OS: Windows
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ DefaultValueInitialized: true
+ OS: Windows
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideoWinRT.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideoWinRT.dll
new file mode 100755
index 0000000..b7823c7
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideoWinRT.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideoWinRT.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideoWinRT.dll.meta
new file mode 100755
index 0000000..1a0bf44
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/AVProVideoWinRT.dll.meta
@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: 38dfb99d7bab76e4488fc5b3f3cb0dd3
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 0
+ Exclude Linux: 0
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 0
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 0
+ Exclude Win64: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ OS: Windows
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ DefaultValueInitialized: true
+ OS: Windows
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/Audio360.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/Audio360.dll
new file mode 100755
index 0000000..f604dc2
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/Audio360.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/Audio360.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/Audio360.dll.meta
new file mode 100755
index 0000000..df02c26
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86/Audio360.dll.meta
@@ -0,0 +1,161 @@
+fileFormatVersion: 2
+guid: 11e959a012c004a46b0834e2c40392e8
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 0
+ Exclude Linux: 0
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 0
+ Exclude OSXIntel64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 0
+ Exclude Win64: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ OS: Windows
+ data:
+ first:
+ '': WP8
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ DefaultValueInitialized: true
+ OS: Windows
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Samsung TV: SamsungTV
+ second:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_13
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ SDK: AnySDK
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64.meta
new file mode 100755
index 0000000..9cced09
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 29897f3c1b37b574e87b1de35e3706a0
+folderAsset: yes
+timeCreated: 1611680629
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideo.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideo.dll
new file mode 100755
index 0000000..82a079e
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideo.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideo.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideo.dll.meta
new file mode 100755
index 0000000..3ee3457
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideo.dll.meta
@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: 47103a0dd0066fb4b8e31c75c49c2f04
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 0
+ Exclude Linux: 1
+ Exclude Linux64: 0
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 0
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 0
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OS: Windows
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: Windows
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideoWinRT.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideoWinRT.dll
new file mode 100755
index 0000000..34a4121
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideoWinRT.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideoWinRT.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideoWinRT.dll.meta
new file mode 100755
index 0000000..5af68c4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/AVProVideoWinRT.dll.meta
@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: 47103a0dd0066fb4b8e31c75c49c2ee4
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 0
+ Exclude Linux: 1
+ Exclude Linux64: 0
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 0
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 0
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OS: Windows
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: Windows
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/Audio360.dll b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/Audio360.dll
new file mode 100755
index 0000000..b075490
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/Audio360.dll differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/Audio360.dll.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/Audio360.dll.meta
new file mode 100755
index 0000000..b808300
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/Windows/x86_64/Audio360.dll.meta
@@ -0,0 +1,163 @@
+fileFormatVersion: 2
+guid: 3fccbfe96a8facb4395bbd5149599b27
+timeCreated: 1510001730
+licenseType: Pro
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 0
+ Exclude Linux: 1
+ Exclude Linux64: 0
+ Exclude LinuxUniversal: 0
+ Exclude OSXIntel: 1
+ Exclude OSXIntel64: 0
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 0
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OS: Windows
+ data:
+ first:
+ '': WP8
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: Windows
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Samsung TV: SamsungTV
+ second:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_13
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ SDK: AnySDK
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS.meta
new file mode 100755
index 0000000..1a02212
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a4ae75a21b372424ea0b043540b05b25
+folderAsset: yes
+timeCreated: 1448626645
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework.meta
new file mode 100755
index 0000000..5e0239b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework.meta
@@ -0,0 +1,91 @@
+fileFormatVersion: 2
+guid: a7ee58e0e533849d3a37458bc7df6df7
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 0
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/Info.plist b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/Info.plist
new file mode 100755
index 0000000..fe21c3d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ libAVProVideo.a
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ libAVProVideo.a
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ BinaryPath
+ libAVProVideo.a
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ libAVProVideo.a
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/Info.plist.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/Info.plist.meta
new file mode 100755
index 0000000..043a4fd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fa6c2ef45a33c45789b51b4fe9e5519d
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature.meta
new file mode 100755
index 0000000..5b907db
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e18a9d7a2e3fb4383a9fdbd3d31e83c4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory
new file mode 100755
index 0000000..c18d3fb
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta
new file mode 100755
index 0000000..9f9053f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 269ff32bd08a54b95ba4f2471695f00a
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements
new file mode 100755
index 0000000..d03275f
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1 b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1
new file mode 100755
index 0000000..7fc4556
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1 differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta
new file mode 100755
index 0000000..7a29f44
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 358681f8219aa41819064d06daf8201d
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta
new file mode 100755
index 0000000..faebef0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 953c011cb18d94c7c9d20767b06204c6
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeResources b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeResources
new file mode 100755
index 0000000..23f5baa
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeResources
@@ -0,0 +1,158 @@
+
+
+
+
+ files
+
+ ios-arm64/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ ios-arm64/libAVProVideo.a
+
+ bUdB6q+5pHB5mGMmgQXWdTqgjbc=
+
+ ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ ios-arm64_x86_64-simulator/libAVProVideo.a
+
+ KdnJdKM98mPvzld4FtUZuu6mKZw=
+
+
+ files2
+
+ ios-arm64/PrivacyInfo.xcprivacy
+
+ hash
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+ ios-arm64/libAVProVideo.a
+
+ hash
+
+ bUdB6q+5pHB5mGMmgQXWdTqgjbc=
+
+ hash2
+
+ 5fCww3TYImNfwRXbSI1+Y3svEEcRmMH84G2t1DFITgQ=
+
+
+ ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
+
+ hash
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+ ios-arm64_x86_64-simulator/libAVProVideo.a
+
+ hash
+
+ KdnJdKM98mPvzld4FtUZuu6mKZw=
+
+ hash2
+
+ FI4YNP5+pbwlzp2sEWyNZvJCtXrXJBNqsEafYe05cWo=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta
new file mode 100755
index 0000000..d637678
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 57e1e5062a998474892f34ccd64d06c7
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeSignature b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeSignature
new file mode 100755
index 0000000..58642c7
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeSignature differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta
new file mode 100755
index 0000000..aadad9c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 529f03c5cb434473ebf270834709d720
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64.meta
new file mode 100755
index 0000000..118dd48
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8c4ef8b97131e4c1b811cda541588ea2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..d4e9fa1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: aaae472ebabc040fd83100af744ffa34
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/libAVProVideo.a b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/libAVProVideo.a
new file mode 100755
index 0000000..2dbf555
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/libAVProVideo.a differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/libAVProVideo.a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/libAVProVideo.a.meta
new file mode 100755
index 0000000..e2c1f14
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64/libAVProVideo.a.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 759ab7886eb5148c4bf813819b1b3554
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator.meta
new file mode 100755
index 0000000..9aeedbe
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ec8828b1ed33b4b5c85874c374fb322c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..ea29214
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: f5dc0dc770ea54830bfb224c4d409bb1
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/libAVProVideo.a b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/libAVProVideo.a
new file mode 100755
index 0000000..8254b0f
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/libAVProVideo.a differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/libAVProVideo.a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/libAVProVideo.a.meta
new file mode 100755
index 0000000..120a832
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/iOS/AVProVideo.xcframework/ios-arm64_x86_64-simulator/libAVProVideo.a.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 59c123648650a4c2795c761f0f852863
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS.meta
new file mode 100755
index 0000000..f21a09a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: e0081b563d15a564e9a7c1f5fc7e3214
+folderAsset: yes
+timeCreated: 1591797492
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle.meta
new file mode 100755
index 0000000..cd4554a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle.meta
@@ -0,0 +1,136 @@
+fileFormatVersion: 2
+guid: 883aa94f58c514a3fa05b4e88b790643
+folderAsset: yes
+PluginImporter:
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ data:
+ first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 0
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXIntel: 0
+ Exclude OSXIntel64: 0
+ Exclude OSXUniversal: 0
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ data:
+ first:
+ '': Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OS: OSX
+ data:
+ first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ data:
+ first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ data:
+ first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ DefaultValueInitialized: true
+ data:
+ first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ data:
+ first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ data:
+ first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ data:
+ first:
+ Standalone: OSXIntel
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXIntel64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ data:
+ first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents.meta
new file mode 100755
index 0000000..0864119
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 10782480ad6dd3947941d3f86e050d69
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/CodeResources b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/CodeResources
new file mode 100755
index 0000000..97b65fe
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/CodeResources differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/CodeResources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/CodeResources.meta
new file mode 100755
index 0000000..37f9c77
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7b1a4fb292e9f3048ab6de00e4913a97
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Info.plist b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Info.plist
new file mode 100755
index 0000000..e0edf7e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Info.plist
@@ -0,0 +1,52 @@
+
+
+
+
+ AVPPluginShortVersionString
+ 3.0.8
+ AVPPluginVersion
+ 2407231624
+ BuildMachineOSBuild
+ 23F79
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ AVProVideo
+ CFBundleIdentifier
+ com.renderheads.AVPro.Video-Trial
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ AVProVideo
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 3.0.8
+ CFBundleSupportedPlatforms
+
+ MacOSX
+
+ CFBundleVersion
+ 2407231624
+ DTCompiler
+ com.apple.compilers.llvm.clang.1_0
+ DTPlatformBuild
+
+ DTPlatformName
+ macosx
+ DTPlatformVersion
+ 14.5
+ DTSDKBuild
+ 23F73
+ DTSDKName
+ macosx14.5
+ DTXcode
+ 1540
+ DTXcodeBuild
+ 15F31d
+ LSMinimumSystemVersion
+ 10.14.6
+ NSHumanReadableCopyright
+ Copyright © 2024 RenderHeads. All rights reserved.
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Info.plist.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Info.plist.meta
new file mode 100755
index 0000000..9d16b26
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 303e81c8a0c8aec4494d12241de5c748
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS.meta
new file mode 100755
index 0000000..d0f1109
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 23e28ab7a7eb7e24a8483ee1f0ddb75b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS/AVProVideo b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS/AVProVideo
new file mode 100755
index 0000000..0801f04
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS/AVProVideo differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS/AVProVideo.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS/AVProVideo.meta
new file mode 100755
index 0000000..4e855af
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/MacOS/AVProVideo.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5d079c82580b9a043bf2254598b49627
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources.meta
new file mode 100755
index 0000000..77a3a2b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 096cbdce58056fc4db936dbe117f6689
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..97c39f1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/Resources/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ea87ab5446e20ee498a941ae32bfcf5e
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature.meta
new file mode 100755
index 0000000..d9b8344
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d58da2f227678644fb67efc6baa14443
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature/CodeResources b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature/CodeResources
new file mode 100755
index 0000000..b143bcf
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature/CodeResources
@@ -0,0 +1,128 @@
+
+
+
+
+ files
+
+ Resources/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+
+ files2
+
+ Resources/PrivacyInfo.xcprivacy
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+
+ rules
+
+ ^Resources/
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
+
+ nested
+
+ weight
+ 10
+
+ ^.*
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^Resources/
+
+ weight
+ 20
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^[^/]+$
+
+ nested
+
+ weight
+ 10
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature/CodeResources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature/CodeResources.meta
new file mode 100755
index 0000000..07575b4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/macOS/AVProVideo.bundle/Contents/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c0c72865ad577924d89c5b7294e3d68e
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS.meta
new file mode 100755
index 0000000..545dcfd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a45325d1aae0425419105777295ac3a7
+folderAsset: yes
+timeCreated: 1455635966
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework.meta
new file mode 100755
index 0000000..2121d01
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework.meta
@@ -0,0 +1,91 @@
+fileFormatVersion: 2
+guid: f83f62879d8fb417cb18d0547c9bfd02
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 0
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/Info.plist b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/Info.plist
new file mode 100755
index 0000000..9e9500b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ libAVProVideo.a
+ LibraryIdentifier
+ tvos-arm64
+ LibraryPath
+ libAVProVideo.a
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ tvos
+
+
+ BinaryPath
+ libAVProVideo.a
+ LibraryIdentifier
+ tvos-arm64_x86_64-simulator
+ LibraryPath
+ libAVProVideo.a
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ tvos
+ SupportedPlatformVariant
+ simulator
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/Info.plist.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/Info.plist.meta
new file mode 100755
index 0000000..fbf3513
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 564ff534905a6457f90fa30388435a72
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature.meta
new file mode 100755
index 0000000..1e029ad
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d7610b687fc9a4c0b8c98b7ad78caf48
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory
new file mode 100755
index 0000000..2300936
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta
new file mode 100755
index 0000000..d1d6269
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f09d69205c0784f98baeb7367563fd29
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements
new file mode 100755
index 0000000..d03275f
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1 b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1
new file mode 100755
index 0000000..f0754b1
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1 differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta
new file mode 100755
index 0000000..b0eb6ae
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b3590dd5797264bd38b7a95c19f68a8f
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta
new file mode 100755
index 0000000..519dbcd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 01a4324f8f5c14e9ea57ca2ece3b2eda
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeResources b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeResources
new file mode 100755
index 0000000..e7687ec
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeResources
@@ -0,0 +1,158 @@
+
+
+
+
+ files
+
+ tvos-arm64/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ tvos-arm64/libAVProVideo.a
+
+ 9sWdY/1Z9l6BL6d/y4oxB2q95Uc=
+
+ tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ tvos-arm64_x86_64-simulator/libAVProVideo.a
+
+ BTS5pqDFK5LZzhMNcR2Wwyvr6kI=
+
+
+ files2
+
+ tvos-arm64/PrivacyInfo.xcprivacy
+
+ hash
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+ tvos-arm64/libAVProVideo.a
+
+ hash
+
+ 9sWdY/1Z9l6BL6d/y4oxB2q95Uc=
+
+ hash2
+
+ 1wl3FmVlgNHvNr+kwj+MgU9wfjbdH4BGFylz1B88Kmk=
+
+
+ tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
+
+ hash
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+ tvos-arm64_x86_64-simulator/libAVProVideo.a
+
+ hash
+
+ BTS5pqDFK5LZzhMNcR2Wwyvr6kI=
+
+ hash2
+
+ P3h3an4+DQmAC0/9KH97JcekCf0KD5xr+Bseu7Ko3hA=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta
new file mode 100755
index 0000000..a7ff2e3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 86a349fa3b78f443bb852a3107ea38b0
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeSignature b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeSignature
new file mode 100755
index 0000000..5257323
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeSignature differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta
new file mode 100755
index 0000000..7c3b6d9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e45738b0486db43d3aabf68d0c82aeba
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64.meta
new file mode 100755
index 0000000..4a168e5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7289482fd54914cab839003c4d332aea
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..0ab51ec
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 9b38351758a0f4c1b8e686fa1e52e1e2
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/libAVProVideo.a b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/libAVProVideo.a
new file mode 100755
index 0000000..914fd30
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/libAVProVideo.a differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/libAVProVideo.a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/libAVProVideo.a.meta
new file mode 100755
index 0000000..a2737ab
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64/libAVProVideo.a.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 086fa97fbd4f2408b83c9f5d9d6f254b
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator.meta
new file mode 100755
index 0000000..e71a132
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a9589f746f0a24265920b136387a81da
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..afa056c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: c46235ac273364174a0c487a909c8221
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/libAVProVideo.a b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/libAVProVideo.a
new file mode 100755
index 0000000..9cffb08
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/libAVProVideo.a differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/libAVProVideo.a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/libAVProVideo.a.meta
new file mode 100755
index 0000000..de490e3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/tvOS/AVProVideo.xcframework/tvos-arm64_x86_64-simulator/libAVProVideo.a.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 3dc564596a029471d89a8edd1ef1449b
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS.meta
new file mode 100755
index 0000000..2584d04
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cdea451e0fabb4169bf35f10f97ed4c7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework.meta
new file mode 100755
index 0000000..8ed45a7
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: fe151797423674af0941aae11c872b90
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 0
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/Info.plist b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/Info.plist
new file mode 100755
index 0000000..08359d6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/Info.plist
@@ -0,0 +1,43 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ libAVProVideo.a
+ LibraryIdentifier
+ xros-arm64
+ LibraryPath
+ libAVProVideo.a
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ xros
+
+
+ BinaryPath
+ libAVProVideo.a
+ LibraryIdentifier
+ xros-arm64-simulator
+ LibraryPath
+ libAVProVideo.a
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ xros
+ SupportedPlatformVariant
+ simulator
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/Info.plist.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/Info.plist.meta
new file mode 100755
index 0000000..0560623
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 39c7d0786968945cea645d34ec8a85e9
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature.meta
new file mode 100755
index 0000000..32a527c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8a1a2b119665c4504905a87dbb2e19f7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory
new file mode 100755
index 0000000..34f528c
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta
new file mode 100755
index 0000000..f442dea
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeDirectory.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0f23496ea164f4f5db8ac4d834044b79
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements
new file mode 100755
index 0000000..d03275f
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1 b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1
new file mode 100755
index 0000000..42d3e1a
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1 differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta
new file mode 100755
index 0000000..ac01d0f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements-1.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2f940660d74c643d49fcfaafe005717e
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta
new file mode 100755
index 0000000..eb58da1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeRequirements.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 904196f2b0ef149958476b306450dc41
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeResources b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeResources
new file mode 100755
index 0000000..147d3bb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeResources
@@ -0,0 +1,158 @@
+
+
+
+
+ files
+
+ xros-arm64-simulator/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ xros-arm64-simulator/libAVProVideo.a
+
+ HPyTY8DNoKF6XJAbKXTFbw6atUk=
+
+ xros-arm64/PrivacyInfo.xcprivacy
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ xros-arm64/libAVProVideo.a
+
+ M95rIhvxq4ZriCxkQKCUhDma9xc=
+
+
+ files2
+
+ xros-arm64-simulator/PrivacyInfo.xcprivacy
+
+ hash
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+ xros-arm64-simulator/libAVProVideo.a
+
+ hash
+
+ HPyTY8DNoKF6XJAbKXTFbw6atUk=
+
+ hash2
+
+ yAHwGx4Ru0dHtyxeTXFSHFd0KsmTkN41h30WmVi6tiQ=
+
+
+ xros-arm64/PrivacyInfo.xcprivacy
+
+ hash
+
+ 0RESd+++ZxZWQhIEMSOOvP7phYs=
+
+ hash2
+
+ pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
+
+
+ xros-arm64/libAVProVideo.a
+
+ hash
+
+ M95rIhvxq4ZriCxkQKCUhDma9xc=
+
+ hash2
+
+ QzbVXMgvjabsnElmS8xNgGryLXIcupvHeNTZglBuDto=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta
new file mode 100755
index 0000000..5448bbc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a0e485ae30785424baa47e8797366491
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeSignature b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeSignature
new file mode 100755
index 0000000..8800f85
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeSignature differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta
new file mode 100755
index 0000000..97d7c79
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/_CodeSignature/CodeSignature.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7bf79fade784049b68e6d7e578ee3ce6
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator.meta
new file mode 100755
index 0000000..b6a47c5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 31de894e512cc45aa9f426cebb2433f2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..610c902
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 47e8938b74a67455fa87751c4aea8f7d
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/libAVProVideo.a b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/libAVProVideo.a
new file mode 100755
index 0000000..bdce2db
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/libAVProVideo.a differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/libAVProVideo.a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/libAVProVideo.a.meta
new file mode 100755
index 0000000..fb51b35
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64-simulator/libAVProVideo.a.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 8816f04fa9265422880b860b0ec6cf33
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64.meta
new file mode 100755
index 0000000..cffd353
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3649695af24a34727968b49ff811ec56
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/PrivacyInfo.xcprivacy b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/PrivacyInfo.xcprivacy
new file mode 100755
index 0000000..cfbe279
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/PrivacyInfo.xcprivacy
@@ -0,0 +1,8 @@
+
+
+
+
+ NSPrivacyTracking
+
+
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/PrivacyInfo.xcprivacy.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/PrivacyInfo.xcprivacy.meta
new file mode 100755
index 0000000..4f292ec
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/PrivacyInfo.xcprivacy.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 0aff60cf48e0449278f0d42f5c8b685f
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/libAVProVideo.a b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/libAVProVideo.a
new file mode 100755
index 0000000..c418ae9
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/libAVProVideo.a differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/libAVProVideo.a.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/libAVProVideo.a.meta
new file mode 100755
index 0000000..fedaa1c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Plugins/visionOS/AVProVideo.xcframework/xros-arm64/libAVProVideo.a.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 13348ea3231f2425a82a2e6f14f2111e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude VisionOS: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ AndroidSharedLibraryType: Executable
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ VisionOS: VisionOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: ARM64
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources.meta
new file mode 100755
index 0000000..1caa74f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 870241155d4fedc4a86fa89eb85ae5c3
+folderAsset: yes
+timeCreated: 1449047212
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures.meta
new file mode 100755
index 0000000..3bd68f6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4112ff91023ab1f44b54380a0431af99
+folderAsset: yes
+timeCreated: 1551713189
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame0.png b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame0.png
new file mode 100755
index 0000000..e04471a
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame0.png differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame0.png.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame0.png.meta
new file mode 100755
index 0000000..42136cb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame0.png.meta
@@ -0,0 +1,90 @@
+fileFormatVersion: 2
+guid: 8bef6179fcd26aa4c89b766c6b95490a
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 2
+ aniso: -1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 0
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: iPhone
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame1.png b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame1.png
new file mode 100755
index 0000000..44bd817
Binary files /dev/null and b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame1.png differ
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame1.png.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame1.png.meta
new file mode 100755
index 0000000..660c6e2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Resources/Textures/AVProVideo-NullPlayer-Frame1.png.meta
@@ -0,0 +1,90 @@
+fileFormatVersion: 2
+guid: 855eae39e9698944daf581d77f6cef3c
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 2
+ aniso: -1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 0
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: iPhone
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts.meta
new file mode 100755
index 0000000..4c36be0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 87c76c122fc365242b155cea199f02b4
+folderAsset: yes
+timeCreated: 1551713189
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes.meta
new file mode 100755
index 0000000..f835304
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9c5f6cc7a68822c4c906fad89505801a
+folderAsset: yes
+timeCreated: 1592333515
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes/MediaReference.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes/MediaReference.cs
new file mode 100755
index 0000000..0faf412
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes/MediaReference.cs
@@ -0,0 +1,118 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ [System.Serializable]
+ [CreateAssetMenu(fileName = "MediaReference", menuName = "AVPro Video/Media Reference", order = 51)]
+ public class MediaReference : ScriptableObject
+ {
+ [SerializeField] string _alias = string.Empty;
+ public string Alias { get { return _alias; } set { _alias = value; } }
+
+ [SerializeField] MediaPath _mediaPath = new MediaPath();
+ public MediaPath MediaPath { get { return _mediaPath; } set { _mediaPath = value; } }
+
+ [Header("Media Hints")]
+
+ [SerializeField] MediaHints _hints = MediaHints.Default;
+ public MediaHints Hints { get { return _hints; } set { _hints = value; } }
+
+ [Header("Platform Overrides")]
+
+ [SerializeField] MediaReference _macOS = null;
+ [SerializeField] MediaReference _windows = null;
+ [SerializeField] MediaReference _android = null;
+ [SerializeField] MediaReference _iOS = null;
+ [SerializeField] MediaReference _tvOS = null;
+ [SerializeField] MediaReference _windowsUWP = null;
+ [SerializeField] MediaReference _webGL = null;
+
+#if UNITY_EDITOR
+ [SerializeField, HideInInspector] byte[] _preview = null;
+
+ public Texture2D GeneratePreview(Texture2D texture)
+ {
+ _preview = null;
+ if (texture)
+ {
+ texture.Apply(true, false);
+ _preview = texture.GetRawTextureData();
+ }
+ UnityEditor.EditorUtility.SetDirty(this);
+ return texture;
+ }
+
+ public bool GetPreview(Texture2D texture)
+ {
+ if (_preview != null && _preview.Length > 0 && _preview.Length > 128*128*4)
+ {
+ texture.LoadRawTextureData(_preview);
+ texture.Apply(true, false);
+ return true;
+ }
+ return false;
+ }
+#endif
+
+ public MediaReference GetCurrentPlatformMediaReference()
+ {
+ MediaReference result = null;
+
+ #if (UNITY_EDITOR_OSX && UNITY_IOS) || (!UNITY_EDITOR && UNITY_IOS)
+ result = GetPlatformMediaReference(Platform.iOS);
+ #elif (UNITY_EDITOR_OSX && UNITY_TVOS) || (!UNITY_EDITOR && UNITY_TVOS)
+ result = GetPlatformMediaReference(Platform.tvOS);
+ #elif (UNITY_EDITOR_OSX || (!UNITY_EDITOR && UNITY_STANDALONE_OSX))
+ result = GetPlatformMediaReference(Platform.macOS);
+ #elif (UNITY_EDITOR_WIN) || (!UNITY_EDITOR && UNITY_STANDALONE_WIN)
+ result = GetPlatformMediaReference(Platform.Windows);
+ #elif (!UNITY_EDITOR && UNITY_WSA_10_0)
+ result = GetPlatformMediaReference(Platform.WindowsUWP);
+ #elif (!UNITY_EDITOR && UNITY_ANDROID)
+ result = GetPlatformMediaReference(Platform.Android);
+ #elif (!UNITY_EDITOR && UNITY_WEBGL)
+ result = GetPlatformMediaReference(Platform.WebGL);
+ #endif
+
+ if (result == null)
+ {
+ result = this;
+ }
+
+ return result;
+ }
+
+ public MediaReference GetPlatformMediaReference(Platform platform)
+ {
+ MediaReference result = null;
+
+ switch (platform)
+ {
+ case Platform.iOS:
+ result = _iOS;
+ break;
+ case Platform.tvOS:
+ result = _tvOS;
+ break;
+ case Platform.macOS:
+ result = _macOS;
+ break;
+ case Platform.Windows:
+ result = _windows;
+ break;
+ case Platform.WindowsUWP:
+ result = _windowsUWP;
+ break;
+ case Platform.Android:
+ result = _android;
+ break;
+ case Platform.WebGL:
+ result = _webGL;
+ break;
+ }
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes/MediaReference.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes/MediaReference.cs.meta
new file mode 100755
index 0000000..645519d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/AssetTypes/MediaReference.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8b1c70b7e7502564e93d418de9017d1f
+timeCreated: 1592337480
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components.meta
new file mode 100755
index 0000000..b8392a5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 40d7664ce355730488a96ff5305f1b5d
+folderAsset: yes
+timeCreated: 1438698284
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMaterial.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMaterial.cs
new file mode 100755
index 0000000..6f18a1e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMaterial.cs
@@ -0,0 +1,231 @@
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS
+ #define UNITY_PLATFORM_SUPPORTS_YPCBCR
+#endif
+
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Sets up a material to display the video from a MediaPlayer
+ ///
+ [AddComponentMenu("AVPro Video/Apply To Material", 300)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public sealed class ApplyToMaterial : ApplyToBase
+ {
+ [Header("Display")]
+ [Space(8f)]
+
+ [Tooltip("Default texture to display when the video texture is preparing")]
+ [SerializeField] Texture2D _defaultTexture = null;
+
+ public Texture2D DefaultTexture
+ {
+ get { return _defaultTexture; }
+ set { if (_defaultTexture != value) { _defaultTexture = value; _isDirty = true; } }
+ }
+
+ [Space(8f)]
+ [Header("Material Target")]
+
+ [SerializeField] Material _material = null;
+
+ public Material Material
+ {
+ get { return _material; }
+ set { if (_material != value) { _material = value; _isDirty = true; } }
+ }
+
+ [SerializeField] string _texturePropertyName = Helper.UnityBaseTextureName;
+
+ public string TexturePropertyName
+ {
+ get { return _texturePropertyName; }
+ set
+ {
+ if (_texturePropertyName != value)
+ {
+ _texturePropertyName = value;
+ // TODO: if the property changes, remove it from the perioud SetTexture()
+ _propTexture = new LazyShaderProperty(_texturePropertyName);
+ _isDirty = true;
+ }
+ }
+ }
+
+ [SerializeField] Vector2 _offset = Vector2.zero;
+
+ public Vector2 Offset
+ {
+ get { return _offset; }
+ set { if (_offset != value) { _offset = value; _isDirty = true; } }
+ }
+
+ [SerializeField] Vector2 _scale = Vector2.one;
+
+ public Vector2 Scale
+ {
+ get { return _scale; }
+ set { if (_scale != value) { _scale = value; _isDirty = true; } }
+ }
+
+ private Texture _lastTextureApplied;
+ private LazyShaderProperty _propTexture;
+
+ private Texture _originalTexture;
+ private Vector2 _originalScale = Vector2.one;
+ private Vector2 _originalOffset = Vector2.zero;
+
+ // We do a LateUpdate() to allow for any changes in the texture that may have happened in Update()
+ private void LateUpdate()
+ {
+ Apply();
+ }
+
+ public override void Apply()
+ {
+ bool applied = false;
+
+ if (_media != null && _media.TextureProducer != null)
+ {
+ Texture resamplerTex = _media.FrameResampler == null || _media.FrameResampler.OutputTexture == null ? null : _media.FrameResampler.OutputTexture[0];
+ Texture texture = _media.UseResampler ? resamplerTex : _media.TextureProducer.GetTexture(0);
+ if (texture != null)
+ {
+ // Check for changing texture
+ if (texture != _lastTextureApplied)
+ {
+ _isDirty = true;
+ }
+
+ if (_isDirty)
+ {
+ int planeCount = _media.UseResampler ? 1 : _media.TextureProducer.GetTextureCount();
+ for (int plane = 0; plane < planeCount; ++plane)
+ {
+ Texture resamplerTexPlane = _media.FrameResampler == null || _media.FrameResampler.OutputTexture == null ? null : _media.FrameResampler.OutputTexture[plane];
+ texture = _media.UseResampler ? resamplerTexPlane : _media.TextureProducer.GetTexture(plane);
+ if (texture != null)
+ {
+ ApplyMapping(texture, _media.TextureProducer.RequiresVerticalFlip(), plane);
+ }
+ }
+ }
+ applied = true;
+ }
+ }
+
+ // If the media didn't apply a texture, then try to apply the default texture
+ if (!applied)
+ {
+ if (_defaultTexture != _lastTextureApplied)
+ {
+ _isDirty = true;
+ }
+ if (_isDirty)
+ {
+#if UNITY_PLATFORM_SUPPORTS_YPCBCR
+ if (_material != null && _material.HasProperty(VideoRender.PropUseYpCbCr.Id))
+ {
+ _material.DisableKeyword(VideoRender.Keyword_UseYpCbCr);
+ }
+#endif
+ ApplyMapping(_defaultTexture, false);
+ }
+ }
+ }
+
+
+ private void ApplyMapping(Texture texture, bool requiresYFlip, int plane = 0)
+ {
+ if (_material != null)
+ {
+ _isDirty = false;
+
+ if (plane == 0)
+ {
+ VideoRender.SetupMaterialForMedia(_material, _media, _propTexture.Id, texture, texture == _defaultTexture);
+ _lastTextureApplied = texture;
+
+ #if (!UNITY_EDITOR && UNITY_ANDROID)
+ if (texture == _defaultTexture) { _material.EnableKeyword("USING_DEFAULT_TEXTURE"); }
+ else { _material.DisableKeyword("USING_DEFAULT_TEXTURE"); }
+ #endif
+
+ if (texture != null)
+ {
+ if (requiresYFlip)
+ {
+ _material.SetTextureScale(_propTexture.Id, new Vector2(_scale.x, -_scale.y));
+ _material.SetTextureOffset(_propTexture.Id, Vector2.up + _offset);
+ }
+ else
+ {
+ _material.SetTextureScale(_propTexture.Id, _scale);
+ _material.SetTextureOffset(_propTexture.Id, _offset);
+ }
+ }
+ }
+ else if (plane == 1)
+ {
+ if (texture != null)
+ {
+ if (requiresYFlip)
+ {
+ _material.SetTextureScale(VideoRender.PropChromaTex.Id, new Vector2(_scale.x, -_scale.y));
+ _material.SetTextureOffset(VideoRender.PropChromaTex.Id, Vector2.up + _offset);
+ }
+ else
+ {
+ _material.SetTextureScale(VideoRender.PropChromaTex.Id, _scale);
+ _material.SetTextureOffset(VideoRender.PropChromaTex.Id, _offset);
+ }
+ }
+ }
+ }
+ }
+
+ protected override void SaveProperties()
+ {
+ if (_material != null)
+ {
+ if (string.IsNullOrEmpty(_texturePropertyName))
+ {
+ _originalTexture = _material.mainTexture;
+ _originalScale = _material.mainTextureScale;
+ _originalOffset = _material.mainTextureOffset;
+ }
+ else
+ {
+ _originalTexture = _material.GetTexture(_texturePropertyName);
+ _originalScale = _material.GetTextureScale(_texturePropertyName);
+ _originalOffset = _material.GetTextureOffset(_texturePropertyName);
+ }
+ }
+ _propTexture = new LazyShaderProperty(_texturePropertyName);
+ }
+
+ protected override void RestoreProperties()
+ {
+ if (_material != null)
+ {
+ if (string.IsNullOrEmpty(_texturePropertyName))
+ {
+ _material.mainTexture = _originalTexture;
+ _material.mainTextureScale = _originalScale;
+ _material.mainTextureOffset = _originalOffset;
+ }
+ else
+ {
+ _material.SetTexture(_texturePropertyName, _originalTexture);
+ _material.SetTextureScale(_texturePropertyName, _originalScale);
+ _material.SetTextureOffset(_texturePropertyName, _originalOffset);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMaterial.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMaterial.cs.meta
new file mode 100755
index 0000000..de75a96
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMaterial.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d2feedce2e2e63647b8f875ec0894a15
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMesh.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMesh.cs
new file mode 100755
index 0000000..c6e92e8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMesh.cs
@@ -0,0 +1,248 @@
+using UnityEngine;
+using UnityEngine.Serialization;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Sets up a mesh to display the video from a MediaPlayer
+ ///
+ [AddComponentMenu("AVPro Video/Apply To Mesh", 300)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public sealed class ApplyToMesh : ApplyToBase
+ {
+ // TODO: add specific material / material index to target in the mesh if there are multiple materials
+
+ [Space(8f)]
+ [Header("Display")]
+
+ [Tooltip("Default texture to display when the video texture is preparing")]
+ [SerializeField] Texture2D _defaultTexture = null;
+
+ public Texture2D DefaultTexture
+ {
+ get { return _defaultTexture; }
+ set { ChangeDefaultTexture(value); }
+ }
+
+ [Space(8f)]
+ [FormerlySerializedAs("_mesh")]
+ [Header("Renderer Target")]
+ [SerializeField] Renderer _renderer = null;
+
+ public Renderer MeshRenderer
+ {
+ get { return _renderer; }
+ set { ChangeRenderer(value); }
+ }
+
+ [SerializeField] int _materialIndex = -1;
+
+ public int MaterialIndex
+ {
+ get { return _materialIndex; }
+ set { _materialIndex = value; }
+ }
+
+ private void ChangeDefaultTexture(Texture2D texture)
+ {
+ if (_defaultTexture != texture)
+ {
+ _defaultTexture = texture;
+ ForceUpdate();
+ }
+ }
+ private void ChangeRenderer(Renderer renderer)
+ {
+ if (_renderer != renderer)
+ {
+ if (_renderer)
+ {
+ // TODO: Remove from renderer
+ }
+ _renderer = renderer;
+ if (_renderer)
+ {
+ ForceUpdate();
+ }
+ }
+ }
+
+ [SerializeField] string _texturePropertyName = Helper.UnityBaseTextureName;
+
+ public string TexturePropertyName
+ {
+ get { return _texturePropertyName; }
+ set
+ {
+ if (_texturePropertyName != value)
+ {
+ _texturePropertyName = value;
+ // TODO: if the property changes, remove it from the perioud SetTexture()
+ _propTexture = new LazyShaderProperty(_texturePropertyName);
+ _isDirty = true;
+ }
+ }
+ }
+
+ [SerializeField] Vector2 _offset = Vector2.zero;
+
+ public Vector2 Offset
+ {
+ get { return _offset; }
+ set { if (_offset != value) { _offset = value; _isDirty = true; } }
+ }
+
+ [SerializeField] Vector2 _scale = Vector2.one;
+
+ public Vector2 Scale
+ {
+ get { return _scale; }
+ set { if (_scale != value) { _scale = value; _isDirty = true; } }
+ }
+
+ private Texture _lastTextureApplied;
+ private LazyShaderProperty _propTexture;
+
+ // We do a LateUpdate() to allow for any changes in the texture that may have happened in Update()
+ private void LateUpdate()
+ {
+ Apply();
+ }
+
+ public override void Apply()
+ {
+ bool applied = false;
+
+ // Try to apply texture from media
+ if (_media != null && _media.TextureProducer != null)
+ {
+ Texture resamplerTex = _media.FrameResampler == null || _media.FrameResampler.OutputTexture == null ? null : _media.FrameResampler.OutputTexture[0];
+ Texture texture = _media.UseResampler ? resamplerTex : _media.TextureProducer.GetTexture(0);
+ if (texture != null)
+ {
+ // Check for changing texture
+ if (texture != _lastTextureApplied)
+ {
+ _isDirty = true;
+ }
+
+ if (_isDirty)
+ {
+ int planeCount = _media.UseResampler ? 1 : _media.TextureProducer.GetTextureCount();
+ for (int plane = 0; plane < planeCount; plane++)
+ {
+ Texture resamplerTexPlane = _media.FrameResampler == null || _media.FrameResampler.OutputTexture == null ? null : _media.FrameResampler.OutputTexture[plane];
+ texture = _media.UseResampler ? resamplerTexPlane : _media.TextureProducer.GetTexture(plane);
+ if (texture != null)
+ {
+ ApplyMapping(texture, _media.TextureProducer.RequiresVerticalFlip(), plane, _materialIndex);
+ }
+ }
+ }
+ applied = true;
+ }
+ }
+
+ // If the media didn't apply a texture, then try to apply the default texture
+ if (!applied)
+ {
+ if (_defaultTexture != _lastTextureApplied)
+ {
+ _isDirty = true;
+ }
+ if (_isDirty)
+ {
+ ApplyMapping(_defaultTexture, false, 0, _materialIndex);
+ }
+ }
+ }
+
+ private void ApplyMapping(Texture texture, bool requiresYFlip, int plane, int materialIndex = -1)
+ {
+ if (_renderer != null)
+ {
+ _isDirty = false;
+
+ Material[] meshMaterials = _renderer.materials;
+ if (meshMaterials != null)
+ {
+ for (int i = 0; i < meshMaterials.Length; i++)
+ {
+ if (_materialIndex < 0 || i == _materialIndex)
+ {
+ Material mat = meshMaterials[i];
+ if (mat != null)
+ {
+ if (plane == 0)
+ {
+ VideoRender.SetupMaterialForMedia(mat, _media, _propTexture.Id, texture, texture == _defaultTexture);
+ _lastTextureApplied = texture;
+
+ #if (!UNITY_EDITOR && UNITY_ANDROID)
+ if(texture == _defaultTexture) { mat.EnableKeyword("USING_DEFAULT_TEXTURE"); }
+ else { mat.DisableKeyword("USING_DEFAULT_TEXTURE"); }
+ #endif
+
+ if (texture != null)
+ {
+ if (requiresYFlip)
+ {
+ mat.SetTextureScale(_propTexture.Id, new Vector2(_scale.x, -_scale.y));
+ mat.SetTextureOffset(_propTexture.Id, Vector2.up + _offset);
+ }
+ else
+ {
+ mat.SetTextureScale(_propTexture.Id, _scale);
+ mat.SetTextureOffset(_propTexture.Id, _offset);
+ }
+ }
+ }
+ else if (plane == 1)
+ {
+ if (texture != null)
+ {
+ if (requiresYFlip)
+ {
+ mat.SetTextureScale(VideoRender.PropChromaTex.Id, new Vector2(_scale.x, -_scale.y));
+ mat.SetTextureOffset(VideoRender.PropChromaTex.Id, Vector2.up + _offset);
+ }
+ else
+ {
+ mat.SetTextureScale(VideoRender.PropChromaTex.Id, _scale);
+ mat.SetTextureOffset(VideoRender.PropChromaTex.Id, _offset);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ protected override void OnEnable()
+ {
+ if (_renderer == null)
+ {
+ _renderer = this.GetComponent();
+ if (_renderer == null)
+ {
+ Debug.LogWarning("[AVProVideo] No MeshRenderer set or found in gameobject");
+ }
+ }
+
+ _propTexture = new LazyShaderProperty(_texturePropertyName);
+
+ ForceUpdate();
+ }
+
+ protected override void OnDisable()
+ {
+ ApplyMapping(_defaultTexture, false, 0, _materialIndex);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMesh.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMesh.cs.meta
new file mode 100755
index 0000000..536c00f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ApplyToMesh.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f6d1977a52888584496b1acc7e998011
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioChannelMixer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioChannelMixer.cs
new file mode 100755
index 0000000..db75fb1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioChannelMixer.cs
@@ -0,0 +1,81 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2019-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ /// Allows per-channel volume control
+ /// Currently supported on Windows and UWP (Media Foundation API only), macOS, iOS, tvOS and Android (ExoPlayer API only)
+ [AddComponentMenu("AVPro Video/Audio Channel Mixer", 401)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public class AudioChannelMixer : MonoBehaviour
+ {
+ const int MaxChannels = 8;
+
+ [Range(0f, 1f)]
+ [SerializeField] float[] _channels = null;
+
+ /// Range 0.0 to 1.0
+ public float[] Channel
+ {
+ get { return _channels; }
+ set { _channels = value; }
+ }
+
+ void Reset()
+ {
+ _channels = new float[MaxChannels];
+ for (int i = 0; i < MaxChannels; i++)
+ {
+ _channels[i] = 1f;
+ }
+ }
+
+ void ChangeChannelCount(int numChannels)
+ {
+ float[] channels = new float[numChannels];
+ if (_channels != null && _channels.Length != 0)
+ {
+ for (int i = 0; i < channels.Length; i++)
+ {
+ if (i < _channels.Length)
+ {
+ channels[i] = _channels[i];
+ }
+ else
+ {
+ channels[i] = 1f;
+ }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < numChannels; i++)
+ {
+ channels[i] = 1f;
+ }
+ }
+ _channels = channels;
+ }
+
+ void OnAudioFilterRead(float[] data, int channels)
+ {
+ if (channels != _channels.Length)
+ {
+ ChangeChannelCount(channels);
+ }
+ int k = 0;
+ int numSamples = data.Length / channels;
+ for (int j = 0; j < numSamples; j++)
+ {
+ for (int i = 0; i < channels; i++)
+ {
+ data[k] *= _channels[i];
+ k++;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioChannelMixer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioChannelMixer.cs.meta
new file mode 100755
index 0000000..cb9873b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioChannelMixer.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 383a68f1e3e94be4b84df59dd26074db
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioOutput.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioOutput.cs
new file mode 100755
index 0000000..fbc837f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioOutput.cs
@@ -0,0 +1,162 @@
+//-----------------------------------------------------------------------------
+// Copyright 2015-2023 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using UnityEngine;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Audio is grabbed from the MediaPlayer and rendered via Unity AudioSource
+ /// This allows audio to have 3D spatial control, effects applied and to be spatialised for VR
+ /// Currently supported on Windows and UWP (Media Foundation API only), macOS, iOS, tvOS and Android (ExoPlayer API only)
+ ///
+ [RequireComponent(typeof(AudioSource))]
+ [AddComponentMenu("AVPro Video/Audio Output", 400)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public class AudioOutput : MonoBehaviour
+ {
+ public enum AudioOutputMode
+ {
+ OneToAllChannels,
+ MultipleChannels
+ }
+
+ [SerializeField] MediaPlayer _mediaPlayer = null;
+ [SerializeField] AudioOutputMode _audioOutputMode = AudioOutputMode.MultipleChannels;
+ [HideInInspector, SerializeField] int _channelMask = 0xffff;
+ [SerializeField] bool _supportPositionalAudio = false;
+
+ public MediaPlayer Player
+ {
+ get { return _mediaPlayer; }
+ set { ChangeMediaPlayer(value); }
+ }
+
+ public AudioOutputMode OutputMode
+ {
+ get { return _audioOutputMode; }
+ set { _audioOutputMode = value; }
+ }
+
+ public int ChannelMask
+ {
+ get { return _channelMask; }
+ set { _channelMask = value; }
+ }
+
+ private AudioSource _audioSource;
+
+ void Awake()
+ {
+ _audioSource = this.GetComponent();
+ Debug.Assert(_audioSource != null);
+ }
+
+ void Start()
+ {
+ AudioSettings.OnAudioConfigurationChanged += OnAudioConfigurationChanged;
+ ChangeMediaPlayer(_mediaPlayer);
+ }
+
+ void OnAudioConfigurationChanged(bool deviceChanged)
+ {
+ if (_mediaPlayer == null || _mediaPlayer.Control == null)
+ return;
+ _mediaPlayer.Control.AudioConfigurationChanged(deviceChanged);
+ }
+
+ void OnDestroy()
+ {
+ ChangeMediaPlayer(null);
+ }
+
+ void Update()
+ {
+ if (_mediaPlayer != null && _mediaPlayer.Control != null && _mediaPlayer.Control.IsPlaying())
+ {
+ ApplyAudioSettings(_mediaPlayer, _audioSource);
+ }
+ }
+
+ public AudioSource GetAudioSource()
+ {
+ return _audioSource;
+ }
+
+ public void ChangeMediaPlayer(MediaPlayer newPlayer)
+ {
+ // When changing the media player, handle event subscriptions
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.AudioSource = null;
+ _mediaPlayer.Events.RemoveListener(OnMediaPlayerEvent);
+ _mediaPlayer = null;
+ }
+
+ _mediaPlayer = newPlayer;
+ if (_mediaPlayer != null)
+ {
+ _mediaPlayer.Events.AddListener(OnMediaPlayerEvent);
+ _mediaPlayer.AudioSource = _audioSource;
+ }
+
+ if (_supportPositionalAudio)
+ {
+ if (_audioSource.clip == null)
+ {
+ // Position audio is implemented from hints found on this thread:
+ // https://forum.unity.com/threads/onaudiofilterread-sound-spatialisation.362782/
+ int frameCount = 2048 * 10;
+ int sampleCount = frameCount * Helper.GetUnityAudioSpeakerCount();
+ AudioClip clip = AudioClip.Create("dummy", frameCount, Helper.GetUnityAudioSpeakerCount(), Helper.GetUnityAudioSampleRate(), false);
+ float[] samples = new float[sampleCount];
+ for (int i = 0; i < samples.Length; i++) { samples[i] = 1f; }
+ clip.SetData(samples, 0);
+ _audioSource.clip = clip;
+ _audioSource.loop = true;
+ }
+ }
+ else if (_audioSource.clip != null)
+ {
+ _audioSource.clip = null;
+ }
+ }
+
+ // Callback function to handle events
+ private void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.Closing:
+ _audioSource.Stop();
+ break;
+ case MediaPlayerEvent.EventType.Started:
+ ApplyAudioSettings(_mediaPlayer, _audioSource);
+ _audioSource.Play();
+ break;
+ }
+ }
+
+ private static void ApplyAudioSettings(MediaPlayer player, AudioSource audioSource)
+ {
+ // Apply volume and mute from the MediaPlayer to the AudioSource
+ if (audioSource != null && player != null && player.Control != null)
+ {
+ float volume = player.Control.GetVolume();
+ bool isMuted = player.Control.IsMuted();
+ float rate = player.Control.GetPlaybackRate();
+ audioSource.volume = volume;
+ audioSource.mute = isMuted;
+ audioSource.pitch = rate;
+ }
+ }
+
+#if (UNITY_EDITOR_WIN || UNITY_EDITOR_OSX) || (!UNITY_EDITOR && (UNITY_STANDALONE_WIN || UNITY_WSA_10_0 || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID))
+ void OnAudioFilterRead(float[] audioData, int channelCount)
+ {
+ AudioOutputManager.Instance.RequestAudio(this, _mediaPlayer, audioData, channelCount, _channelMask, _audioOutputMode, _supportPositionalAudio);
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioOutput.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioOutput.cs.meta
new file mode 100755
index 0000000..5dbcd4e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/AudioOutput.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3b05a64a5de3f8546bf586f42e37b979
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/DisplayIMGUI.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/DisplayIMGUI.cs
new file mode 100755
index 0000000..41df72f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/DisplayIMGUI.cs
@@ -0,0 +1,321 @@
+#if UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_WSA_10_0 || UNITY_IOS || UNITY_TVOS || UNITY_ANDROID || (UNITY_WEBGL && UNITY_2017_2_OR_NEWER)
+ #define UNITY_PLATFORM_SUPPORTS_LINEAR
+#endif
+#if (UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN))
+ #define UNITY_PLATFORM_SUPPORTS_VIDEOASPECTRATIO
+#endif
+
+using UnityEngine;
+using UnityEngine.Serialization;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Displays the video from MediaPlayer component using IMGUI
+ ///
+ [AddComponentMenu("AVPro Video/Display IMGUI", 200)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ [ExecuteInEditMode]
+ public class DisplayIMGUI : MonoBehaviour
+ {
+ [SerializeField] MediaPlayer _mediaPlayer = null;
+ public MediaPlayer Player
+ {
+ get { return _mediaPlayer; }
+ set { _mediaPlayer = value; Update(); }
+ }
+
+ [SerializeField] ScaleMode _scaleMode = ScaleMode.ScaleToFit;
+ public ScaleMode ScaleMode { get { return _scaleMode; } set { _scaleMode = value; } }
+
+ [SerializeField] Color _color = UnityEngine.Color.white;
+ public Color Color { get { return _color; } set { _color = value; } }
+
+ [FormerlySerializedAs("_alphaBlend")]
+ [SerializeField] bool _allowTransparency = false;
+ public bool AllowTransparency { get { return _allowTransparency; } set { _allowTransparency = value; } }
+
+ [SerializeField] bool _useDepth = false;
+ public bool UseDepth { get { return _useDepth; } set { _useDepth = value; } }
+
+ [SerializeField] int _depth = 0;
+ public int Depth { get { return _depth; } set { _depth = value; } }
+
+ [Header("Area")]
+
+ [FormerlySerializedAs("_fullScreen")]
+ [SerializeField] bool _isAreaFullScreen = true;
+ public bool IsAreaFullScreen { get { return _isAreaFullScreen; } set { _isAreaFullScreen = value; } }
+
+ [FormerlySerializedAs("_x")]
+ [Range(0f, 1f)]
+ [SerializeField] float _areaX = 0f;
+ public float AreaX { get { return _areaX; } set { _areaX = value; } }
+
+ [FormerlySerializedAs("_y")]
+ [Range(0f, 1f)]
+ [SerializeField] float _areaY = 0f;
+ public float AreaY { get { return _areaY; } set { _areaY = value; } }
+
+ [FormerlySerializedAs("_width")]
+ [Range(0f, 1f)]
+ [SerializeField] float _areaWidth = 1f;
+ public float AreaWidth { get { return _areaWidth; } set { _areaWidth = value; } }
+
+ [FormerlySerializedAs("_height")]
+ [Range(0f, 1f)]
+ [SerializeField] float _areaHeight = 1f;
+ public float AreaHeight { get { return _areaHeight; } set { _areaHeight = value; } }
+
+ [FormerlySerializedAs("_displayInEditor")]
+ [SerializeField] bool _showAreaInEditor = false;
+ public bool ShowAreaInEditor { get { return _showAreaInEditor; } set { _showAreaInEditor = value; } }
+
+ private static Shader _shaderAlphaPacking;
+ private Material _material;
+
+ void Start()
+ {
+ // Disabling useGUILayout lets you skip the GUI layout phase which helps performance, but this also breaks the GUI.depth usage.
+ if (!_useDepth)
+ {
+ this.useGUILayout = false;
+ }
+
+ if (!_shaderAlphaPacking)
+ {
+ _shaderAlphaPacking = Shader.Find("AVProVideo/Internal/IMGUI/Texture Transparent");
+ if (!_shaderAlphaPacking)
+ {
+ Debug.LogWarning("[AVProVideo] Missing shader 'AVProVideo/Internal/IMGUI/Texture Transparent'");
+ }
+ }
+ }
+
+ public void Update()
+ {
+ if (_mediaPlayer != null)
+ {
+ SetupMaterial();
+ }
+ }
+
+ void OnDestroy()
+ {
+ // Destroy existing material
+ if (_material != null)
+ {
+#if UNITY_EDITOR
+ Material.DestroyImmediate(_material);
+#else
+ Material.Destroy(_material);
+#endif
+ _material = null;
+ }
+ }
+
+ private Shader GetRequiredShader()
+ {
+ Shader result = null;
+
+ if (result == null && _mediaPlayer.TextureProducer != null)
+ {
+ switch (_mediaPlayer.TextureProducer.GetTextureAlphaPacking())
+ {
+ case AlphaPacking.None:
+ break;
+ case AlphaPacking.LeftRight:
+ case AlphaPacking.TopBottom:
+ result = _shaderAlphaPacking;
+ break;
+ }
+ }
+
+#if UNITY_PLATFORM_SUPPORTS_LINEAR
+ if (result == null && _mediaPlayer.Info != null)
+ {
+ // If the player does support generating sRGB textures then we need to use a shader to convert them for display via IMGUI
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear && !_mediaPlayer.Info.PlayerSupportsLinearColorSpace())
+ {
+ result = _shaderAlphaPacking;
+ }
+ }
+#endif
+ if (result == null && _mediaPlayer.TextureProducer != null)
+ {
+ if (_mediaPlayer.TextureProducer.GetTextureCount() == 2)
+ {
+ result = _shaderAlphaPacking;
+ }
+ }
+ return result;
+ }
+
+ private void SetupMaterial()
+ {
+ // Get required shader
+ Shader currentShader = null;
+ if (_material != null)
+ {
+ currentShader = _material.shader;
+ }
+ Shader nextShader = GetRequiredShader();
+
+ // If the shader requirement has changed
+ if (currentShader != nextShader)
+ {
+ // Destroy existing material
+ if (_material != null)
+ {
+#if UNITY_EDITOR
+ Material.DestroyImmediate(_material);
+#else
+ Material.Destroy(_material);
+#endif
+ _material = null;
+ }
+
+ // Create new material
+ if (nextShader != null)
+ {
+ _material = new Material(nextShader);
+ }
+ }
+ }
+
+#if UNITY_EDITOR
+ private void DrawArea()
+ {
+ Rect rect = GetAreaRect();
+ Rect uv = rect;
+ uv.x /= Screen.width;
+ uv.width /= Screen.width;
+ uv.y /= Screen.height;
+ uv.height /= Screen.height;
+ uv.width *= 16f;
+ uv.height *= 16f;
+ uv.x += 0.5f;
+ uv.y += 0.5f;
+ Texture2D icon = Resources.Load("AVProVideoIcon");
+ GUI.depth = _depth;
+ GUI.color = _color;
+ GUI.DrawTextureWithTexCoords(rect, icon, uv);
+ }
+#endif
+
+ void OnGUI()
+ {
+#if UNITY_EDITOR
+ if (_showAreaInEditor && !Application.isPlaying)
+ {
+ DrawArea();
+ return;
+ }
+#endif
+
+ if (_mediaPlayer == null)
+ {
+ return;
+ }
+
+ Texture texture = null;
+ if (_showAreaInEditor)
+ {
+#if UNITY_EDITOR
+ texture = Texture2D.whiteTexture;
+#endif
+ }
+ texture = VideoRender.GetTexture(_mediaPlayer, 0);
+ if (_mediaPlayer.Info != null && !_mediaPlayer.Info.HasVideo())
+ {
+ texture = null;
+ }
+
+ if (texture != null)
+ {
+ bool isTextureVisible = (_color.a > 0f || !_allowTransparency);
+ if (isTextureVisible)
+ {
+ GUI.depth = _depth;
+ GUI.color = _color;
+
+ Rect rect = GetAreaRect();
+
+ // TODO: change this to a material-only path so we only have a single drawing path
+ if (_material != null)
+ {
+ // TODO: Only setup material when needed
+ VideoRender.SetupMaterialForMedia(_material, _mediaPlayer);
+
+ // NOTE: It seems that Graphics.DrawTexture() behaves differently than GUI.DrawTexture() when it comes to sRGB writing
+ // on newer versions of Unity (at least 2018.2.19 and above), so now we have to force the conversion to sRGB on writing
+ bool restoreSRGBWrite = false;
+#if UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN)
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear && !GL.sRGBWrite)
+ {
+ restoreSRGBWrite = true;
+ }
+#endif
+ if (restoreSRGBWrite)
+ {
+ GL.sRGBWrite = true;
+ }
+
+ VideoRender.DrawTexture(rect, texture, _scaleMode, _mediaPlayer.TextureProducer.GetTextureAlphaPacking(), _mediaPlayer.TextureProducer.GetTexturePixelAspectRatio(), _material);
+
+ if (restoreSRGBWrite)
+ {
+ GL.sRGBWrite = false;
+ }
+ }
+ else
+ {
+ bool requiresVerticalFlip = false;
+ if (_mediaPlayer.TextureProducer != null)
+ {
+ requiresVerticalFlip = _mediaPlayer.TextureProducer.RequiresVerticalFlip();
+ }
+ if (requiresVerticalFlip)
+ {
+ GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0f, rect.y + (rect.height / 2f)));
+ }
+ #if UNITY_PLATFORM_SUPPORTS_VIDEOASPECTRATIO
+ float par = _mediaPlayer.TextureProducer.GetTexturePixelAspectRatio();
+ if (par > 0f)
+ {
+ if (par > 1f)
+ {
+ GUIUtility.ScaleAroundPivot(new Vector2(par, 1f), new Vector2(rect.x + (rect.width / 2f), rect.y + (rect.height / 2f)));
+ }
+ else
+ {
+ GUIUtility.ScaleAroundPivot(new Vector2(1f, 1f/par), new Vector2(rect.x + (rect.width / 2f), rect.y + (rect.height / 2f)));
+ }
+ }
+ #endif
+ GUI.DrawTexture(rect, texture, _scaleMode, _allowTransparency);
+ }
+ }
+ }
+ }
+
+ public Rect GetAreaRect()
+ {
+ Rect rect;
+ if (_isAreaFullScreen)
+ {
+ rect = new Rect(0.0f, 0.0f, Screen.width, Screen.height);
+ }
+ else
+ {
+ rect = new Rect(_areaX * (Screen.width - 1), _areaY * (Screen.height - 1), _areaWidth * Screen.width, _areaHeight * Screen.height);
+ }
+
+ return rect;
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/DisplayIMGUI.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/DisplayIMGUI.cs.meta
new file mode 100755
index 0000000..f49f8cc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/DisplayIMGUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 75f3b319d2d69934d8bf545ab45c918d
+timeCreated: 1544813301
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer.cs
new file mode 100755
index 0000000..0cf2cdb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer.cs
@@ -0,0 +1,1495 @@
+//#define AVPROVIDEO_BETA_SUPPORT_TIMESCALE // BETA FEATURE: comment this in if you want to support frame stepping based on changes in Time.timeScale or Time.captureFramerate
+//#define AVPROVIDEO_FORCE_NULL_MEDIAPLAYER // DEV FEATURE: comment this out to make all mediaplayers use the null mediaplayer
+//#define AVPROVIDEO_DISABLE_LOGGING // DEV FEATURE: disables Debug.Log from AVPro Video
+#define AVPROVIDEO_SUPPORT_LIVEEDITMODE
+using UnityEngine;
+using UnityEngine.Serialization;
+using System.Collections;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// This is the primary AVPro Video component and handles all media loading,
+ /// seeking, information retrieving etc. This component does not do any display
+ /// of the video. Instead this is handled by other components such as
+ /// ApplyToMesh, ApplyToMaterial, DisplayIMGUI, DisplayUGUI.
+ ///
+#if AVPROVIDEO_SUPPORT_LIVEEDITMODE
+ [ExecuteInEditMode]
+#endif
+ [AddComponentMenu("AVPro Video/Media Player", -100)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public partial class MediaPlayer : MonoBehaviour
+ {
+ // These fields are just used to setup the default properties for a new video that is about to be loaded
+ // Once a video has been loaded you should use the interfaces exposed in the properties to
+ // change playback properties (eg volume, looping, mute)
+
+ // Media source
+
+ [SerializeField] MediaSource _mediaSource = MediaSource.Reference;
+ public MediaSource MediaSource { get { return _mediaSource; } internal set { _mediaSource = value; } }
+
+ [SerializeField] MediaReference _mediaReference = null;
+ public MediaReference MediaReference { get { return _mediaReference; } internal set { _mediaReference = value; } }
+
+ [SerializeField] MediaPath _mediaPath = new MediaPath();
+ public MediaPath MediaPath { get { return _mediaPath; } internal set { _mediaPath = value; } }
+
+ [SerializeField] MediaHints _fallbackMediaHints = MediaHints.Default;
+ public MediaHints FallbackMediaHints { get { return _fallbackMediaHints; } set { _fallbackMediaHints = value; } }
+
+ [FormerlySerializedAs("m_AutoOpen")]
+ [SerializeField] bool _autoOpen = true;
+ public bool AutoOpen { get { return _autoOpen; } set { _autoOpen = value; } }
+
+ [FormerlySerializedAs("m_AutoStart")]
+ [SerializeField] bool _autoPlayOnStart = true;
+ public bool AutoStart { get { return _autoPlayOnStart; } set { _autoPlayOnStart = value; } }
+
+ // Basic controls
+
+ [FormerlySerializedAs("m_Loop")]
+ [SerializeField] bool _loop = false;
+ public bool Loop
+ {
+ get
+ {
+ return (_controlInterface != null) ? _controlInterface.IsLooping() : _loop;
+ }
+
+ set
+ {
+ _loop = value;
+ if (_controlInterface != null)
+ _controlInterface.SetLooping(_loop);
+ }
+ }
+
+ [FormerlySerializedAs("m_Volume")]
+ [Range(0.0f, 1.0f)]
+ [SerializeField] float _audioVolume = 1.0f;
+ public virtual float AudioVolume
+ {
+ get
+ {
+ return (_controlInterface != null) ? _controlInterface.GetVolume() : _audioVolume;
+ }
+
+ set
+ {
+ _audioVolume = Mathf.Clamp01(value);
+ if (_controlInterface != null)
+ _controlInterface.SetVolume(_audioVolume);
+ }
+ }
+
+ [FormerlySerializedAs("m_Balance")]
+ [Range(-1.0f, 1.0f)]
+ [SerializeField] float _audioBalance = 0.0f;
+ public float AudioBalance
+ {
+ get
+ {
+ return (_controlInterface != null) ? _controlInterface.GetBalance() : _audioBalance;
+ }
+
+ set
+ {
+ _audioBalance = Mathf.Clamp(value, -1f, 1f);
+ if (_controlInterface != null)
+ _controlInterface.SetBalance(_audioBalance);
+ }
+ }
+
+ [FormerlySerializedAs("m_Muted")]
+ [SerializeField] bool _audioMuted = false;
+ public virtual bool AudioMuted
+ {
+ get
+ {
+ return (_controlInterface != null) ? _controlInterface.IsMuted() : _audioMuted;
+ }
+
+ set
+ {
+ _audioMuted = value;
+ if (_controlInterface != null)
+ {
+ #if !UNITY_EDITOR
+ _controlInterface.MuteAudio(_audioMuted);
+ #else
+ _controlInterface.MuteAudio(_audioMuted || UnityEditor.EditorUtility.audioMasterMute);
+ #endif
+ }
+ }
+ }
+
+ private AudioSource _audioSource = null;
+ public AudioSource AudioSource { get { return _audioSource; } internal set { _audioSource = value; } }
+
+ [FormerlySerializedAs("m_PlaybackRate")]
+ [Range(-4.0f, 4.0f)]
+ [SerializeField] float _playbackRate = 1.0f;
+ public float PlaybackRate
+ {
+ get
+ {
+ return (_controlInterface != null) ? _controlInterface.GetPlaybackRate() : _playbackRate;
+ }
+
+ set
+ {
+ _playbackRate = value;
+ if (_controlInterface != null)
+ _controlInterface.SetPlaybackRate(_playbackRate);
+ }
+ }
+
+ // Resampler
+
+ [FormerlySerializedAs("m_Resample")]
+ [SerializeField] bool _useResampler = false;
+ public bool UseResampler { get { return _useResampler; } set { _useResampler = value; } }
+
+ [FormerlySerializedAs("m_ResampleMode")]
+ [SerializeField] Resampler.ResampleMode _resampleMode = Resampler.ResampleMode.POINT;
+ public Resampler.ResampleMode ResampleMode { get { return _resampleMode; } set { _resampleMode = value; } }
+
+ [FormerlySerializedAs("m_ResampleBufferSize")]
+ [Range(3, 10)]
+ [SerializeField] int _resampleBufferSize = 5;
+ public int ResampleBufferSize { get { return _resampleBufferSize; } set { _resampleBufferSize = value; } }
+
+ private Resampler _resampler = null;
+ public Resampler FrameResampler { get { return _resampler; } }
+
+ // Visual options
+
+ [FormerlySerializedAs("m_videoMapping")]
+ [SerializeField] VideoMapping _videoMapping = VideoMapping.Unknown;
+ public VideoMapping VideoLayoutMapping { get { return _videoMapping; } set { _videoMapping = value; } }
+
+ [FormerlySerializedAs("m_FilterMode")]
+ [SerializeField] FilterMode _textureFilterMode = FilterMode.Bilinear;
+ public FilterMode TextureFilterMode
+ {
+ get
+ {
+ if (_controlInterface != null)
+ {
+ FilterMode filterMode = FilterMode.Point;
+ TextureWrapMode textureWrapMode = TextureWrapMode.Repeat;
+ int anisoLevel = 0;
+ _controlInterface.GetTextureProperties(out filterMode, out textureWrapMode, out anisoLevel);
+ return filterMode;
+ }
+ else
+ return _textureFilterMode;
+ }
+
+ set
+ {
+ _textureFilterMode = value;
+ if (_controlInterface != null)
+ _controlInterface.SetTextureProperties(_textureFilterMode, _textureWrapMode, _textureAnisoLevel);
+ }
+ }
+
+ [FormerlySerializedAs("m_WrapMode")]
+ [SerializeField] TextureWrapMode _textureWrapMode = TextureWrapMode.Clamp;
+ public TextureWrapMode TextureWrapMode
+ {
+ get
+ {
+ if (_controlInterface != null)
+ {
+ FilterMode filterMode = FilterMode.Point;
+ TextureWrapMode textureWrapMode = TextureWrapMode.Repeat;
+ int anisoLevel = 0;
+ _controlInterface.GetTextureProperties(out filterMode, out textureWrapMode, out anisoLevel);
+ return textureWrapMode;
+ }
+ else
+ return _textureWrapMode;
+ }
+
+ set
+ {
+ _textureWrapMode = value;
+ if (_controlInterface != null)
+ _controlInterface.SetTextureProperties(_textureFilterMode, _textureWrapMode, _textureAnisoLevel);
+ }
+ }
+
+ [FormerlySerializedAs("m_AnisoLevel")]
+ [Range(0, 16)]
+ [SerializeField] int _textureAnisoLevel = 0;
+ public int TextureAnisoLevel
+ {
+ get
+ {
+ if (_controlInterface != null)
+ {
+ FilterMode filterMode = FilterMode.Point;
+ TextureWrapMode textureWrapMode = TextureWrapMode.Repeat;
+ int anisoLevel = 0;
+ _controlInterface.GetTextureProperties(out filterMode, out textureWrapMode, out anisoLevel);
+ return anisoLevel;
+ }
+ else
+ return _textureAnisoLevel;
+ }
+
+ set
+ {
+ _textureAnisoLevel = value;
+ if (_controlInterface != null)
+ _controlInterface.SetTextureProperties(_textureFilterMode, _textureWrapMode, _textureAnisoLevel);
+ }
+ }
+
+#if AVPRO_FEATURE_VIDEORESOLVE
+ [SerializeField] bool _useVideoResolve = false;
+ public bool UseVideoResolve { get { return _useVideoResolve; } set { _useVideoResolve = value; } }
+
+ [SerializeField] VideoResolveOptions _videoResolveOptions = VideoResolveOptions.Create();
+ public VideoResolveOptions VideoResolveOptions { get { return _videoResolveOptions; } set { _videoResolveOptions = value; } }
+
+ [SerializeField] VideoResolve _videoResolve = new VideoResolve();
+#endif
+
+ // Sideloaded subtitles
+ [FormerlySerializedAs("m_LoadSubtitles")]
+ [SerializeField] bool _sideloadSubtitles;
+ public bool SideloadSubtitles { get { return _sideloadSubtitles; } set { _sideloadSubtitles = value; } }
+
+ [SerializeField] MediaPath _subtitlePath;
+ public MediaPath SubtitlePath { get { return _subtitlePath; } set { _subtitlePath = value; } }
+
+ // Audio 360
+
+ [FormerlySerializedAs("m_AudioHeadTransform")]
+ [SerializeField] Transform _audioHeadTransform;
+ public Transform AudioHeadTransform { set { _audioHeadTransform = value; } get { return _audioHeadTransform; } }
+
+ [FormerlySerializedAs("m_AudioFocusEnabled")]
+ [SerializeField] bool _audioFocusEnabled;
+ public bool AudioFocusEnabled { get { return _audioFocusEnabled; } set { _audioFocusEnabled = value; } }
+
+ [FormerlySerializedAs("m_AudioFocusTransform")]
+ [SerializeField] Transform _audioFocusTransform;
+ public Transform AudioFocusTransform { get { return _audioFocusTransform; } set { _audioFocusTransform = value; } }
+
+ [FormerlySerializedAs("m_AudioFocusWidthDegrees")]
+ [SerializeField, Range(40f, 120f)] float _audioFocusWidthDegrees = 90f;
+ public float AudioFocusWidthDegrees { get { return _audioFocusWidthDegrees; } set { _audioFocusWidthDegrees = value; } }
+
+ [FormerlySerializedAs("m_AudioFocusOffLevelDB")]
+ [SerializeField, Range(-24f, 0f)] float _audioFocusOffLevelDB = 0f;
+ public float AudioFocusOffLevelDB { get { return _audioFocusOffLevelDB; } set { _audioFocusOffLevelDB = value; } }
+
+ // Network
+
+ [SerializeField] HttpHeaderData _httpHeaders = new HttpHeaderData();
+ public HttpHeaderData HttpHeaders { get { return _httpHeaders; } set { _httpHeaders = value; } }
+
+ [SerializeField] KeyAuthData _keyAuth = new KeyAuthData();
+ public KeyAuthData KeyAuth { get { return _keyAuth; } set { _keyAuth = value; } }
+
+ // Events
+
+ [FormerlySerializedAs("m_events")]
+ [SerializeField] MediaPlayerEvent _events = null;
+ public MediaPlayerEvent Events
+ {
+ get
+ {
+ if (_events == null)
+ {
+ _events = new MediaPlayerEvent();
+ }
+ return _events;
+ }
+ }
+
+ [FormerlySerializedAs("m_eventMask")]
+ [SerializeField] int _eventMask = -1;
+ public int EventMask { get { return _eventMask; } set { _eventMask = value; } }
+
+ [SerializeField] bool _pauseMediaOnAppPause = true;
+ public bool PauseMediaOnAppPause { get { return _pauseMediaOnAppPause; } set { _pauseMediaOnAppPause = value; } }
+
+ [SerializeField] bool _playMediaOnAppUnpause = true;
+ public bool PlayMediaOnAppUnpause { get { return _playMediaOnAppUnpause; } set { _playMediaOnAppUnpause = value; } }
+
+ // Misc options
+
+ [FormerlySerializedAs("m_Persistent")]
+ [SerializeField] bool _persistent = false;
+ public bool Persistent { get { return _persistent; } set { _persistent = value; } }
+
+ [FormerlySerializedAs("m_forceFileFormat")]
+ [SerializeField] FileFormat _forceFileFormat = FileFormat.Unknown;
+ public FileFormat ForceFileFormat { get { return _forceFileFormat; } set { _forceFileFormat = value; } }
+
+ // Interfaces
+
+ private BaseMediaPlayer _baseMediaPlayer;
+ private IMediaControl _controlInterface;
+ private ITextureProducer _textureInterface;
+ private IMediaInfo _infoInterface;
+ private IMediaPlayer _playerInterface;
+ private IMediaSubtitles _subtitlesInterface;
+ private IMediaCache _cacheInterface;
+ private IBufferedDisplay _bufferedDisplayInterface;
+ private IVideoTracks _videoTracksInterface;
+ private IAudioTracks _audioTracksInterface;
+ private ITextTracks _textTracksInterface;
+ private System.IDisposable _disposeInterface;
+
+ public virtual IMediaInfo Info { get { return _infoInterface; } }
+ public virtual IMediaControl Control { get { return _controlInterface; } }
+ public virtual IMediaPlayer Player { get { return _playerInterface; } }
+ public virtual ITextureProducer TextureProducer { get { return _textureInterface; } }
+ public virtual IMediaSubtitles Subtitles { get { return _subtitlesInterface; } }
+ public virtual IVideoTracks VideoTracks { get { return _videoTracksInterface; } }
+ public virtual IAudioTracks AudioTracks { get { return _audioTracksInterface; } }
+ public virtual ITextTracks TextTracks { get { return _textTracksInterface; } }
+ public virtual IMediaCache Cache { get { return _cacheInterface; } }
+ public virtual IBufferedDisplay BufferedDisplay { get { return _bufferedDisplayInterface; } }
+
+ // State
+ private bool _isMediaOpened = false;
+ public bool MediaOpened { get { return _isMediaOpened; } }
+ private bool _autoPlayOnStartTriggered = false;
+ private bool _wasPlayingOnPause = false;
+ private Coroutine _renderingCoroutine = null;
+
+ // Global init
+ private static bool s_GlobalStartup = false;
+ private static bool s_TrialVersion = false;
+
+ // Subtitle state
+ private MediaPath _queueSubtitlePath;
+ private Coroutine _loadSubtitlesRoutine;
+
+ // Extract frame
+ private static Camera _dummyCamera = null;
+ public delegate void ProcessExtractedFrame(Texture2D extractedFrame);
+
+ ///
+ /// Methods
+ ///
+
+ #if UNITY_EDITOR
+ static MediaPlayer()
+ {
+ SetupEditorPlayPauseSupport();
+ }
+ #endif
+
+ void Awake()
+ {
+ if (_persistent)
+ {
+ // TODO: set "this.transform.root.gameObject" to also DontDestroyOnLoad?
+ DontDestroyOnLoad(this.gameObject);
+ }
+ }
+
+ protected void Initialise()
+ {
+ BaseMediaPlayer mediaPlayer = CreateMediaPlayer();
+ if (mediaPlayer != null)
+ {
+ // Set-up interface
+ _baseMediaPlayer = mediaPlayer;
+ _controlInterface = mediaPlayer;
+ _textureInterface = mediaPlayer;
+ _infoInterface = mediaPlayer;
+ _playerInterface = mediaPlayer;
+ _subtitlesInterface = mediaPlayer;
+ _videoTracksInterface = mediaPlayer;
+ _audioTracksInterface = mediaPlayer;
+ _textTracksInterface = mediaPlayer;
+ _disposeInterface = mediaPlayer;
+ _cacheInterface = mediaPlayer;
+ _bufferedDisplayInterface = mediaPlayer;
+
+ string nativePluginVersion = mediaPlayer.GetVersion();
+ string expectedNativePluginVersion = mediaPlayer.GetExpectedVersion();
+
+ // Check that the plugin version number is not too old
+ if (!nativePluginVersion.StartsWith(expectedNativePluginVersion))
+ {
+ Debug.LogError("[AVProVideo] Plugin version number " + nativePluginVersion + " doesn't match the expected version number " + expectedNativePluginVersion + ". It looks like the plugin didn't upgrade correctly. To resolve this please restart Unity and try to upgrade the package again.");
+ }
+
+ s_TrialVersion = nativePluginVersion.Contains("-trial");
+
+ if (!s_GlobalStartup)
+ {
+ Helper.LogInfo(string.Format("Initialising AVPro Video v{0} (native plugin v{1}) on {2}/{3} (MT {4}) on {5}", Helper.AVProVideoVersion, nativePluginVersion, SystemInfo.graphicsDeviceName, SystemInfo.graphicsDeviceVersion, SystemInfo.graphicsMultiThreaded, Application.platform));
+
+ #if AVPROVIDEO_BETA_SUPPORT_TIMESCALE
+ Debug.LogWarning("[AVProVideo] TimeScale support used. This could affect performance when changing Time.timeScale or Time.captureFramerate. This feature is useful for supporting video capture system that adjust time scale during capturing.");
+ #endif
+
+ s_GlobalStartup = true;
+ }
+ }
+ }
+
+ void Start()
+ {
+#if UNITY_WEBGL
+ _useResampler = false;
+#endif
+ if (_controlInterface == null)
+ {
+ if (Application.isPlaying)
+ {
+ Initialise();
+ if (_controlInterface != null)
+ {
+ if (_autoOpen)
+ {
+ OpenMedia(_autoPlayOnStart);
+
+ if (_sideloadSubtitles && _subtitlesInterface != null && _subtitlePath != null && !string.IsNullOrEmpty(_subtitlePath.Path))
+ {
+ EnableSubtitles(_subtitlePath);
+ }
+ }
+
+ StartRenderCoroutine();
+ }
+ }
+ }
+ }
+
+ public bool OpenMedia(MediaPath path, bool autoPlay = true)
+ {
+ return OpenMedia(path.PathType, path.Path, autoPlay);
+ }
+
+ public bool OpenMedia(MediaPathType pathType, string path, bool autoPlay = true)
+ {
+ _mediaSource = MediaSource.Path;
+ _mediaPath.Path = path;
+ _mediaPath.PathType = pathType;
+
+ return OpenMedia(autoPlay);
+ }
+
+ public bool OpenMedia(MediaReference mediaReference, bool autoPlay = true)
+ {
+ _mediaSource = MediaSource.Reference;
+ _mediaReference = mediaReference;
+
+ return OpenMedia(autoPlay);
+ }
+
+ public bool OpenMedia(bool autoPlay = true)
+ {
+ _autoPlayOnStart = autoPlay;
+
+ if (_controlInterface == null)
+ {
+ //_autoOpen = false; // If OpenVideoFromFile() is called before Start() then set _autoOpen to false so that it doesn't load the video a second time during Start()
+ Initialise();
+ }
+
+ return InternalOpenMedia();
+ }
+
+ private bool InternalOpenMedia()
+ {
+ bool result = false;
+ // Open the video file
+ if (_controlInterface != null)
+ {
+ CloseMedia();
+
+ _isMediaOpened = true;
+ _autoPlayOnStartTriggered = !_autoPlayOnStart;
+ _finishedFrameOpenCheck = true;
+ long fileOffset = GetPlatformFileOffset(); // TODO: replace this with MediaReference
+
+ MediaPath mediaPath = null;
+ MediaHints mediaHints = _fallbackMediaHints;
+
+ if (_mediaSource == MediaSource.Reference)
+ {
+ if (_mediaReference != null)
+ {
+ mediaPath = _mediaReference.GetCurrentPlatformMediaReference().MediaPath;
+ mediaHints = _mediaReference.GetCurrentPlatformMediaReference().Hints;
+ if (string.IsNullOrEmpty(mediaPath.Path))
+ {
+ mediaPath = null;
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] No MediaReference specified", this);
+ }
+ }
+ else if (_mediaSource == MediaSource.Path)
+ {
+ if (!string.IsNullOrEmpty(_mediaPath.Path))
+ {
+ mediaPath = _mediaPath;
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] No file path specified", this);
+ }
+ }
+
+ if (null != mediaPath)
+ {
+ string fullPath = mediaPath.GetResolvedFullPath();
+ string customHttpHeaders = null;
+
+ bool checkForFileExist = true;
+ bool isURL = fullPath.Contains("://");
+ if (isURL)
+ {
+ checkForFileExist = false;
+ customHttpHeaders = GetPlatformHttpHeadersAsString();
+ }
+#if (!UNITY_EDITOR && UNITY_ANDROID)
+ checkForFileExist = false;
+#endif
+ if (checkForFileExist && !System.IO.File.Exists(fullPath))
+ {
+ Debug.LogError("[AVProVideo] File not found: " + fullPath, this);
+ }
+ else
+ {
+ Helper.LogInfo(string.Format("Opening {0} (offset {1}) with API {2}", fullPath, fileOffset, GetPlatformVideoApiString()), this);
+
+#if UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN)
+ // NOTE: We don't need to call SetAudioChannelMode on Android,
+ // as it's set when the AndroidMediaPlayer object is created
+ if (_optionsWindows._audioMode == Windows.AudioOutput.FacebookAudio360)
+ {
+ _controlInterface.SetAudioChannelMode(_optionsWindows.audio360ChannelMode);
+ }
+ else
+ {
+ _controlInterface.SetAudioChannelMode(Audio360ChannelMode.INVALID);
+ }
+#elif (!UNITY_EDITOR && UNITY_WSA_10_0)
+ if (_optionsWindowsUWP._audioMode == WindowsUWP.AudioOutput.FacebookAudio360)
+ {
+ _controlInterface.SetAudioChannelMode(_optionsWindowsUWP.audio360ChannelMode);
+ }
+ else
+ {
+ _controlInterface.SetAudioChannelMode(Audio360ChannelMode.INVALID);
+ }
+#endif
+ PlatformOptions options = GetCurrentPlatformOptions();
+ bool startWithHighestBitrate = false;
+ if (options != null)
+ {
+ startWithHighestBitrate = options.StartWithHighestBandwidth();
+ }
+
+ SetLoadOptions();
+ SetPlaybackOptions();
+
+ if (_controlInterface.OpenMedia(fullPath, fileOffset, customHttpHeaders, mediaHints, (int)_forceFileFormat, startWithHighestBitrate))
+ {
+ StartRenderCoroutine();
+ result = true;
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to open " + fullPath, this);
+ }
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] No file path specified", this);
+ }
+ }
+ return result;
+ }
+
+ private void SetLoadOptions()
+ {
+ // On some platforms we can update the loading options without having to recreate the player
+ #if !AVPROVIDEO_FORCE_NULL_MEDIAPLAYER
+ #if (UNITY_EDITOR_OSX && UNITY_IOS) || (!UNITY_EDITOR && UNITY_IOS)
+ #elif (UNITY_EDITOR_OSX && UNITY_TVOS) || (!UNITY_EDITOR && UNITY_TVOS)
+ #elif (UNITY_EDITOR_OSX || (!UNITY_EDITOR && UNITY_STANDALONE_OSX))
+ #elif (UNITY_EDITOR_WIN) || (!UNITY_EDITOR && UNITY_STANDALONE_WIN)
+ #elif (!UNITY_EDITOR && UNITY_WSA_10_0)
+ #elif (!UNITY_EDITOR && UNITY_ANDROID)
+ #elif (!UNITY_EDITOR && UNITY_WEBGL)
+ ((WebGLMediaPlayer)_baseMediaPlayer).SetOptions(_optionsWebGL);
+ #endif
+ #endif
+
+ // Encryption support
+ PlatformOptions options = GetCurrentPlatformOptions();
+ if (options != null)
+ {
+ _controlInterface.SetKeyServerAuthToken(options.GetKeyServerAuthToken());
+ //_controlInterface.SetKeyServerURL(options.GetKeyServerURL());
+ _controlInterface.SetOverrideDecryptionKey(options.GetOverrideDecryptionKey());
+ }
+ }
+
+ private void SetPlaybackOptions()
+ {
+ // Set playback options
+ if (_controlInterface != null)
+ {
+ _controlInterface.SetLooping(_loop);
+ _controlInterface.SetPlaybackRate(_playbackRate);
+ _controlInterface.SetVolume(_audioVolume);
+ _controlInterface.SetBalance(_audioBalance);
+ #if !UNITY_EDITOR
+ _controlInterface.MuteAudio(_audioMuted);
+ #else
+ _controlInterface.MuteAudio(_audioMuted || UnityEditor.EditorUtility.audioMasterMute);
+ #endif
+ _controlInterface.SetTextureProperties(_textureFilterMode, _textureWrapMode, _textureAnisoLevel);
+ }
+ }
+
+ public void CloseMedia()
+ {
+ // Close the media file
+ if (_controlInterface != null)
+ {
+ if (_events != null && _isMediaOpened && _events.HasListeners() && IsHandleEvent(MediaPlayerEvent.EventType.Closing))
+ {
+ _events.Invoke(this, MediaPlayerEvent.EventType.Closing, ErrorCode.None);
+ }
+
+ _autoPlayOnStartTriggered = false;
+ _isMediaOpened = false;
+ ResetEvents();
+
+ if (_loadSubtitlesRoutine != null)
+ {
+ StopCoroutine(_loadSubtitlesRoutine);
+ _loadSubtitlesRoutine = null;
+ }
+
+ _controlInterface.CloseMedia();
+ }
+
+ if (_resampler != null)
+ {
+ _resampler.Reset();
+ }
+
+ StopRenderCoroutine();
+ }
+
+ public void RewindPrerollPause()
+ {
+ PlatformOptionsWindows.pauseOnPrerollComplete = true;
+ if (BufferedDisplay != null)
+ {
+ BufferedDisplay.SetBufferedDisplayOptions(true);
+ }
+ Rewind(false);
+ Play();
+ }
+
+ public virtual void Play()
+ {
+ if (_controlInterface != null && _controlInterface.CanPlay())
+ {
+ _controlInterface.Play();
+
+ // Mark this event as done because it's irrelevant once playback starts
+ _eventFired_ReadyToPlay = true;
+ }
+ else
+ {
+ // Can't play, perhaps it's still loading? Queuing play using _autoPlayOnStart to play after loading
+ _autoPlayOnStart = true;
+ _autoPlayOnStartTriggered = false;
+ }
+ }
+
+ public virtual void Pause()
+ {
+ if (_controlInterface != null && _controlInterface.IsPlaying())
+ {
+ _controlInterface.Pause();
+ }
+ _wasPlayingOnPause = false;
+#if AVPROVIDEO_BETA_SUPPORT_TIMESCALE
+ _timeScaleIsControlling = false;
+#endif
+ }
+
+ public void Stop()
+ {
+ if (_controlInterface != null)
+ {
+ _controlInterface.Stop();
+ }
+#if AVPROVIDEO_BETA_SUPPORT_TIMESCALE
+ _timeScaleIsControlling = false;
+#endif
+ }
+
+ public void Rewind(bool pause)
+ {
+ if (_controlInterface != null)
+ {
+ if (pause)
+ {
+ Pause();
+ }
+ _controlInterface.Rewind();
+ }
+ }
+
+ public void SeekToLiveTime(double offset = 0.0)
+ {
+ if (_controlInterface != null)
+ {
+ double liveTime = _controlInterface.GetBufferedTimes().MaxTime;
+ if (liveTime > 0.0)
+ {
+ _controlInterface.Seek(liveTime - offset);
+ }
+ }
+ }
+
+#if UNITY_EDITOR && AVPROVIDEO_SUPPORT_LIVEEDITMODE
+ public bool EditorUpdate()
+ {
+ if (_playerInterface != null)
+ {
+ Update();
+ _playerInterface.BeginRender();
+ _playerInterface.Render();
+ return true;
+ }
+ return false;
+ }
+#endif
+ protected virtual void Update()
+ {
+ if (_controlInterface != null)
+ {
+ // Auto start the playback
+ if (_isMediaOpened && _autoPlayOnStart && !_autoPlayOnStartTriggered && _controlInterface.CanPlay())
+ {
+ _autoPlayOnStartTriggered = true;
+ Play();
+ }
+
+ if (Application.isPlaying)
+ {
+ if (_renderingCoroutine == null && _controlInterface.CanPlay())
+ {
+ StartRenderCoroutine();
+ }
+ }
+
+ if (_subtitlesInterface != null && _queueSubtitlePath != null && !string.IsNullOrEmpty(_queueSubtitlePath.Path))
+ {
+ EnableSubtitles(_queueSubtitlePath);
+ _queueSubtitlePath = null;
+ }
+
+#if AVPROVIDEO_BETA_SUPPORT_TIMESCALE
+ UpdateTimeScale();
+#endif
+
+ UpdateAudioHeadTransform();
+ UpdateAudioFocus();
+
+ _playerInterface.Update();
+
+ // Render (done in co-routine)
+ //_playerInterface.Render();
+
+ UpdateErrors();
+ UpdateEvents();
+
+ _playerInterface.EndUpdate();
+ }
+
+#if UNITY_EDITOR
+ CheckEditorAudioMute();
+#endif
+ }
+
+ private void LateUpdate()
+ {
+ UpdateResampler();
+
+ // RJT TODO: Better location?
+ if (_playerInterface != null)
+ {
+ _playerInterface.BeginRender();
+ }
+ }
+
+ private void UpdateResampler()
+ {
+#if !UNITY_WEBGL
+ if (_useResampler)
+ {
+ if (_resampler == null)
+ {
+ _resampler = new Resampler(this, gameObject.name, _resampleBufferSize, _resampleMode);
+ }
+ }
+#else
+ _useResampler = false;
+#endif
+
+ if (_resampler != null)
+ {
+ _resampler.Update();
+ _resampler.UpdateTimestamp();
+ }
+ }
+
+ void OnEnable()
+ {
+ if (_controlInterface != null && _wasPlayingOnPause)
+ {
+ _autoPlayOnStart = true;
+ _autoPlayOnStartTriggered = false;
+ _wasPlayingOnPause = false;
+ }
+
+ if(_playerInterface != null)
+ {
+ _playerInterface.OnEnable();
+ StartRenderCoroutine();
+ }
+ }
+
+ void OnDisable()
+ {
+ if (_controlInterface != null)
+ {
+ if (_controlInterface.IsPlaying())
+ {
+ Pause();
+ // Force an update to ensure the player state is synchronised with the plugin
+ Update();
+ // Needs to follow Pause() otherwise it will be reset.
+ _wasPlayingOnPause = true;
+ }
+ }
+
+ StopRenderCoroutine();
+ }
+
+ protected virtual void OnDestroy()
+ {
+ CloseMedia();
+
+ _baseMediaPlayer = null;
+ _controlInterface = null;
+ _textureInterface = null;
+ _infoInterface = null;
+ _playerInterface = null;
+ _subtitlesInterface = null;
+ _cacheInterface = null;
+ _bufferedDisplayInterface = null;
+ _videoTracksInterface = null;
+ _audioTracksInterface = null;
+ _textTracksInterface = null;
+
+ if (_disposeInterface != null)
+ {
+ _disposeInterface.Dispose();
+ _disposeInterface = null;
+ }
+
+ if (_resampler != null)
+ {
+ _resampler.Release();
+ _resampler = null;
+ }
+
+ // TODO: possible bug if MediaPlayers are created and destroyed manually (instantiated), OnApplicationQuit won't be called!
+ }
+
+ public void ForceDispose()
+ {
+ OnDisable();
+ OnDestroy();
+ }
+
+#if UNITY_EDITOR
+ public static void EditorAllPlayersDispose()
+ {
+ AllPlayersDispose();
+ }
+#endif
+
+ private static void AllPlayersDispose()
+ {
+ // Clean up any open media players
+ MediaPlayer[] players = Resources.FindObjectsOfTypeAll();
+ if (players != null && players.Length > 0)
+ {
+ for (int i = 0; i < players.Length; i++)
+ {
+ players[i].ForceDispose();
+ }
+ }
+ }
+
+ void OnApplicationQuit()
+ {
+ if (s_GlobalStartup)
+ {
+ Helper.LogInfo("Shutdown");
+
+ AllPlayersDispose();
+
+#if UNITY_EDITOR
+ #if UNITY_EDITOR_WIN
+ WindowsMediaPlayer.DeinitPlatform();
+ WindowsRtMediaPlayer.DeinitPlatform();
+ #endif
+#else
+ #if (UNITY_STANDALONE_WIN)
+ WindowsMediaPlayer.DeinitPlatform();
+ WindowsRtMediaPlayer.DeinitPlatform();
+ #elif (UNITY_ANDROID)
+ #if false
+ AndroidMediaPlayer.DeinitPlatform();
+ #endif
+ #endif
+#endif
+ s_GlobalStartup = false;
+ }
+ }
+
+#region Rendering Coroutine
+
+ private void StartRenderCoroutine()
+ {
+ if (_renderingCoroutine == null)
+ {
+ // Use the method instead of the method name string to prevent garbage
+ _renderingCoroutine = StartCoroutine(FinalRenderCapture());
+ }
+ }
+
+ private void StopRenderCoroutine()
+ {
+ if (_renderingCoroutine != null)
+ {
+ StopCoroutine(_renderingCoroutine);
+ _renderingCoroutine = null;
+ }
+ }
+
+ private IEnumerator FinalRenderCapture()
+ {
+ // Preallocate the YieldInstruction to prevent garbage
+ YieldInstruction wait = new WaitForEndOfFrame();
+ while (Application.isPlaying)
+ {
+ // NOTE: in editor, if the game view isn't visible then WaitForEndOfFrame will never complete
+ yield return wait;
+
+ if (this.enabled)
+ {
+ if (_playerInterface != null)
+ {
+ _playerInterface.Render();
+ }
+ }
+ }
+ }
+#endregion // Rendering Coroutine
+
+#region Platform and Path
+ public static Platform GetPlatform()
+ {
+ Platform result = Platform.Unknown;
+
+ // Setup for running in the editor (Either OSX, Windows or Linux)
+#if UNITY_EDITOR
+#if (UNITY_EDITOR_OSX && UNITY_EDITOR_64)
+ result = Platform.macOS;
+#elif UNITY_EDITOR_WIN
+ result = Platform.Windows;
+#endif
+#else
+ // Setup for running builds
+#if (UNITY_STANDALONE_WIN)
+ result = Platform.Windows;
+#elif (UNITY_STANDALONE_OSX)
+ result = Platform.macOS;
+#elif (UNITY_IPHONE || UNITY_IOS)
+ result = Platform.iOS;
+#elif (UNITY_TVOS)
+ result = Platform.tvOS;
+#elif (UNITY_VISIONOS)
+ result = Platform.visionOS;
+#elif (UNITY_ANDROID)
+ result = Platform.Android;
+#elif (UNITY_WSA_10_0)
+ result = Platform.WindowsUWP;
+#elif (UNITY_WEBGL)
+ result = Platform.WebGL;
+#endif
+
+#endif
+ return result;
+ }
+
+ public PlatformOptions GetCurrentPlatformOptions()
+ {
+ PlatformOptions result = null;
+
+#if UNITY_EDITOR
+#if (UNITY_EDITOR_OSX && UNITY_EDITOR_64)
+ result = _options_macOS;
+#elif UNITY_EDITOR_WIN
+ result = _optionsWindows;
+#endif
+#else
+ // Setup for running builds
+
+#if (UNITY_STANDALONE_WIN)
+ result = _optionsWindows;
+#elif (UNITY_STANDALONE_OSX)
+ result = _options_macOS;
+#elif (UNITY_IPHONE || UNITY_IOS)
+ result = _options_iOS;
+#elif (UNITY_TVOS)
+ result = _options_tvOS;
+#elif (UNITY_VISIONOS)
+ result = _options_visionOS;
+#elif (UNITY_ANDROID)
+ result = _optionsAndroid;
+#elif (UNITY_WSA_10_0)
+ result = _optionsWindowsUWP;
+#elif (UNITY_WEBGL)
+ result = _optionsWebGL;
+#endif
+
+#endif
+ return result;
+ }
+
+#if UNITY_EDITOR
+ public PlatformOptions GetPlatformOptions(Platform platform)
+ {
+ PlatformOptions result = null;
+
+ switch (platform)
+ {
+ case Platform.Windows:
+ result = _optionsWindows;
+ break;
+ case Platform.macOS:
+ result = _options_macOS;
+ break;
+ case Platform.Android:
+ result = _optionsAndroid;
+ break;
+ case Platform.iOS:
+ result = _options_iOS;
+ break;
+ case Platform.tvOS:
+ result = _options_tvOS;
+ break;
+ case Platform.visionOS:
+ result = _options_visionOS;
+ break;
+ case Platform.WindowsUWP:
+ result = _optionsWindowsUWP;
+ break;
+ case Platform.WebGL:
+ result = _optionsWebGL;
+ break;
+ }
+
+ return result;
+ }
+
+ public static string GetPlatformOptionsVariable(Platform platform)
+ {
+ string result = string.Empty;
+
+ switch (platform)
+ {
+ case Platform.Windows:
+ result = "_optionsWindows";
+ break;
+ case Platform.macOS:
+ result = "_options_macOS";
+ break;
+ case Platform.iOS:
+ result = "_options_iOS";
+ break;
+ case Platform.tvOS:
+ result = "_options_tvOS";
+ break;
+ case Platform.visionOS:
+ result = "_options_visionOS";
+ break;
+ case Platform.Android:
+ result = "_optionsAndroid";
+ break;
+ case Platform.WindowsUWP:
+ result = "_optionsWindowsUWP";
+ break;
+ case Platform.WebGL:
+ result = "_optionsWebGL";
+ break;
+ }
+
+ return result;
+ }
+#endif
+
+ private string GetPlatformVideoApiString()
+ {
+ string result = string.Empty;
+#if UNITY_EDITOR
+ #if UNITY_EDITOR_OSX
+ #elif UNITY_EDITOR_WIN
+ result = _optionsWindows.videoApi.ToString();
+ #elif UNITY_EDITOR_LINUX
+ #endif
+#else
+ #if UNITY_STANDALONE_WIN
+ result = _optionsWindows.videoApi.ToString();
+ #elif UNITY_WSA_10_0
+ result = _optionsWindowsUWP.videoApi.ToString();
+ #elif UNITY_ANDROID
+ result = _optionsAndroid.videoApi.ToString();
+ #endif
+#endif
+ return result;
+ }
+
+ private long GetPlatformFileOffset()
+ {
+ long result = 0;
+#if UNITY_EDITOR
+ #if UNITY_EDITOR_OSX
+ #elif UNITY_EDITOR_WIN
+ #elif UNITY_EDITOR_LINUX
+ #endif
+#else
+ #if UNITY_ANDROID
+ result = _optionsAndroid.fileOffset;
+ #endif
+#endif
+ return result;
+ }
+
+ private string GetPlatformHttpHeadersAsString()
+ {
+ string result = null;
+
+#if UNITY_EDITOR
+ #if UNITY_EDITOR_OSX
+ result = _options_macOS.httpHeaders.ToValidatedString();
+ #elif UNITY_EDITOR_WIN
+ result = _optionsWindows.httpHeaders.ToValidatedString();
+ #elif UNITY_EDITOR_LINUX
+ #endif
+#else
+ #if UNITY_STANDALONE_OSX
+ result = _options_macOS.httpHeaders.ToValidatedString();
+ #elif UNITY_STANDALONE_WIN
+ result = _optionsWindows.httpHeaders.ToValidatedString();
+ #elif UNITY_WSA_10_0
+ result = _optionsWindowsUWP.httpHeaders.ToValidatedString();
+ #elif UNITY_IOS || UNITY_IPHONE
+ result = _options_iOS.httpHeaders.ToValidatedString();
+ #elif UNITY_TVOS
+ result = _options_tvOS.httpHeaders.ToValidatedString();
+ #elif UNITY_VISIONOS
+ result = _options_visionOS.httpHeaders.ToValidatedString();
+ #elif UNITY_ANDROID
+ result = _optionsAndroid.httpHeaders.ToValidatedString();
+ #elif UNITY_WEBGL
+ #endif
+#endif
+
+ if (!string.IsNullOrEmpty(result))
+ {
+ result = result.Trim();
+ }
+
+ string globalHeaders = _httpHeaders.ToValidatedString();
+ if (!string.IsNullOrEmpty(globalHeaders))
+ {
+ result += globalHeaders;
+ result = result.Trim();
+ }
+
+ return result;
+ }
+
+ private string GetResolvedFilePath(string filePath, MediaPathType fileLocation)
+ {
+ string result = string.Empty;
+
+ result = Helper.GetFilePath(filePath, fileLocation);
+
+ #if (UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN))
+ if (result.Length > 200 && !result.Contains("://"))
+ {
+ result = Helper.ConvertLongPathToShortDOS83Path(result);
+ }
+ #endif
+
+ return result;
+ }
+#endregion // Platform and Path
+
+#region Create MediaPlayers
+ #if (UNITY_EDITOR_WIN) || (!UNITY_EDITOR && UNITY_STANDALONE_WIN)
+ private static BaseMediaPlayer CreateMediaPlayer(OptionsWindows options)
+ {
+ BaseMediaPlayer result = null;
+ if (options.videoApi == Windows.VideoApi.WinRT)
+ {
+ if (WindowsRtMediaPlayer.InitialisePlatform())
+ {
+ result = new WindowsRtMediaPlayer(options);
+ }
+ else
+ {
+ Debug.LogWarning(string.Format("[AVProVideo] Failed to initialise WinRT API - platform {0} may not support it. Trying another video API...", SystemInfo.operatingSystem));
+ }
+ }
+
+ if (result == null)
+ {
+ if (WindowsMediaPlayer.InitialisePlatform())
+ {
+ result = new WindowsMediaPlayer(options);
+ }
+ }
+ return result;
+ }
+ #endif
+
+ #if (!UNITY_EDITOR && UNITY_WSA_10_0)
+ private static BaseMediaPlayer CreateMediaPlayer(OptionsWindowsUWP options)
+ {
+ BaseMediaPlayer result = null;
+ if (options.videoApi == WindowsUWP.VideoApi.WinRT)
+ {
+ if (WindowsRtMediaPlayer.InitialisePlatform())
+ {
+ result = new WindowsRtMediaPlayer(options);
+ }
+ else
+ {
+ Debug.LogWarning(string.Format("[AVProVideo] Failed to initialise WinRT API - platform {0} may not support it. Trying another video API...", SystemInfo.operatingSystem));
+ }
+ }
+
+ if (result == null)
+ {
+ if (WindowsMediaPlayer.InitialisePlatform())
+ {
+ result = new WindowsMediaPlayer(options);
+ }
+ }
+ return result;
+ }
+ #endif
+
+#if (!UNITY_EDITOR && UNITY_ANDROID)
+ private static BaseMediaPlayer CreateMediaPlayer(OptionsAndroid options)
+ {
+ PlatformMediaPlayer mediaPlayer = new PlatformMediaPlayer(options);
+ return mediaPlayer;
+ }
+#endif
+
+#if (UNITY_EDITOR_OSX) || (!UNITY_EDITOR && (UNITY_STANDALONE_OSX || UNITY_IPHONE || UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID))
+ private static BaseMediaPlayer CreateMediaPlayer(OptionsApple options)
+ {
+ PlatformMediaPlayer mediaPlayer = new PlatformMediaPlayer(options);
+ return mediaPlayer;
+ }
+#endif
+
+#if (!UNITY_EDITOR && UNITY_WEBGL)
+ private static BaseMediaPlayer CreateMediaPlayer(OptionsWebGL options)
+ {
+ BaseMediaPlayer result = null;
+ if (WebGLMediaPlayer.InitialisePlatform())
+ {
+ result = new WebGLMediaPlayer(options);
+ }
+ return result;
+ }
+#endif
+
+ private static BaseMediaPlayer CreateMediaPlayerNull()
+ {
+ return new NullMediaPlayer();
+ }
+
+ public virtual BaseMediaPlayer CreateMediaPlayer()
+ {
+ BaseMediaPlayer mediaPlayer = null;
+
+ #if !AVPROVIDEO_FORCE_NULL_MEDIAPLAYER
+ #if (UNITY_EDITOR_OSX && UNITY_IOS) || (!UNITY_EDITOR && UNITY_IOS)
+ mediaPlayer = CreateMediaPlayer(_options_iOS);
+ #elif (UNITY_EDITOR_OSX && UNITY_TVOS) || (!UNITY_EDITOR && UNITY_TVOS)
+ mediaPlayer = CreateMediaPlayer(_options_tvOS);
+ #elif (UNITY_EDITOR_OSX && UNITY_VISIONOS) || (!UNITY_EDITOR && UNITY_VISIONOS)
+ mediaPlayer = CreateMediaPlayer(_options_visionOS);
+ #elif (UNITY_EDITOR_OSX || (!UNITY_EDITOR && UNITY_STANDALONE_OSX))
+ mediaPlayer = CreateMediaPlayer(_options_macOS);
+ #elif (UNITY_EDITOR_WIN) || (!UNITY_EDITOR && UNITY_STANDALONE_WIN)
+ mediaPlayer = CreateMediaPlayer(_optionsWindows);
+ #elif (!UNITY_EDITOR && UNITY_WSA_10_0)
+ mediaPlayer = CreateMediaPlayer(_optionsWindowsUWP);
+ #elif (!UNITY_EDITOR && UNITY_ANDROID)
+ mediaPlayer = CreateMediaPlayer(_optionsAndroid);
+ #elif (!UNITY_EDITOR && UNITY_WEBGL)
+ mediaPlayer = CreateMediaPlayer(_optionsWebGL);
+ #endif
+ #endif
+ // Fallback
+ if (mediaPlayer == null)
+ {
+ Debug.LogError(string.Format("[AVProVideo] Not supported on this platform {0} {1} {2} {3}. Using null media player!", Application.platform, SystemInfo.deviceModel, SystemInfo.processorType, SystemInfo.operatingSystem));
+ mediaPlayer = CreateMediaPlayerNull();
+ }
+
+ return mediaPlayer;
+ }
+#endregion // Create MediaPlayers
+
+ private void UpdateAudioFocus()
+ {
+ // TODO: we could use gizmos to draw the focus area
+ _controlInterface.SetAudioFocusEnabled(_audioFocusEnabled);
+ _controlInterface.SetAudioFocusProperties(_audioFocusOffLevelDB, _audioFocusWidthDegrees);
+ _controlInterface.SetAudioFocusRotation(_audioFocusTransform == null ? Quaternion.identity : _audioFocusTransform.rotation);
+ }
+
+ private void UpdateAudioHeadTransform()
+ {
+ if (_audioHeadTransform != null)
+ {
+ _controlInterface.SetAudioHeadRotation(_audioHeadTransform.rotation);
+ }
+ else
+ {
+ _controlInterface.ResetAudioHeadRotation();
+ }
+ }
+
+ private void UpdateErrors()
+ {
+ ErrorCode errorCode = _controlInterface.GetLastError();
+ if (ErrorCode.None != errorCode)
+ {
+ Debug.LogError("[AVProVideo] Error: " + Helper.GetErrorMessage(errorCode));
+
+ // Display additional information for load failures
+ if (ErrorCode.LoadFailed == errorCode)
+ {
+ #if !UNITY_EDITOR && UNITY_ANDROID
+ // TODO: Update this to handle case where media is MediaReference
+ if (_mediaPath.Path.ToLower().Contains("http://"))
+ {
+ Debug.LogError("Android 8 and above require HTTPS by default, change to HTTPS or enable ClearText in the AndroidManifest.xml");
+ }
+ #endif
+ }
+
+ if (_events != null && _events.HasListeners() && IsHandleEvent(MediaPlayerEvent.EventType.Error))
+ {
+ _events.Invoke(this, MediaPlayerEvent.EventType.Error, errorCode);
+ }
+ }
+ }
+
+ public bool IsUsingAndroidOESPath()
+ {
+ // Android OES mode is not available in the trial
+ #if !UNITY_EDITOR && UNITY_ANDROID
+ return !s_TrialVersion && (PlatformOptionsAndroid.textureFormat == MediaPlayer.OptionsAndroid.TextureFormat.YCbCr420_OES);
+ #else
+ return false;
+ #endif
+ }
+
+#region Save Frame To PNG
+#if UNITY_EDITOR || (!UNITY_EDITOR && (UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX))
+ [ContextMenu("Save Frame To PNG")]
+ public void SaveFrameToPng()
+ {
+ Texture2D frame = ExtractFrame(null);
+ if (frame != null)
+ {
+ byte[] imageBytes = frame.EncodeToPNG();
+ if (imageBytes != null)
+ {
+ string timecode = Mathf.FloorToInt((float)(Control.GetCurrentTime() * 1000.0)).ToString("D8");
+ System.IO.File.WriteAllBytes("frame-" + timecode + ".png", imageBytes);
+ }
+
+ Destroy(frame);
+ }
+ }
+ [ContextMenu("Save Frame To EXR")]
+ public void SaveFrameToExr()
+ {
+ Texture frame = (Texture)TextureProducer.GetTexture(0);
+ if (frame != null)
+ {
+ RenderTexture rt = new RenderTexture(frame.width, frame.height, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear);
+ rt.Create();
+ Graphics.Blit(frame, rt);
+ Texture2D frameRead = new Texture2D(frame.width, frame.height, TextureFormat.RGBAFloat, false, true);
+ RenderTexture.active = rt;
+ frameRead.ReadPixels(new Rect(0f, 0f, frame.width, frame.height), 0, 0, false);
+ frameRead.Apply(false, false);
+ RenderTexture.active = null;
+ byte[] imageBytes = frameRead.EncodeToEXR();
+ if (imageBytes != null)
+ {
+ string timecode = Mathf.FloorToInt((float)(Control.GetCurrentTime() * 1000.0)).ToString("D8");
+ System.IO.File.WriteAllBytes("frame-" + timecode + ".exr", imageBytes);
+ }
+
+ Destroy(frame);
+ Texture2D.Destroy(frameRead);
+ RenderTexture.Destroy(rt);
+ }
+ }
+#endif
+#endregion // Save Frame To PNG
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer.cs.meta
new file mode 100755
index 0000000..f093c1f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 638c870cac4da414fba921606d504407
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayerSync.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayerSync.cs
new file mode 100755
index 0000000..cf9d5d7
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayerSync.cs
@@ -0,0 +1,469 @@
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using RenderHeads.Media.AVProVideo;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo.Experimental
+{
+ ///
+ /// Syncronise multiple MediaPlayer components (currently Windows ONLY using Media Foundation ONLY)
+ /// This feature requires Ultra Edition
+ ///
+ [AddComponentMenu("AVPro Video/Media Player Sync (BETA)", -90)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public class MediaPlayerSync : MonoBehaviour
+ {
+ [SerializeField] MediaPlayer _masterPlayer = null;
+ [SerializeField] MediaPlayer[] _slavePlayers = null;
+ [SerializeField] bool _playOnStart = true;
+ [SerializeField] bool _waitAfterPreroll = false;
+ [SerializeField] bool _logSyncErrors = false;
+
+ public MediaPlayer MasterPlayer { get { return _masterPlayer; } set { _masterPlayer = value; } }
+ public MediaPlayer[] SlavePlayers { get { return _slavePlayers; } set { _slavePlayers = value; } }
+ public bool PlayOnStart { get { return _playOnStart; } set { _playOnStart = value; } }
+ public bool WaitAfterPreroll { get { return _waitAfterPreroll; } set { _waitAfterPreroll = value; } }
+ public bool LogSyncErrors { get { return _logSyncErrors; } set { _logSyncErrors = value; } }
+
+ private enum State
+ {
+ Idle,
+ Loading,
+ Prerolling,
+ Prerolled,
+ Playing,
+ Finished,
+ }
+
+ private State _state = State.Idle;
+
+ void Awake()
+ {
+#if (UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN))
+ SetupPlayers();
+#else
+ Debug.LogError("[AVProVideo] This component only works on the Windows platform");
+ this.enabled = false;
+#endif
+ }
+
+ void Start()
+ {
+ if (_playOnStart)
+ {
+ StartPlayback();
+ _state = State.Loading;
+ _playOnStart = false;
+ }
+ }
+
+ public void OpenMedia(string[] mediaPaths)
+ {
+ Debug.Assert(mediaPaths.Length == (_slavePlayers.Length + 1));
+
+ _masterPlayer.MediaSource = MediaSource.Path;
+ _masterPlayer.MediaPath = new MediaPath(mediaPaths[0], MediaPathType.AbsolutePathOrURL);
+
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ _slavePlayers[i].MediaSource = MediaSource.Path;
+ _slavePlayers[i].MediaPath = new MediaPath(mediaPaths[i+1], MediaPathType.AbsolutePathOrURL);
+ }
+
+ StartPlayback();
+ }
+
+ ///
+ /// This is called when _autoPlay is false and once the MediaPlayers have had their source media set
+ ///
+ [ContextMenu("StartPlayback")]
+ public void StartPlayback()
+ {
+ SetupPlayers();
+
+ if (!IsPrerolled())
+ {
+ OpenMediaAll();
+ _state = State.Loading;
+ }
+ else
+ {
+ PlayAll();
+ _state = State.Playing;
+ }
+ }
+
+ public void Seek(double time, bool approximate = true)
+ {
+ if (approximate)
+ {
+ SeekFastAll(time);
+ }
+ else
+ {
+ SeekAll(time);
+ }
+
+ _state = State.Prerolling;
+ }
+
+ public bool IsPrerolled()
+ {
+ return (_state == State.Prerolled);
+ }
+
+ void SetupPlayers()
+ {
+ SetupPlayer(_masterPlayer);
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ SetupPlayer(_slavePlayers[i]);
+ }
+ }
+
+ void SetupPlayer(MediaPlayer player)
+ {
+ bool isMaster = (player == _masterPlayer);
+ player.AutoOpen = false;
+ player.AutoStart = false;
+ player.AudioMuted = !isMaster;
+ player.PlatformOptionsWindows.videoApi = Windows.VideoApi.MediaFoundation;
+ player.PlatformOptionsWindows.useLowLatency = true;
+ player.PlatformOptionsWindows.pauseOnPrerollComplete = true;
+ player.PlatformOptionsWindows.bufferedFrameSelection = isMaster ? BufferedFrameSelectionMode.ElapsedTimeVsynced : BufferedFrameSelectionMode.FromExternalTime;
+ }
+
+ // NOTE: We check on LateUpdate() as MediaPlayer uses Update() to update state and we want to make sure all players have been updated
+ void LateUpdate()
+ {
+ if (_state == State.Idle)
+ {
+ }
+ if (_state == State.Loading)
+ {
+ UpdateLoading();
+ }
+ if (_state == State.Prerolling)
+ {
+ UpdatePrerolling();
+ }
+ if (_state == State.Prerolled)
+ {
+ /*if (Input.GetKeyDown(KeyCode.Alpha0))
+ {
+ StartPlayback();
+ }*/
+ }
+ if (_state == State.Playing)
+ {
+ UpdatePlaying();
+ }
+ if (_state == State.Finished)
+ {
+ }
+
+#if UNITY_EDITOR
+ if (Input.GetKeyDown(KeyCode.Alpha5))
+ {
+ Debug.Log("sleep");
+ System.Threading.Thread.Sleep(16);
+ }
+
+ /*if (Input.GetKeyDown(KeyCode.Alpha1))
+ {
+ double time = Random.Range(0f, (float)_masterPlayer.Info.GetDuration());
+ Seek(time);
+ }
+
+ long gcMemory = System.GC.GetTotalMemory(false);
+ //Debug.Log("GC: " + (gcMemory / 1024) + " " + (gcMemory - lastGcMemory));
+ if ((gcMemory - lastGcMemory) < 0)
+ {
+ Debug.LogWarning("COLLECTION!!! " + (lastGcMemory - gcMemory));
+ }
+ lastGcMemory = gcMemory;*/
+#endif
+ }
+
+ //long lastGcMemory = 0;
+
+ void UpdateLoading()
+ {
+ // Finished loading?
+ if (IsAllVideosLoaded())
+ {
+ // Assign the master and slaves
+ _masterPlayer.BufferedDisplay.SetBufferedDisplayMode(BufferedFrameSelectionMode.ElapsedTimeVsynced);
+
+ IBufferedDisplay[] slaves = new IBufferedDisplay[_slavePlayers.Length];
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ slaves[i] = _slavePlayers[i].BufferedDisplay;
+ }
+ _masterPlayer.BufferedDisplay.SetSlaves(slaves);
+
+ //System.Threading.Thread.Sleep(1250);
+
+ // Begin preroll
+ PlayAll();
+
+ _state = State.Prerolling;
+ }
+ }
+
+ void UpdatePrerolling()
+ {
+ if (IsAllVideosPaused())
+ {
+ //System.Threading.Thread.Sleep(250);
+
+ if (_waitAfterPreroll)
+ {
+ _state = State.Prerolled;
+ }
+ else
+ {
+ PlayAll();
+ _state = State.Playing;
+ }
+ }
+ }
+
+ void UpdatePlaying()
+ {
+ if (_masterPlayer.Control.IsPlaying())
+ {
+ if (_logSyncErrors)
+ {
+ CheckSync();
+ CheckSmoothness();
+ }
+
+ BufferedFramesState state = _masterPlayer.BufferedDisplay.GetBufferedFramesState();
+ if (state.bufferedFrameCount < 3)
+ {
+ //Debug.LogWarning("FORCE SLEEP");
+ System.Threading.Thread.Sleep(16);
+ }
+ }
+ else
+ {
+ // Pause slaves
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ MediaPlayer slave = _slavePlayers[i];
+ slave.Pause();
+ }
+ }
+
+ // Finished?
+ if (IsPlaybackFinished(_masterPlayer))
+ {
+ _state = State.Finished;
+ }
+ }
+
+ private long _lastTimeStamp;
+ private int _sameFrameCount;
+
+ void CheckSmoothness()
+ {
+ long timeStamp = _masterPlayer.TextureProducer.GetTextureTimeStamp();
+ //int frameCount = _masterPlayer.TextureProducer.GetTextureFrameCount();
+ long frameDuration = (long)(10000000f / _masterPlayer.Info.GetVideoFrameRate());
+
+ long vsyncDuration = (long)((QualitySettings.vSyncCount * 10000000f) / (float)Screen.currentResolution.refreshRate);
+ float vsyncFrames = (float)vsyncDuration / frameDuration;
+
+ float fractionalFrames = vsyncFrames - Mathf.FloorToInt(vsyncFrames);
+
+ if (fractionalFrames == 0f)
+ {
+ if (QualitySettings.vSyncCount != 0)
+ {
+ if (!Mathf.Approximately(_sameFrameCount, vsyncFrames))
+ {
+ Debug.LogWarning("Frame " + timeStamp + " was shown for " + _sameFrameCount + " frames instead of expected " + vsyncFrames);
+ }
+ }
+ }
+
+ long d = (timeStamp - _lastTimeStamp);
+ if (d != 0)
+ {
+ long threshold = 10000;
+ if (d > frameDuration + threshold ||
+ d < frameDuration - threshold)
+ {
+ Debug.LogWarning("Possible frame skip, " + timeStamp + " " + d);
+ }
+
+ _sameFrameCount = 1;
+ }
+ else
+ {
+ _sameFrameCount++;
+ }
+
+ _lastTimeStamp = timeStamp;
+ //Debug.Log(frameDuration);
+ }
+
+ void CheckSync()
+ {
+ long timeStamp = _masterPlayer.TextureProducer.GetTextureTimeStamp();
+
+ bool inSync = true;
+ foreach (MediaPlayer slavePlayer in _slavePlayers)
+ {
+ if (slavePlayer.TextureProducer.GetTextureTimeStamp() != timeStamp)
+ {
+ inSync = false;
+ break;
+ }
+ }
+
+ if (!inSync)
+ {
+ LogSyncState();
+ Debug.LogWarning("OUT OF SYNC!!!!!!!");
+ //Debug.Break();
+ }
+ else
+ {
+ //LogSyncState();
+ }
+ }
+
+ void LogSyncState()
+ {
+ string text = "Time - Full,Free\t\tRange\n";
+ text += LogSyncState(_masterPlayer) + "\n";
+ foreach (MediaPlayer slavePlayer in _slavePlayers)
+ {
+ text += LogSyncState(slavePlayer) + "\n";
+ }
+ Debug.Log(text);
+ }
+
+ string LogSyncState(MediaPlayer player)
+ {
+ BufferedFramesState state = player.BufferedDisplay.GetBufferedFramesState();
+ long timeStamp = player.TextureProducer.GetTextureTimeStamp();
+ string result = string.Format("{4} - {2},{3}\t\t{0}-{1} ({5})", state.minTimeStamp, state.maxTimeStamp, state.bufferedFrameCount, state.freeFrameCount, timeStamp, Time.deltaTime);
+ return result;
+ }
+
+ void OpenMediaAll()
+ {
+ _masterPlayer.OpenMedia(autoPlay:false);
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ _slavePlayers[i].OpenMedia(autoPlay:false);
+ }
+ }
+
+ void PauseAll()
+ {
+ _masterPlayer.Pause();
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ _slavePlayers[i].Pause();
+ }
+ }
+
+ void PlayAll()
+ {
+ _masterPlayer.Play();
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ _slavePlayers[i].Play();
+ }
+ }
+
+ void SeekAll(double time)
+ {
+ _masterPlayer.Control.Seek(time);
+ foreach (MediaPlayer player in _slavePlayers)
+ {
+ player.Control.Seek(time);
+ }
+ }
+
+ void SeekFastAll(double time)
+ {
+ _masterPlayer.Control.SeekFast(time);
+ foreach (MediaPlayer player in _slavePlayers)
+ {
+ player.Control.SeekFast(time);
+ }
+ }
+
+ bool IsAllVideosLoaded()
+ {
+ bool result = false;
+ if (IsVideoLoaded(_masterPlayer))
+ {
+ result = true;
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ if (!IsVideoLoaded(_slavePlayers[i]))
+ {
+ result = false;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ bool IsAllVideosPaused()
+ {
+ bool result = false;
+ if (IsVideoPaused(_masterPlayer))
+ {
+ result = true;
+ for (int i = 0; i < _slavePlayers.Length; i++)
+ {
+ if (!IsVideoPaused(_slavePlayers[i]))
+ {
+ result = false;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+ static bool IsPlaybackFinished(MediaPlayer player)
+ {
+ bool result = false;
+ if (player != null && player.Control != null)
+ {
+ if (player.Control.IsFinished())
+ {
+ BufferedFramesState state = player.BufferedDisplay.GetBufferedFramesState();
+ if (state.bufferedFrameCount == 0)
+ {
+ result = true;
+ }
+ }
+ }
+ return result;
+ }
+
+ static bool IsVideoLoaded(MediaPlayer player)
+ {
+ return (player != null && player.Control != null && player.Control.HasMetaData() && player.Control.CanPlay());
+ }
+ static bool IsVideoPaused(MediaPlayer player)
+ {
+ return (player != null && player.Control != null && player.Control.IsPaused());
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayerSync.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayerSync.cs.meta
new file mode 100755
index 0000000..951ef4e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayerSync.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7b84192b70cb6c14ba22896883851268
+timeCreated: 1628084656
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_AppFocus.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_AppFocus.cs
new file mode 100755
index 0000000..880454c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_AppFocus.cs
@@ -0,0 +1,65 @@
+#if !(UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS)
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+#region Application Focus and Pausing
+#if !UNITY_EDITOR
+ void OnApplicationFocus(bool focusStatus)
+ {
+#if !(UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN)
+// Debug.Log("OnApplicationFocus: focusStatus: " + focusStatus);
+
+ if (focusStatus && (isActiveAndEnabled && enabled))
+ {
+ if (Control != null && _wasPlayingOnPause)
+ {
+ _wasPlayingOnPause = false;
+ Control.Play();
+
+ Helper.LogInfo("OnApplicationFocus: playing video again");
+ }
+ }
+#endif
+ }
+
+ void OnApplicationPause(bool pauseStatus)
+ {
+#if !(UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN)
+// Debug.Log("OnApplicationPause: pauseStatus: " + pauseStatus);
+
+ if (pauseStatus)
+ {
+ if (_pauseMediaOnAppPause)
+ {
+ if (Control!= null && Control.IsPlaying())
+ {
+ _wasPlayingOnPause = true;
+#if !UNITY_IPHONE
+ Control.Pause();
+#endif
+ Helper.LogInfo("OnApplicationPause: pausing video");
+ }
+ }
+ }
+ else
+ {
+ if (_playMediaOnAppUnpause)
+ {
+ // Catch coming back from power off state when no lock screen
+ OnApplicationFocus(true);
+ }
+ }
+#endif
+ }
+#endif
+#endregion // Application Focus and Pausing
+ }
+}
+#endif
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_AppFocus.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_AppFocus.cs.meta
new file mode 100755
index 0000000..b3e7890
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_AppFocus.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3a3464021ab2fb14a81d5d35b3097023
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorMute.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorMute.cs
new file mode 100755
index 0000000..8bac5fe
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorMute.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+#region Audio Mute Support for Unity Editor
+#if UNITY_EDITOR
+ private bool _unityAudioMasterMute = false;
+ private void CheckEditorAudioMute()
+ {
+ // Detect a change
+ if (UnityEditor.EditorUtility.audioMasterMute != _unityAudioMasterMute)
+ {
+ if (_controlInterface != null)
+ {
+ _unityAudioMasterMute = UnityEditor.EditorUtility.audioMasterMute;
+ _controlInterface.MuteAudio(_audioMuted || _unityAudioMasterMute);
+ }
+ }
+ }
+#endif
+#endregion // Audio Mute Support for Unity Editor
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorMute.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorMute.cs.meta
new file mode 100755
index 0000000..834f328
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorMute.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 16be519f584387149bd75947276c3a72
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorPlayPause.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorPlayPause.cs
new file mode 100755
index 0000000..537cc40
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorPlayPause.cs
@@ -0,0 +1,83 @@
+using UnityEngine;
+
+#if UNITY_EDITOR
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+#region Play/Pause Support for Unity Editor
+ // This code handles the pause/play buttons in the editor
+ private static void SetupEditorPlayPauseSupport()
+ {
+ #if UNITY_2017_2_OR_NEWER
+ UnityEditor.EditorApplication.pauseStateChanged -= OnUnityPauseModeChanged;
+ UnityEditor.EditorApplication.pauseStateChanged += OnUnityPauseModeChanged;
+ #else
+ UnityEditor.EditorApplication.playmodeStateChanged -= OnUnityPlayModeChanged;
+ UnityEditor.EditorApplication.playmodeStateChanged += OnUnityPlayModeChanged;
+ #endif
+ }
+
+ #if UNITY_2017_2_OR_NEWER
+ private static void OnUnityPauseModeChanged(UnityEditor.PauseState state)
+ {
+ OnUnityPlayModeChanged();
+ }
+ #endif
+
+ private static void OnUnityPlayModeChanged()
+ {
+ if (UnityEditor.EditorApplication.isPlaying)
+ {
+ bool isPaused = UnityEditor.EditorApplication.isPaused;
+ MediaPlayer[] players = Resources.FindObjectsOfTypeAll();
+ foreach (MediaPlayer player in players)
+ {
+ if (isPaused)
+ {
+ player.EditorPause();
+ }
+ else
+ {
+ player.EditorUnpause();
+ }
+ }
+ }
+ }
+
+ private void EditorPause()
+ {
+ if (this.isActiveAndEnabled)
+ {
+ if (_controlInterface != null && _controlInterface.IsPlaying())
+ {
+ _wasPlayingOnPause = true;
+ _controlInterface.Pause();
+ }
+ StopRenderCoroutine();
+ }
+ }
+
+ private void EditorUnpause()
+ {
+ if (this.isActiveAndEnabled)
+ {
+ if (_controlInterface != null && _wasPlayingOnPause)
+ {
+ _autoPlayOnStart = true;
+ _wasPlayingOnPause = false;
+ _autoPlayOnStartTriggered = false;
+ }
+ StartRenderCoroutine();
+ }
+ }
+#endregion // Play/Pause Support for Unity Editor
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorPlayPause.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorPlayPause.cs.meta
new file mode 100755
index 0000000..9e65574
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_EditorPlayPause.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 083c5ace9dbfda84cb8b4afaa19bdcde
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Events.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Events.cs
new file mode 100755
index 0000000..844f082
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Events.cs
@@ -0,0 +1,299 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+ // Event state
+ private bool _eventFired_MetaDataReady = false;
+ private bool _eventFired_ReadyToPlay = false;
+ private bool _eventFired_Started = false;
+ private bool _eventFired_FirstFrameReady = false;
+ private bool _eventFired_FinishedPlaying = false;
+ private bool _eventState_PlaybackBuffering = false;
+ private bool _eventState_PlaybackSeeking = false;
+ private bool _eventState_PlaybackStalled = false;
+ private int _eventState_PreviousWidth = 0;
+ private int _eventState_PreviousHeight = 0;
+ private int _previousSubtitleIndex = -1;
+ private bool _finishedFrameOpenCheck = false;
+ private bool _eventState_Paused = false;
+
+ #if UNITY_EDITOR
+ public static MediaPlayerLoadEvent InternalMediaLoadedEvent = new MediaPlayerLoadEvent();
+ #endif
+
+ private void ResetEvents()
+ {
+ _eventFired_MetaDataReady = false;
+ _eventFired_ReadyToPlay = false;
+ _eventFired_Started = false;
+ _eventFired_FirstFrameReady = false;
+ _eventFired_FinishedPlaying = false;
+ _eventState_PlaybackBuffering = false;
+ _eventState_PlaybackSeeking = false;
+ _eventState_PlaybackStalled = false;
+ _eventState_PreviousWidth = 0;
+ _eventState_PreviousHeight = 0;
+ _previousSubtitleIndex = -1;
+ _finishedFrameOpenCheck = false;
+ }
+
+ private void CheckAndClearStartedAndFinishedEvents()
+ {
+ //NOTE: Fixes a bug where the event was being fired immediately, so when a file is opened, the finishedPlaying fired flag gets set but
+ //is then set to true immediately afterwards due to the returned value
+ _finishedFrameOpenCheck = false;
+ if (IsHandleEvent(MediaPlayerEvent.EventType.FinishedPlaying))
+ {
+ if (FireEventIfPossible(MediaPlayerEvent.EventType.FinishedPlaying, _eventFired_FinishedPlaying))
+ {
+ _eventFired_FinishedPlaying = !_finishedFrameOpenCheck;
+ }
+ }
+
+ if (_eventFired_FinishedPlaying &&
+ IsHandleEvent(MediaPlayerEvent.EventType.FinishedPlaying) &&
+ _controlInterface.IsPlaying() &&
+ !_controlInterface.IsFinished())
+ {
+ bool reset = true;
+// RJT NOTE: Commented out for now as seems over-aggressive and can lead to freeze conditions as seen in: https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1692
+// - If we need to reinstate then we'd likely need considerably more tolerance, especially on slower machines
+#if false//UNITY_EDITOR_WIN || (!UNITY_EDITOR && (UNITY_STANDALONE_WIN || UNITY_WSA))
+ reset = false;
+ if (_infoInterface.HasVideo())
+ {
+ // Some streaming HLS/Dash content don't provide a frame rate
+ if (_infoInterface.GetVideoFrameRate() > 0f)
+ {
+ // Don't reset if within a frame of the end of the video, important for time > duration workaround
+ float secondsPerFrame = 1f / _infoInterface.GetVideoFrameRate();
+ if (_infoInterface.GetDuration() - _controlInterface.GetCurrentTime() > secondsPerFrame)
+ {
+ reset = true;
+ }
+ }
+ else
+ {
+ // Just check if we're not beyond the duration
+ if (_controlInterface.GetCurrentTime() < _infoInterface.GetDuration())
+ {
+ reset = true;
+ }
+ }
+ }
+ else
+ {
+ // For audio only media just check if we're not beyond the duration
+ if (_controlInterface.GetCurrentTime() < _infoInterface.GetDuration())
+ {
+ reset = true;
+ }
+ }
+#endif
+ if (reset)
+ {
+ //Debug.Log("Reset");
+ _eventFired_FinishedPlaying = false;
+ }
+ }
+ }
+
+ private void HandleOneShotEvents()
+ {
+ _eventFired_MetaDataReady = FireEventIfPossible(MediaPlayerEvent.EventType.MetaDataReady, _eventFired_MetaDataReady);
+ _eventFired_ReadyToPlay = FireEventIfPossible(MediaPlayerEvent.EventType.ReadyToPlay, _eventFired_ReadyToPlay);
+ _eventFired_Started = FireEventIfPossible(MediaPlayerEvent.EventType.Started, _eventFired_Started);
+ _eventFired_FirstFrameReady = FireEventIfPossible(MediaPlayerEvent.EventType.FirstFrameReady, _eventFired_FirstFrameReady);
+ }
+
+ private void HandleRecurringEvents()
+ {
+ // Subtitle changing
+ if (FireEventIfPossible(MediaPlayerEvent.EventType.SubtitleChange, false))
+ {
+ _previousSubtitleIndex = _subtitlesInterface.GetSubtitleIndex();
+ }
+
+ // Resolution changing
+ if (FireEventIfPossible(MediaPlayerEvent.EventType.ResolutionChanged, false))
+ {
+ _eventState_PreviousWidth = _infoInterface.GetVideoWidth();
+ _eventState_PreviousHeight = _infoInterface.GetVideoHeight();
+ }
+
+ // Stalling
+ if (IsHandleEvent(MediaPlayerEvent.EventType.Stalled))
+ {
+ bool newState = _infoInterface.IsPlaybackStalled();
+ if (newState != _eventState_PlaybackStalled)
+ {
+ _eventState_PlaybackStalled = newState;
+
+ var newEvent = _eventState_PlaybackStalled ? MediaPlayerEvent.EventType.Stalled : MediaPlayerEvent.EventType.Unstalled;
+ FireEventIfPossible(newEvent, false);
+ }
+ }
+ // Seeking
+ if (IsHandleEvent(MediaPlayerEvent.EventType.StartedSeeking))
+ {
+ bool newState = _controlInterface.IsSeeking();
+ if (newState != _eventState_PlaybackSeeking)
+ {
+ _eventState_PlaybackSeeking = newState;
+
+ var newEvent = _eventState_PlaybackSeeking ? MediaPlayerEvent.EventType.StartedSeeking : MediaPlayerEvent.EventType.FinishedSeeking;
+ FireEventIfPossible(newEvent, false);
+ }
+ }
+ // Buffering
+ if (IsHandleEvent(MediaPlayerEvent.EventType.StartedBuffering))
+ {
+ bool newState = _controlInterface.IsBuffering();
+ if (newState != _eventState_PlaybackBuffering)
+ {
+ _eventState_PlaybackBuffering = newState;
+
+ var newEvent = _eventState_PlaybackBuffering ? MediaPlayerEvent.EventType.StartedBuffering : MediaPlayerEvent.EventType.FinishedBuffering;
+ FireEventIfPossible(newEvent, false);
+ }
+ }
+
+ // Pausing
+ if (IsHandleEvent(MediaPlayerEvent.EventType.Paused))
+ {
+ bool newState = _controlInterface.IsPaused();
+ if (newState != _eventState_Paused)
+ {
+ _eventState_Paused = newState;
+ var newEvent = _eventState_Paused ? MediaPlayerEvent.EventType.Paused : MediaPlayerEvent.EventType.Unpaused;
+ FireEventIfPossible(newEvent, false);
+ }
+ }
+ }
+
+ private void UpdateEvents()
+ {
+ if (_controlInterface == null)
+ return;
+ if (_events == null || !_events.HasListeners())
+ return;
+
+ // Reset some event states that can reset during playback
+ CheckAndClearStartedAndFinishedEvents();
+
+ // Events that can only fire once
+ HandleOneShotEvents();
+
+ // Events that can fire multiple times
+ HandleRecurringEvents();
+ }
+
+ protected bool IsHandleEvent(MediaPlayerEvent.EventType eventType)
+ {
+ return ((uint)_eventMask & (1 << (int)eventType)) != 0;
+ }
+
+ private bool FireEventIfPossible(MediaPlayerEvent.EventType eventType, bool hasFired)
+ {
+ if (CanFireEvent(eventType, hasFired))
+ {
+ #if UNITY_EDITOR
+ // Special internal global event, called when media is loaded
+ // Currently used by the RecentItem class
+ if (eventType == MediaPlayerEvent.EventType.Started)
+ {
+ string fullPath = GetResolvedFilePath(_mediaPath.Path, _mediaPath.PathType);
+ InternalMediaLoadedEvent.Invoke(fullPath);
+ }
+ #endif
+
+ hasFired = true;
+ _events.Invoke(this, eventType, ErrorCode.None);
+ }
+ return hasFired;
+ }
+
+ private bool CanFireEvent(MediaPlayerEvent.EventType et, bool hasFired)
+ {
+ if (_controlInterface == null)
+ return false;
+ if (_events == null)
+ return false;
+ if (hasFired)
+ return false;
+ if (!IsHandleEvent(et))
+ return false;
+
+ bool result = false;
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.FinishedPlaying:
+ result = (!_controlInterface.IsLooping() && _controlInterface.CanPlay() && _controlInterface.IsFinished());
+ break;
+ case MediaPlayerEvent.EventType.MetaDataReady:
+ result = (_controlInterface.HasMetaData());
+ break;
+ case MediaPlayerEvent.EventType.FirstFrameReady:
+ // [MOZ 20/1/21] Removed HasMetaData check as preventing the event from being triggered on (i|mac|tv)OS
+ result = (_textureInterface != null && _controlInterface.CanPlay() /*&& _controlInterface.HasMetaData()*/ && _textureInterface.GetTextureFrameCount() > 0);
+ break;
+ case MediaPlayerEvent.EventType.ReadyToPlay:
+ result = (!_controlInterface.IsPlaying() && _controlInterface.CanPlay() && !_autoPlayOnStart);
+ break;
+ case MediaPlayerEvent.EventType.Started:
+ result = (_controlInterface.IsPlaying());
+ break;
+ case MediaPlayerEvent.EventType.SubtitleChange:
+ {
+ result = (_previousSubtitleIndex != _subtitlesInterface.GetSubtitleIndex());
+ if (!result)
+ {
+ result = _baseMediaPlayer.InternalIsChangedTextCue();
+ }
+ break;
+ }
+ case MediaPlayerEvent.EventType.Stalled:
+ result = _infoInterface.IsPlaybackStalled();
+ break;
+ case MediaPlayerEvent.EventType.Unstalled:
+ result = !_infoInterface.IsPlaybackStalled();
+ break;
+ case MediaPlayerEvent.EventType.StartedSeeking:
+ result = _controlInterface.IsSeeking();
+ break;
+ case MediaPlayerEvent.EventType.FinishedSeeking:
+ result = !_controlInterface.IsSeeking();
+ break;
+ case MediaPlayerEvent.EventType.StartedBuffering:
+ result = _controlInterface.IsBuffering();
+ break;
+ case MediaPlayerEvent.EventType.FinishedBuffering:
+ result = !_controlInterface.IsBuffering();
+ break;
+ case MediaPlayerEvent.EventType.ResolutionChanged:
+ result = (_infoInterface != null && (_eventState_PreviousWidth != _infoInterface.GetVideoWidth() || _eventState_PreviousHeight != _infoInterface.GetVideoHeight()));
+ break;
+
+ case MediaPlayerEvent.EventType.Paused:
+ result = _controlInterface.IsPaused();
+ break;
+
+ case MediaPlayerEvent.EventType.Unpaused:
+ result = !_controlInterface.IsPaused();
+ break;
+
+ default:
+ Debug.LogWarning("[AVProVideo] Unhandled event type");
+ break;
+ }
+ return result;
+ }
+ }
+
+} // namespace RenderHeads.Media.AVProVideo
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Events.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Events.cs.meta
new file mode 100755
index 0000000..3ad8551
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Events.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6be886b3f1f953843bda70e505701ee3
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_ExtractFrame.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_ExtractFrame.cs
new file mode 100755
index 0000000..779d897
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_ExtractFrame.cs
@@ -0,0 +1,211 @@
+using UnityEngine;
+using System.Collections;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+#region Extract Frame
+
+ private bool ForceWaitForNewFrame(int lastFrameCount, float timeoutMs)
+ {
+ bool result = false;
+ // Wait for the frame to change, or timeout to happen (for the case that there is no new frame for this time)
+ System.DateTime startTime = System.DateTime.Now;
+ int iterationCount = 0;
+ while (Control != null && (System.DateTime.Now - startTime).TotalMilliseconds < (double)timeoutMs)
+ {
+ _playerInterface.Update();
+
+ // TODO: check if Seeking has completed! Then we don't have to wait
+
+ // If frame has changed we can continue
+ // NOTE: this will never happen because GL.IssuePlugin.Event is never called in this loop
+ if (lastFrameCount != TextureProducer.GetTextureFrameCount())
+ {
+ result = true;
+ break;
+ }
+
+ iterationCount++;
+
+ // NOTE: we tried to add Sleep for 1ms but it was very slow, so switched to this time based method which burns more CPU but about double the speed
+ // NOTE: had to add the Sleep back in as after too many iterations (over 1000000) of GL.IssuePluginEvent Unity seems to lock up
+ // NOTE: seems that GL.IssuePluginEvent can't be called if we're stuck in a while loop and they just stack up
+ //System.Threading.Thread.Sleep(0);
+ }
+
+ _playerInterface.Render();
+
+ return result;
+ }
+
+ ///
+ /// Create or return (if cached) a camera that is inactive and renders nothing
+ /// This camera is used to call .Render() on which causes the render thread to run
+ /// This is useful for forcing GL.IssuePluginEvent() to run and is used for
+ /// wait for frames to render for ExtractFrame() and UpdateTimeScale()
+ ///
+ private static Camera GetDummyCamera()
+ {
+ if (_dummyCamera == null)
+ {
+ const string goName = "AVPro Video Dummy Camera";
+ GameObject go = GameObject.Find(goName);
+ if (go == null)
+ {
+ go = new GameObject(goName);
+ go.hideFlags = HideFlags.HideInHierarchy | HideFlags.DontSave;
+ go.SetActive(false);
+ Object.DontDestroyOnLoad(go);
+
+ _dummyCamera = go.AddComponent();
+ _dummyCamera.hideFlags = HideFlags.HideInInspector | HideFlags.DontSave;
+ _dummyCamera.cullingMask = 0;
+ _dummyCamera.clearFlags = CameraClearFlags.Nothing;
+ _dummyCamera.enabled = false;
+ }
+ else
+ {
+ _dummyCamera = go.GetComponent();
+ }
+ }
+ //Debug.Assert(_dummyCamera != null);
+ return _dummyCamera;
+ }
+
+ private IEnumerator ExtractFrameCoroutine(Texture2D target, ProcessExtractedFrame callback, double timeSeconds = -1.0, bool accurateSeek = true, int timeoutMs = 1000, int timeThresholdMs = 100)
+ {
+#if (!UNITY_EDITOR && UNITY_ANDROID) || UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN || UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX || UNITY_IOS || UNITY_TVOS
+ Texture2D result = target;
+
+ Texture frame = null;
+
+ if (_controlInterface != null)
+ {
+ if (timeSeconds >= 0f)
+ {
+ Pause();
+
+ // If the right frame is already available (or close enough) just grab it
+ if (TextureProducer.GetTexture() != null && (System.Math.Abs(_controlInterface.GetCurrentTime() - timeSeconds) < (timeThresholdMs / 1000.0)))
+ {
+ frame = TextureProducer.GetTexture();
+ }
+ else
+ {
+ int preSeekFrameCount = _textureInterface.GetTextureFrameCount();
+
+ // Seek to the frame
+ if (accurateSeek)
+ {
+ _controlInterface.Seek(timeSeconds);
+ }
+ else
+ {
+ _controlInterface.SeekFast(timeSeconds);
+ }
+
+ // Wait for the new frame to arrive
+ if (!_controlInterface.WaitForNextFrame(GetDummyCamera(), preSeekFrameCount))
+ {
+ // If WaitForNextFrame fails (e.g. in android single threaded), we run the below code to asynchronously wait for the frame
+ int currFc = TextureProducer.GetTextureFrameCount();
+ int iterations = 0;
+ int maxIterations = 50;
+
+ //+1 as often there will be an extra frame produced after pause (so we need to wait for the second frame instead)
+ while((currFc + 1) >= TextureProducer.GetTextureFrameCount() && iterations++ < maxIterations)
+ {
+ yield return null;
+ }
+ }
+ frame = TextureProducer.GetTexture();
+ }
+ }
+ else
+ {
+ frame = TextureProducer.GetTexture();
+ }
+ }
+ if (frame != null)
+ {
+ result = Helper.GetReadableTexture(frame, TextureProducer.RequiresVerticalFlip(), Helper.GetOrientation(Info.GetTextureTransform()), target);
+ }
+#else
+ Texture2D result = ExtractFrame(target, timeSeconds, accurateSeek, timeoutMs, timeThresholdMs);
+#endif
+ callback(result);
+
+ yield return null;
+ }
+
+ public void ExtractFrameAsync(Texture2D target, ProcessExtractedFrame callback, double timeSeconds = -1.0, bool accurateSeek = true, int timeoutMs = 1000, int timeThresholdMs = 100)
+ {
+ StartCoroutine(ExtractFrameCoroutine(target, callback, timeSeconds, accurateSeek, timeoutMs, timeThresholdMs));
+ }
+
+ // "target" can be null or you can pass in an existing texture.
+ public Texture2D ExtractFrame(Texture2D target, double timeSeconds = -1.0, bool accurateSeek = true, int timeoutMs = 1000, int timeThresholdMs = 100)
+ {
+ Texture2D result = target;
+
+ // Extract frames returns the internal frame of the video player
+ Texture frame = ExtractFrame(timeSeconds, accurateSeek, timeoutMs, timeThresholdMs);
+ if (frame != null)
+ {
+ result = Helper.GetReadableTexture(frame, TextureProducer.RequiresVerticalFlip(), Helper.GetOrientation(Info.GetTextureTransform()), target);
+ }
+
+ return result;
+ }
+
+ private Texture ExtractFrame(double timeSeconds = -1.0, bool accurateSeek = true, int timeoutMs = 1000, int timeThresholdMs = 100)
+ {
+ Texture result = null;
+
+ if (_controlInterface != null)
+ {
+ if (timeSeconds >= 0f)
+ {
+ Pause();
+
+ // If the right frame is already available (or close enough) just grab it
+ if (TextureProducer.GetTexture() != null && (System.Math.Abs(_controlInterface.GetCurrentTime() - timeSeconds) < (timeThresholdMs / 1000.0)))
+ {
+ result = TextureProducer.GetTexture();
+ }
+ else
+ {
+ // Store frame count before seek
+ int frameCount = TextureProducer.GetTextureFrameCount();
+
+ // Seek to the frame
+ if (accurateSeek)
+ {
+ _controlInterface.Seek(timeSeconds);
+ }
+ else
+ {
+ _controlInterface.SeekFast(timeSeconds);
+ }
+
+ // Wait for frame to change
+ ForceWaitForNewFrame(frameCount, timeoutMs);
+ result = TextureProducer.GetTexture();
+ }
+ }
+ else
+ {
+ result = TextureProducer.GetTexture();
+ }
+ }
+ return result;
+ }
+#endregion // Extract Frame
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_ExtractFrame.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_ExtractFrame.cs.meta
new file mode 100755
index 0000000..990a42a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_ExtractFrame.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 810d3ce69a3b01f409c733c7cfbd119c
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenBuffer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenBuffer.cs
new file mode 100755
index 0000000..bb66d09
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenBuffer.cs
@@ -0,0 +1,129 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+ public bool OpenMediaFromBuffer(byte[] buffer, bool autoPlay = true)
+ {
+ _mediaPath = new MediaPath("buffer", MediaPathType.AbsolutePathOrURL);
+ _autoPlayOnStart = autoPlay;
+
+ if (_controlInterface == null)
+ {
+ Initialise();
+ }
+
+ return OpenMediaFromBufferInternal(buffer);
+ }
+
+ public bool StartOpenChunkedMediaFromBuffer(ulong length, bool autoPlay = true)
+ {
+ _mediaPath = new MediaPath("buffer", MediaPathType.AbsolutePathOrURL);
+ _autoPlayOnStart = autoPlay;
+
+ if (_controlInterface == null)
+ {
+ Initialise();
+ }
+
+ return StartOpenMediaFromBufferInternal(length);
+ }
+
+ public bool AddChunkToVideoBuffer(byte[] chunk, ulong offset, ulong chunkSize)
+ {
+ return AddChunkToBufferInternal(chunk, offset, chunkSize);
+ }
+
+ public bool EndOpenChunkedVideoFromBuffer()
+ {
+ return EndOpenMediaFromBufferInternal();
+ }
+
+ private bool OpenMediaFromBufferInternal(byte[] buffer)
+ {
+ bool result = false;
+ // Open the video file
+ if (_controlInterface != null)
+ {
+ CloseMedia();
+
+ _isMediaOpened = true;
+ _autoPlayOnStartTriggered = !_autoPlayOnStart;
+
+ Helper.LogInfo("Opening buffer of length " + buffer.Length, this);
+
+ if (!_controlInterface.OpenMediaFromBuffer(buffer))
+ {
+ Debug.LogError("[AVProVideo] Failed to open buffer", this);
+ if (GetCurrentPlatformOptions() != PlatformOptionsWindows || PlatformOptionsWindows.videoApi != Windows.VideoApi.DirectShow)
+ {
+ Debug.LogError("[AVProVideo] Loading from buffer is currently only supported in Windows when using the DirectShow API");
+ }
+ }
+ else
+ {
+ SetPlaybackOptions();
+ result = true;
+ StartRenderCoroutine();
+ }
+ }
+ return result;
+ }
+
+ private bool StartOpenMediaFromBufferInternal(ulong length)
+ {
+ bool result = false;
+ // Open the video file
+ if (_controlInterface != null)
+ {
+ CloseMedia();
+
+ _isMediaOpened = true;
+ _autoPlayOnStartTriggered = !_autoPlayOnStart;
+
+ Helper.LogInfo("Starting Opening buffer of length " + length, this);
+
+ if (!_controlInterface.StartOpenMediaFromBuffer(length))
+ {
+ Debug.LogError("[AVProVideo] Failed to start open video from buffer", this);
+ if (GetCurrentPlatformOptions() != PlatformOptionsWindows || PlatformOptionsWindows.videoApi != Windows.VideoApi.DirectShow)
+ {
+ Debug.LogError("[AVProVideo] Loading from buffer is currently only supported in Windows when using the DirectShow API");
+ }
+ }
+ else
+ {
+ SetPlaybackOptions();
+ result = true;
+ StartRenderCoroutine();
+ }
+ }
+ return result;
+ }
+
+ private bool AddChunkToBufferInternal(byte[] chunk, ulong offset, ulong chunkSize)
+ {
+ if (Control != null)
+ {
+ return Control.AddChunkToMediaBuffer(chunk, offset, chunkSize);
+ }
+
+ return false;
+ }
+
+ private bool EndOpenMediaFromBufferInternal()
+ {
+ if (Control != null)
+ {
+ return Control.EndOpenMediaFromBuffer();
+ }
+
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenBuffer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenBuffer.cs.meta
new file mode 100755
index 0000000..58b241e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenBuffer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: bd1bd18da7d2dc7468c9799e5b02caea
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenStream.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenStream.cs
new file mode 100755
index 0000000..056170c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenStream.cs
@@ -0,0 +1,60 @@
+using UnityEngine;
+#if NETFX_CORE
+using Windows.Storage.Streams;
+#endif
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+
+#if NETFX_CORE
+ public bool OpenVideoFromStream(IRandomAccessStream ras, string path, bool autoPlay = true)
+ {
+ _videoLocation = FileLocation.AbsolutePathOrURL;
+ _videoPath = path;
+ _autoPlayOnStart = autoPlay;
+
+ if (_controlInterface == null)
+ {
+ Initialise();
+ }
+
+ return OpenVideoFromStream(ras);
+ }
+
+ private bool OpenVideoFromStream(IRandomAccessStream ras)
+ {
+ bool result = false;
+ // Open the video file
+ if (_controlInterface != null)
+ {
+ CloseVideo();
+
+ _isVideoOpened = true;
+ _autoPlayOnStartTriggered = !_autoPlayOnStart;
+
+ // Potentially override the file location
+ long fileOffset = GetPlatformFileOffset();
+
+ if (!Control.OpenVideoFromFile(ras, _videoPath, fileOffset, null, _manuallySetAudioSourceProperties ? _sourceAudioSampleRate : 0,
+ _manuallySetAudioSourceProperties ? _sourceAudioChannels : 0))
+ {
+ Debug.LogError("[AVProVideo] Failed to open " + _videoPath, this);
+ }
+ else
+ {
+ SetPlaybackOptions();
+ result = true;
+ StartRenderCoroutine();
+ }
+ }
+ return result;
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenStream.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenStream.cs.meta
new file mode 100755
index 0000000..4f52f74
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_OpenStream.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4e6c8c5399247d0478ed7ecf17b7d87f
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_PlatformOptions.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_PlatformOptions.cs
new file mode 100755
index 0000000..2850ac2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_PlatformOptions.cs
@@ -0,0 +1,775 @@
+using UnityEngine;
+using System;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+#region PlatformOptions
+ [System.Serializable]
+ public class PlatformOptions
+ {
+ public enum TextureFormat : int
+ {
+ BGRA,
+ YCbCr420_OES,
+ }
+
+ public enum Resolution : int
+ {
+ NoPreference,
+ _480p,
+ _720p,
+ _1080p,
+ _1440p,
+ _2160p,
+ Custom
+ }
+
+ public enum AudioMode : int
+ {
+ SystemDirect,
+ Unity,
+ SystemDirectWithCapture,
+ FacebookAudio360,
+ }
+
+ public enum BitRateUnits : int
+ {
+ bps,
+ Kbps,
+ Mbps
+ }
+
+ public virtual bool IsModified()
+ {
+ return (httpHeaders.IsModified()
+ || keyAuth.IsModified()
+ );
+ }
+
+ public virtual bool HasChanged()
+ {
+ return false;
+ }
+
+ public virtual void ClearChanges()
+ {
+
+ }
+
+ public HttpHeaderData httpHeaders = new HttpHeaderData();
+ public KeyAuthData keyAuth = new KeyAuthData();
+
+ // Decryption support
+ public virtual string GetKeyServerAuthToken() { return keyAuth.keyServerToken; }
+ //public virtual string GetKeyServerURL() { return null; }
+ public virtual byte[] GetOverrideDecryptionKey() { return keyAuth.overrideDecryptionKey; }
+
+ public virtual bool StartWithHighestBandwidth() { return false; }
+ }
+
+ [System.Serializable]
+ public class OptionsWindows : PlatformOptions, ISerializationCallbackReceiver
+ {
+ public Windows.VideoApi videoApi = Windows.VideoApi.MediaFoundation;
+ public bool useHardwareDecoding = true;
+ public bool useRendererSync = true;
+ public bool useTextureMips = false;
+ public bool use10BitTextures = false;
+ public bool hintAlphaChannel = false;
+ public bool useLowLatency = false;
+ public bool useCustomMovParser = false;
+ public bool useHapNotchLC = false;
+ public bool useStereoDetection = true;
+ public bool useTextTrackSupport = true;
+ public bool useFacebookAudio360Support = true;
+ public bool useAudioDelay = false;
+ public BufferedFrameSelectionMode bufferedFrameSelection = BufferedFrameSelectionMode.None;
+ public bool pauseOnPrerollComplete = false;
+ public string forceAudioOutputDeviceName = string.Empty;
+ public List preferredFilters = new List();
+ public Windows.AudioOutput _audioMode = Windows.AudioOutput.System;
+ public Audio360ChannelMode audio360ChannelMode = Audio360ChannelMode.TBE_8_2;
+
+ /// WinRT only
+ public bool startWithHighestBitrate = false;
+
+ /// WinRT only
+ public bool useLowLiveLatency = false;
+
+ /// Hap & NotchLC only
+ [Range(1, 16)]
+ public int parallelFrameCount = 3;
+ /// Hap & NotchLC only
+ [Range(1, 16)]
+ public int prerollFrameCount = 4;
+
+ public override bool IsModified()
+ {
+ return (base.IsModified()
+ || !useHardwareDecoding
+ || !useRendererSync
+ || useTextureMips
+ || use10BitTextures
+ || hintAlphaChannel
+ || useLowLatency
+ || useCustomMovParser
+ || useHapNotchLC
+ || !useStereoDetection
+ || !useTextTrackSupport
+ || !useFacebookAudio360Support
+ || useAudioDelay
+ || pauseOnPrerollComplete
+ || bufferedFrameSelection != BufferedFrameSelectionMode.None
+ || videoApi != Windows.VideoApi.MediaFoundation
+ || _audioMode != Windows.AudioOutput.System
+ || audio360ChannelMode != Audio360ChannelMode.TBE_8_2
+ || !string.IsNullOrEmpty(forceAudioOutputDeviceName)
+ || preferredFilters.Count != 0
+ || startWithHighestBitrate
+ || useLowLiveLatency
+ || parallelFrameCount != 3
+ || prerollFrameCount != 4
+ );
+ }
+
+ public override bool StartWithHighestBandwidth() { return startWithHighestBitrate; }
+
+ #region Upgrade from Version 1.x
+ [SerializeField, HideInInspector]
+ private bool useUnityAudio = false;
+ [SerializeField, HideInInspector]
+ private bool enableAudio360 = false;
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize() { }
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ if (useUnityAudio && _audioMode == Windows.AudioOutput.System)
+ {
+ _audioMode = Windows.AudioOutput.Unity;
+ useUnityAudio = false;
+ }
+ if (enableAudio360 && _audioMode == Windows.AudioOutput.System)
+ {
+ _audioMode = Windows.AudioOutput.FacebookAudio360;
+ enableAudio360 = false;
+ }
+ }
+ #endregion // Upgrade from Version 1.x
+ }
+
+ [System.Serializable]
+ public class OptionsWindowsUWP : PlatformOptions
+ {
+ public bool useHardwareDecoding = true;
+ public bool useRendererSync = true;
+ public bool useTextureMips = false;
+ public bool use10BitTextures = false;
+ public bool hintOutput10Bit = false;
+ public bool useLowLatency = false;
+ public WindowsUWP.VideoApi videoApi = WindowsUWP.VideoApi.WinRT;
+ public WindowsUWP.AudioOutput _audioMode = WindowsUWP.AudioOutput.System;
+ public Audio360ChannelMode audio360ChannelMode = Audio360ChannelMode.TBE_8_2;
+
+ /// WinRT only
+ public bool startWithHighestBitrate = false;
+
+ /// WinRT only
+ public bool useLowLiveLatency = false;
+
+ public override bool IsModified()
+ {
+ return (base.IsModified()
+ || !useHardwareDecoding
+ || !useRendererSync
+ || useTextureMips
+ || use10BitTextures
+ || useLowLatency
+ || _audioMode != WindowsUWP.AudioOutput.System
+ || (audio360ChannelMode != Audio360ChannelMode.TBE_8_2)
+ || videoApi != WindowsUWP.VideoApi.WinRT
+ || startWithHighestBitrate
+ || useLowLiveLatency
+ );
+ }
+
+ public override bool StartWithHighestBandwidth() { return startWithHighestBitrate; }
+ }
+
+ [System.Serializable]
+ public class OptionsApple: PlatformOptions
+ {
+ [Flags]
+ public enum Flags: int
+ {
+ // Common
+ None = 0,
+ GenerateMipMaps = 1 << 0,
+
+ // iOS & macOS
+ AllowExternalPlayback = 1 << 8,
+ PlayWithoutBuffering = 1 << 9,
+ UseSinglePlayerItem = 1 << 10,
+
+ // iOS
+ ResumeMediaPlaybackAfterAudioSessionRouteChange = 1 << 16,
+ }
+
+ private readonly TextureFormat DefaultTextureFormat;
+ private readonly Flags DefaultFlags;
+ public TextureFormat textureFormat;
+
+ private AudioMode _previousAudioMode = AudioMode.SystemDirect;
+ public AudioMode previousAudioMode
+ {
+ get { return _previousAudioMode; }
+ }
+
+ [SerializeField]
+ private AudioMode _audioMode;
+ public AudioMode audioMode
+ {
+ get { return _audioMode; }
+ set
+ {
+ if (_audioMode != value)
+ {
+ _previousAudioMode = _audioMode;
+ _audioMode = value;
+ _changed |= ChangeFlags.AudioMode;
+ }
+ }
+ }
+
+ [SerializeField]
+ private Flags _flags;
+ public Flags flags
+ {
+ get { return _flags; }
+ set
+ {
+ Flags changed = _flags ^ value;
+ if (changed != 0)
+ {
+ if ((changed & Flags.PlayWithoutBuffering) == Flags.PlayWithoutBuffering)
+ {
+ _changed |= ChangeFlags.PlayWithoutBuffering;
+ }
+ if ((changed & Flags.ResumeMediaPlaybackAfterAudioSessionRouteChange) == Flags.ResumeMediaPlaybackAfterAudioSessionRouteChange)
+ {
+ _changed |= ChangeFlags.ResumeMediaPlaybackAfterAudioSessionRouteChange;
+ }
+ _flags = value;
+ }
+ }
+ }
+
+ public float maximumPlaybackRate = 2.0f;
+
+ [Flags]
+ public enum ChangeFlags: int
+ {
+ None = 0,
+ PreferredPeakBitRate = 1 << 1,
+ PreferredForwardBufferDuration = 1 << 2,
+ PlayWithoutBuffering = 1 << 3,
+ PreferredMaximumResolution = 1 << 4,
+ AudioMode = 1 << 5,
+ ResumeMediaPlaybackAfterAudioSessionRouteChange = 1 << 6,
+ All = -1
+ }
+
+ private ChangeFlags _changed = ChangeFlags.None;
+
+ [SerializeField]
+ private float _preferredPeakBitRate = 0.0f;
+ public float preferredPeakBitRate
+ {
+ get { return _preferredPeakBitRate; }
+ set
+ {
+ if (_preferredPeakBitRate != value)
+ {
+ _changed |= ChangeFlags.PreferredPeakBitRate;
+ _preferredPeakBitRate = value;
+ }
+ }
+ }
+
+ [SerializeField]
+ private BitRateUnits _preferredPeakBitRateUnits = BitRateUnits.Kbps;
+ public BitRateUnits preferredPeakBitRateUnits
+ {
+ get { return _preferredPeakBitRateUnits; }
+ set
+ {
+ if (_preferredPeakBitRateUnits != value)
+ {
+ _changed |= ChangeFlags.PreferredPeakBitRate;
+ _preferredPeakBitRateUnits = value;
+ }
+ }
+ }
+
+ [SerializeField]
+ private double _preferredForwardBufferDuration = 0.0;
+ public double preferredForwardBufferDuration
+ {
+ get
+ {
+ return _preferredForwardBufferDuration;
+ }
+ set
+ {
+ if (_preferredForwardBufferDuration != value)
+ {
+ _changed |= ChangeFlags.PreferredForwardBufferDuration;
+ _preferredForwardBufferDuration = value;
+ }
+ }
+ }
+
+ [SerializeField]
+ private Resolution _preferredMaximumResolution = Resolution.NoPreference;
+ public Resolution preferredMaximumResolution
+ {
+ get
+ {
+ return _preferredMaximumResolution;
+ }
+ set
+ {
+ if (_preferredMaximumResolution != value)
+ {
+ _changed |= ChangeFlags.PreferredMaximumResolution;
+ _preferredMaximumResolution = value;
+ }
+ }
+ }
+
+#if UNITY_2017_2_OR_NEWER
+ [SerializeField]
+ private Vector2Int _customPreferredMaximumResolution = Vector2Int.zero;
+ public Vector2Int customPreferredMaximumResolution
+ {
+ get
+ {
+ return _customPreferredMaximumResolution;
+ }
+ set
+ {
+ if (_customPreferredMaximumResolution != value)
+ {
+ _changed |= ChangeFlags.PreferredMaximumResolution;
+ _customPreferredMaximumResolution = value;
+ }
+ }
+ }
+#endif
+
+ private static double BitRateInBitsPerSecond(float value, BitRateUnits units)
+ {
+ switch (units)
+ {
+ case BitRateUnits.bps:
+ return (double)value;
+ case BitRateUnits.Kbps:
+ return (double)value * 1000.0;
+ case BitRateUnits.Mbps:
+ return (double)value * 1000000.0;
+ default:
+ return 0.0;
+ }
+ }
+
+ public double GetPreferredPeakBitRateInBitsPerSecond()
+ {
+ return BitRateInBitsPerSecond(preferredPeakBitRate, preferredPeakBitRateUnits);
+ }
+
+ public OptionsApple(TextureFormat defaultTextureFormat, Flags defaultFlags)
+ {
+ DefaultTextureFormat = defaultTextureFormat;
+ DefaultFlags = defaultFlags;
+ textureFormat = defaultTextureFormat;
+ audioMode = AudioMode.SystemDirect;
+ flags = defaultFlags;
+ }
+
+ public override bool IsModified()
+ {
+ return base.IsModified()
+ || textureFormat != DefaultTextureFormat
+ || audioMode != AudioMode.SystemDirect
+ || flags != DefaultFlags
+ || preferredMaximumResolution != Resolution.NoPreference
+ || preferredPeakBitRate != 0.0f
+ || preferredForwardBufferDuration != 0.0;
+ }
+
+ public override bool HasChanged()
+ {
+ return HasChanged(ChangeFlags.All);
+ }
+
+ public bool HasChanged(ChangeFlags flags)
+ {
+ return (_changed & flags) != ChangeFlags.None;
+ }
+
+ public override void ClearChanges()
+ {
+ _changed = ChangeFlags.None;
+ }
+ }
+
+ [System.Serializable]
+ public class OptionsAndroid : PlatformOptions, ISerializationCallbackReceiver
+ {
+ [Flags]
+ public enum ChangeFlags : int
+ {
+ None = 0,
+ PreferredPeakBitRate = 1 << 1,
+ PreferredMaximumResolution = 1 << 2,
+ PreferredCustomResolution = 1 << 3,
+ AudioMode = 1 << 4,
+ All = -1
+ }
+
+ private ChangeFlags _changed = ChangeFlags.None;
+
+ private readonly TextureFormat DefaultTextureFormat;
+ public TextureFormat textureFormat;
+
+ private AudioMode _previousAudioMode = AudioMode.SystemDirect;
+ public AudioMode previousAudioMode
+ {
+ get { return _previousAudioMode; }
+ }
+
+ [SerializeField]
+ private AudioMode _audioMode;
+ public AudioMode audioMode
+ {
+ get { return _audioMode; }
+ set
+ {
+ if (_audioMode != value)
+ {
+ _previousAudioMode = _audioMode;
+ _audioMode = value;
+ _changed |= ChangeFlags.AudioMode;
+ }
+ }
+ }
+
+ [SerializeField]
+ private Resolution _preferredMaximumResolution = Resolution.NoPreference;
+ public Resolution preferredMaximumResolution
+ {
+ get { return _preferredMaximumResolution; }
+ set
+ {
+ if (_preferredMaximumResolution != value)
+ {
+ _changed |= ChangeFlags.PreferredMaximumResolution;
+ _preferredMaximumResolution = value;
+ }
+ }
+ }
+
+#if UNITY_2017_2_OR_NEWER
+ [SerializeField]
+ private Vector2Int _customPreferredMaximumResolution = Vector2Int.zero;
+ public Vector2Int customPreferredMaximumResolution
+ {
+ get { return _customPreferredMaximumResolution; }
+ set
+ {
+ if (_customPreferredMaximumResolution != value)
+ {
+ _changed |= ChangeFlags.PreferredCustomResolution;
+ _customPreferredMaximumResolution = value;
+ }
+ }
+ }
+#endif
+
+ [SerializeField]
+ private float _preferredPeakBitRate = 0.0f;
+ public float preferredPeakBitRate
+ {
+ get { return _preferredPeakBitRate; }
+ set
+ {
+ if (_preferredPeakBitRate != value)
+ {
+ _changed |= ChangeFlags.PreferredPeakBitRate;
+ _preferredPeakBitRate = value;
+ }
+ }
+ }
+
+ [SerializeField]
+ private BitRateUnits _preferredPeakBitRateUnits = BitRateUnits.Kbps;
+ public BitRateUnits preferredPeakBitRateUnits
+ {
+ get { return _preferredPeakBitRateUnits; }
+ set
+ {
+ if (_preferredPeakBitRateUnits != value)
+ {
+ _changed |= ChangeFlags.PreferredPeakBitRate;
+ _preferredPeakBitRateUnits = value;
+ }
+ }
+ }
+
+
+ public Android.VideoApi videoApi = Android.VideoApi.ExoPlayer;
+// public bool showPosterFrame = false;
+ public Audio360ChannelMode audio360ChannelMode = Audio360ChannelMode.TBE_8_2;
+ public int audio360LatencyMS = 0;
+ public bool preferSoftwareDecoder = false;
+ public bool forceRtpTCP = false;
+ public bool forceEnableMediaCodecAsynchronousQueueing = false;
+
+ [SerializeField, Tooltip("Byte offset into the file where the media file is located. This is useful when hiding or packing media files within another file.")]
+ public int fileOffset = 0;
+
+ public bool startWithHighestBitrate = false;
+
+ public int minBufferMs = Android.Default_MinBufferTimeMs;
+ public int maxBufferMs = Android.Default_MaxBufferTimeMs;
+ public int bufferForPlaybackMs = Android.Default_BufferForPlaybackMs;
+ public int bufferForPlaybackAfterRebufferMs = Android.Default_BufferForPlaybackAfterRebufferMs;
+
+ [Obsolete("useFastOesPath is deprecated and replaced with TextureFormat")]
+ public bool useFastOesPath;
+ [Obsolete("audioOutput is deprecated and replaced with audioMode")]
+ public int audioOutput;
+ [Obsolete("blitTextureFiltering is deprecated and its functionality has been removed")]
+ public int blitTextureFiltering;
+ [Obsolete("forceEnableMediaCodecAsyncQueueing is deprecated and replaced with forceEnableMediaCodecAsynchronousQueueing")]
+ public bool forceEnableMediaCodecAsyncQueueing;
+
+ public override bool IsModified()
+ {
+ return (base.IsModified()
+ || (fileOffset != 0)
+ || textureFormat != DefaultTextureFormat
+ || audioMode != AudioMode.SystemDirect
+// || showPosterFrame
+ || (videoApi != Android.VideoApi.ExoPlayer)
+ || (audio360ChannelMode != Audio360ChannelMode.TBE_8_2)
+ || (audio360LatencyMS != 0 )
+ || preferSoftwareDecoder
+ || forceRtpTCP
+ || forceEnableMediaCodecAsynchronousQueueing
+ || startWithHighestBitrate
+ || (minBufferMs != Android.Default_MinBufferTimeMs)
+ || (maxBufferMs != Android.Default_MaxBufferTimeMs)
+ || (bufferForPlaybackMs != Android.Default_BufferForPlaybackMs)
+ || (bufferForPlaybackAfterRebufferMs != Android.Default_BufferForPlaybackAfterRebufferMs)
+ || (preferredMaximumResolution != Resolution.NoPreference)
+ || (preferredPeakBitRate != 0.0f)
+ );
+ }
+
+ private static double BitRateInBitsPerSecond(float value, BitRateUnits units)
+ {
+ switch (units)
+ {
+ case BitRateUnits.bps:
+ return (double)value;
+ case BitRateUnits.Kbps:
+ return (double)value * 1000.0;
+ case BitRateUnits.Mbps:
+ return (double)value * 1000000.0;
+ default:
+ return 0.0;
+ }
+ }
+
+ public double GetPreferredPeakBitRateInBitsPerSecond()
+ {
+ _changed &= ~ChangeFlags.PreferredPeakBitRate;
+ return BitRateInBitsPerSecond(preferredPeakBitRate, preferredPeakBitRateUnits);
+ }
+
+ public override bool StartWithHighestBandwidth()
+ {
+ return startWithHighestBitrate;
+ }
+
+ public override bool HasChanged()
+ {
+ return HasChanged(ChangeFlags.All, false);
+ }
+
+ public bool HasChanged(ChangeFlags flags, bool bClearFlags = false)
+ {
+ bool bReturn = ((_changed & flags) != ChangeFlags.None);
+ if (bClearFlags)
+ {
+ _changed = ChangeFlags.None;
+ }
+ return bReturn;
+ }
+
+ public override void ClearChanges()
+ {
+ _changed = ChangeFlags.None;
+ }
+
+ #region Upgrade from Version 1.x
+ [SerializeField, HideInInspector]
+ private bool enableAudio360 = false;
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize() { }
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+#if false
+ if (enableAudio360 && audioOutput == Android.AudioOutput.System)
+ {
+ audioOutput = Android.AudioOutput.FacebookAudio360;
+ enableAudio360 = false;
+ }
+#else
+ if (enableAudio360 && audioMode == AudioMode.SystemDirect)
+ {
+ audioMode = AudioMode.FacebookAudio360;
+ enableAudio360 = false;
+ }
+#endif
+ }
+ #endregion // Upgrade from Version 1.x
+ }
+
+ [System.Serializable]
+ public class OptionsWebGL : PlatformOptions
+ {
+ public WebGL.ExternalLibrary externalLibrary = WebGL.ExternalLibrary.None;
+ public bool useTextureMips = false;
+
+ public override bool IsModified()
+ {
+ return (base.IsModified() || externalLibrary != WebGL.ExternalLibrary.None || useTextureMips);
+ }
+
+ // Decryption support
+ public override string GetKeyServerAuthToken() { return null; }
+ public override byte[] GetOverrideDecryptionKey() { return null; }
+ }
+
+ // TODO: move these to a Setup object
+ [SerializeField] OptionsWindows _optionsWindows = new OptionsWindows();
+ [SerializeField] OptionsApple _options_macOS = new OptionsApple(OptionsApple.TextureFormat.BGRA, OptionsApple.Flags.None);
+ [SerializeField] OptionsApple _options_iOS = new OptionsApple(OptionsApple.TextureFormat.BGRA, OptionsApple.Flags.None);
+ [SerializeField] OptionsApple _options_tvOS = new OptionsApple(OptionsApple.TextureFormat.BGRA, OptionsApple.Flags.None);
+ [SerializeField] OptionsApple _options_visionOS = new OptionsApple(OptionsApple.TextureFormat.BGRA, OptionsApple.Flags.None);
+ [SerializeField] OptionsAndroid _optionsAndroid = new OptionsAndroid();
+ [SerializeField] OptionsWindowsUWP _optionsWindowsUWP = new OptionsWindowsUWP();
+ [SerializeField] OptionsWebGL _optionsWebGL = new OptionsWebGL();
+
+ public OptionsWindows PlatformOptionsWindows { get { return _optionsWindows; } }
+ public OptionsApple PlatformOptions_macOS { get { return _options_macOS; } }
+ public OptionsApple PlatformOptions_iOS { get { return _options_iOS; } }
+ public OptionsApple PlatformOptions_tvOS { get { return _options_tvOS; } }
+ public OptionsApple PlatformOptions_visionOS { get { return _options_visionOS; } }
+ public OptionsAndroid PlatformOptionsAndroid { get { return _optionsAndroid; } }
+ public OptionsWindowsUWP PlatformOptionsWindowsUWP { get { return _optionsWindowsUWP; } }
+ public OptionsWebGL PlatformOptionsWebGL { get { return _optionsWebGL; } }
+
+#endregion // PlatformOptions
+ }
+
+#region PlatformOptionsExtensions
+ public static class OptionsAppleExtensions
+ {
+ public static bool GenerateMipmaps(this MediaPlayer.OptionsApple.Flags flags)
+ {
+ return (flags & MediaPlayer.OptionsApple.Flags.GenerateMipMaps) == MediaPlayer.OptionsApple.Flags.GenerateMipMaps;
+ }
+
+ public static MediaPlayer.OptionsApple.Flags SetGenerateMipMaps(this MediaPlayer.OptionsApple.Flags flags, bool b)
+ {
+ if (flags.GenerateMipmaps() ^ b)
+ {
+ flags = b ? flags | MediaPlayer.OptionsApple.Flags.GenerateMipMaps
+ : flags & ~MediaPlayer.OptionsApple.Flags.GenerateMipMaps;
+ }
+ return flags;
+ }
+
+ public static bool AllowExternalPlayback(this MediaPlayer.OptionsApple.Flags flags)
+ {
+ return (flags & MediaPlayer.OptionsApple.Flags.AllowExternalPlayback) == MediaPlayer.OptionsApple.Flags.AllowExternalPlayback;
+ }
+
+ public static MediaPlayer.OptionsApple.Flags SetAllowExternalPlayback(this MediaPlayer.OptionsApple.Flags flags, bool b)
+ {
+ if (flags.AllowExternalPlayback() ^ b)
+ {
+ flags = b ? flags | MediaPlayer.OptionsApple.Flags.AllowExternalPlayback
+ : flags & ~MediaPlayer.OptionsApple.Flags.AllowExternalPlayback;
+ }
+ return flags;
+ }
+
+ public static bool PlayWithoutBuffering(this MediaPlayer.OptionsApple.Flags flags)
+ {
+ return (flags & MediaPlayer.OptionsApple.Flags.PlayWithoutBuffering) == MediaPlayer.OptionsApple.Flags.PlayWithoutBuffering;
+ }
+
+ public static MediaPlayer.OptionsApple.Flags SetPlayWithoutBuffering(this MediaPlayer.OptionsApple.Flags flags, bool b)
+ {
+ if (flags.PlayWithoutBuffering() ^ b)
+ {
+ flags = b ? flags | MediaPlayer.OptionsApple.Flags.PlayWithoutBuffering
+ : flags & ~MediaPlayer.OptionsApple.Flags.PlayWithoutBuffering;
+ }
+ return flags;
+ }
+
+ public static bool UseSinglePlayerItem(this MediaPlayer.OptionsApple.Flags flags)
+ {
+ return (flags & MediaPlayer.OptionsApple.Flags.UseSinglePlayerItem) == MediaPlayer.OptionsApple.Flags.UseSinglePlayerItem;
+ }
+
+ public static MediaPlayer.OptionsApple.Flags SetUseSinglePlayerItem(this MediaPlayer.OptionsApple.Flags flags, bool b)
+ {
+ if (flags.UseSinglePlayerItem() ^ b)
+ {
+ flags = b ? flags | MediaPlayer.OptionsApple.Flags.UseSinglePlayerItem
+ : flags & ~MediaPlayer.OptionsApple.Flags.UseSinglePlayerItem;
+ }
+ return flags;
+ }
+
+ public static bool ResumePlaybackAfterAudioSessionRouteChange(this MediaPlayer.OptionsApple.Flags flags)
+ {
+ return (flags & MediaPlayer.OptionsApple.Flags.ResumeMediaPlaybackAfterAudioSessionRouteChange) == MediaPlayer.OptionsApple.Flags.ResumeMediaPlaybackAfterAudioSessionRouteChange;
+ }
+
+ public static MediaPlayer.OptionsApple.Flags SetResumePlaybackAfterAudioSessionRouteChange(this MediaPlayer.OptionsApple.Flags flags, bool b)
+ {
+ if (flags.ResumePlaybackAfterAudioSessionRouteChange() ^ b)
+ {
+ flags = b ? flags | MediaPlayer.OptionsApple.Flags.ResumeMediaPlaybackAfterAudioSessionRouteChange
+ : flags & ~MediaPlayer.OptionsApple.Flags.ResumeMediaPlaybackAfterAudioSessionRouteChange;
+ }
+ return flags;
+ }
+ }
+#endregion // PlatformOptionsExtensions
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_PlatformOptions.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_PlatformOptions.cs.meta
new file mode 100755
index 0000000..d134dfa
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_PlatformOptions.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1d9536a1e758279489d9add3e1ba26ad
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Subtitles.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Subtitles.cs
new file mode 100755
index 0000000..3986420
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Subtitles.cs
@@ -0,0 +1,150 @@
+using UnityEngine;
+using System.Collections;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+ public bool EnableSubtitles(MediaPath mediaPath)
+ {
+ bool result = false;
+ if (_subtitlesInterface != null)
+ {
+ if (mediaPath != null && !string.IsNullOrEmpty(mediaPath.Path))
+ {
+ string fullPath = mediaPath.GetResolvedFullPath();
+
+ bool checkForFileExist = true;
+ if (fullPath.Contains("://"))
+ {
+ checkForFileExist = false;
+ }
+#if (!UNITY_EDITOR && UNITY_ANDROID)
+ checkForFileExist = false;
+#endif
+
+ if (checkForFileExist && !System.IO.File.Exists(fullPath))
+ {
+ Debug.LogError("[AVProVideo] Subtitle file not found: " + fullPath, this);
+ }
+ else
+ {
+ Helper.LogInfo("Opening subtitles " + fullPath, this);
+
+ _previousSubtitleIndex = -1;
+
+ try
+ {
+ if (fullPath.Contains("://"))
+ {
+ // Use coroutine and WWW class for loading
+ if (_loadSubtitlesRoutine != null)
+ {
+ StopCoroutine(_loadSubtitlesRoutine);
+ _loadSubtitlesRoutine = null;
+ }
+ _loadSubtitlesRoutine = StartCoroutine(LoadSubtitlesCoroutine(fullPath, mediaPath));
+ }
+ else
+ {
+ // Load directly from file
+ string subtitleData = System.IO.File.ReadAllText(fullPath);
+ if (_subtitlesInterface.LoadSubtitlesSRT(subtitleData))
+ {
+ _subtitlePath = mediaPath;
+ _sideloadSubtitles = false;
+ result = true;
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to load subtitles" + fullPath, this);
+ }
+ }
+
+ }
+ catch (System.Exception e)
+ {
+ Debug.LogError("[AVProVideo] Failed to load subtitles " + fullPath, this);
+ Debug.LogException(e, this);
+ }
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] No subtitle file path specified", this);
+ }
+ }
+ else
+ {
+ _queueSubtitlePath = mediaPath;
+ }
+
+ return result;
+ }
+
+ private IEnumerator LoadSubtitlesCoroutine(string url, MediaPath mediaPath)
+ {
+ UnityEngine.Networking.UnityWebRequest www = UnityEngine.Networking.UnityWebRequest.Get(url);
+ #if UNITY_2017_2_OR_NEWER
+ yield return www.SendWebRequest();
+ #else
+ yield return www.Send();
+ #endif
+
+ string subtitleData = string.Empty;
+
+ #if UNITY_2020_1_OR_NEWER
+ if (www.result == UnityEngine.Networking.UnityWebRequest.Result.Success)
+ #elif UNITY_2017_1_OR_NEWER
+ if (!www.isNetworkError)
+ #else
+ if (!www.isError)
+ #endif
+ {
+ subtitleData = ((UnityEngine.Networking.DownloadHandler)www.downloadHandler).text;
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Error loading subtitles '" + www.error + "' from " + url);
+ }
+
+ if (_subtitlesInterface.LoadSubtitlesSRT(subtitleData))
+ {
+ _subtitlePath = mediaPath;
+ _sideloadSubtitles = false;
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to load subtitles" + url, this);
+ }
+
+ _loadSubtitlesRoutine = null;
+
+ www.Dispose();
+ }
+
+ public void DisableSubtitles()
+ {
+ if (_loadSubtitlesRoutine != null)
+ {
+ StopCoroutine(_loadSubtitlesRoutine);
+ _loadSubtitlesRoutine = null;
+ }
+
+ if (_subtitlesInterface != null)
+ {
+ _previousSubtitleIndex = -1;
+ _sideloadSubtitles = false;
+ _subtitlesInterface.LoadSubtitlesSRT(string.Empty);
+ }
+ else
+ {
+ _queueSubtitlePath = null;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Subtitles.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Subtitles.cs.meta
new file mode 100755
index 0000000..0834e4e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Subtitles.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f4ed2744d6ff80845bbbd59e8f6c732b
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_TimeScale.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_TimeScale.cs
new file mode 100755
index 0000000..5654170
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_TimeScale.cs
@@ -0,0 +1,93 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour
+ {
+
+#region Support for Time Scale
+#if AVPROVIDEO_BETA_SUPPORT_TIMESCALE
+ // Adjust this value to get faster performance but may drop frames.
+ // Wait longer to ensure there is enough time for frames to process
+ private const float TimeScaleTimeoutMs = 20f;
+ private bool _timeScaleIsControlling;
+ private double _timeScaleVideoTime;
+
+ private void UpdateTimeScale()
+ {
+ if (Time.timeScale != 1f || Time.captureFramerate != 0)
+ {
+ if (_controlInterface.IsPlaying())
+ {
+ _controlInterface.Pause();
+ _timeScaleIsControlling = true;
+ _timeScaleVideoTime = _controlInterface.GetCurrentTime();
+ }
+
+ if (_timeScaleIsControlling)
+ {
+ // Progress time
+ _timeScaleVideoTime += Time.deltaTime;
+
+ // Handle looping
+ if (_controlInterface.IsLooping() && _timeScaleVideoTime >= Info.GetDuration())
+ {
+ // TODO: really we should seek to (_timeScaleVideoTime % Info.GetDuration())
+ _timeScaleVideoTime = 0.0;
+ }
+
+ int preSeekFrameCount = TextureProducer.GetTextureFrameCount();
+
+ // Seek to the new time
+ {
+ double preSeekTime = Control.GetCurrentTime();
+
+ // Seek
+ _controlInterface.Seek(_timeScaleVideoTime);
+
+ // Early out, if after the seek the time hasn't changed, the seek was probably too small to go to the next frame.
+ // TODO: This behaviour may be different on other platforms (not Windows) and needs more testing.
+ if (Mathf.Approximately((float)preSeekTime, (float)_controlInterface.GetCurrentTime()))
+ {
+ return;
+ }
+ }
+
+ // Wait for the new frame to arrive
+ if (!_controlInterface.WaitForNextFrame(GetDummyCamera(), preSeekFrameCount))
+ {
+ // If WaitForNextFrame fails (e.g. in android single threaded), we run the below code to asynchronously wait for the frame
+ System.DateTime startTime = System.DateTime.Now;
+ int lastFrameCount = TextureProducer.GetTextureFrameCount();
+
+ while (_controlInterface != null && (System.DateTime.Now - startTime).TotalMilliseconds < (double)TimeScaleTimeoutMs)
+ {
+ _playerInterface.Update();
+ _playerInterface.Render();
+ GetDummyCamera().Render();
+ if (lastFrameCount != TextureProducer.GetTextureFrameCount())
+ {
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ // Restore playback when timeScale becomes 1
+ if (_timeScaleIsControlling)
+ {
+ _controlInterface.Play();
+ _timeScaleIsControlling = false;
+ }
+ }
+ }
+#endif
+#endregion // Support for Time Scale
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_TimeScale.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_TimeScale.cs.meta
new file mode 100755
index 0000000..887fabe
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_TimeScale.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: cdb92d6bab7106944bcd3cd7a034df6e
+timeCreated: 1544813302
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Upgrade.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Upgrade.cs
new file mode 100755
index 0000000..981607b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Upgrade.cs
@@ -0,0 +1,83 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public partial class MediaPlayer : MonoBehaviour, ISerializationCallbackReceiver
+ {
+ #region Upgrade from Version 1.x
+ [SerializeField, HideInInspector]
+ private string m_VideoPath;
+ [SerializeField, HideInInspector]
+ private FileLocation m_VideoLocation = FileLocation.RelativeToStreamingAssetsFolder;
+
+ private enum FileLocation
+ {
+ AbsolutePathOrURL,
+ RelativeToProjectFolder,
+ RelativeToStreamingAssetsFolder,
+ RelativeToDataFolder,
+ RelativeToPersistentDataFolder,
+ }
+
+ /*
+ [SerializeField, HideInInspector]
+ private StereoPacking m_StereoPacking;
+ [SerializeField, HideInInspector]
+ private AlphaPacking m_AlphaPacking;
+ */
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ /*
+ m_StereoPacking = _fallbackMediaHints.stereoPacking;
+ m_AlphaPacking = _fallbackMediaHints.alphaPacking;
+ */
+ }
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ if (!string.IsNullOrEmpty(m_VideoPath))
+ {
+ MediaPathType mediaPathType = MediaPathType.AbsolutePathOrURL;
+ switch (m_VideoLocation)
+ {
+ default:
+ case FileLocation.AbsolutePathOrURL:
+ mediaPathType = MediaPathType.AbsolutePathOrURL;
+ break;
+ case FileLocation.RelativeToProjectFolder:
+ mediaPathType = MediaPathType.RelativeToProjectFolder;
+ break;
+ case FileLocation.RelativeToStreamingAssetsFolder:
+ mediaPathType = MediaPathType.RelativeToStreamingAssetsFolder;
+ break;
+ case FileLocation.RelativeToDataFolder:
+ mediaPathType = MediaPathType.RelativeToDataFolder;
+ break;
+ case FileLocation.RelativeToPersistentDataFolder:
+ mediaPathType = MediaPathType.RelativeToPersistentDataFolder;
+ break;
+ }
+ _mediaPath = new MediaPath(m_VideoPath, mediaPathType);
+ _mediaSource = MediaSource.Path;
+ m_VideoPath = null;
+ }
+
+ /*
+ if (m_StereoPacking != _fallbackMediaHints.stereoPacking)
+ {
+ _fallbackMediaHints.stereoPacking = m_StereoPacking;
+ }
+ if (m_AlphaPacking != _fallbackMediaHints.alphaPacking)
+ {
+ _fallbackMediaHints.alphaPacking = m_AlphaPacking;
+ }
+ */
+ }
+ #endregion // Upgrade from Version 1.x
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Upgrade.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Upgrade.cs.meta
new file mode 100755
index 0000000..c5ed4f1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/MediaPlayer_Upgrade.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2e1421b74b1861b42ba7287d322c2f19
+timeCreated: 1614963169
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/PlaylistMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/PlaylistMediaPlayer.cs
new file mode 100755
index 0000000..d0e262f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/PlaylistMediaPlayer.cs
@@ -0,0 +1,1023 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ [System.Serializable]
+ public class MediaPlaylist
+ {
+ [System.Serializable]
+ public class MediaItem
+ {
+ public enum SourceType
+ {
+ AVProVideoPlayer,
+ //Texture2D,
+ }
+
+ [SerializeField] public string name = string.Empty;
+ [SerializeField] public SourceType sourceType = SourceType.AVProVideoPlayer;
+ [SerializeField] public MediaPath mediaPath = new MediaPath();
+ [SerializeField] public Texture2D texture = null;
+ [SerializeField] public float textureDuration;
+ [SerializeField] public bool loop = false;
+ [SerializeField] public PlaylistMediaPlayer.StartMode startMode = PlaylistMediaPlayer.StartMode.Immediate;
+ [SerializeField] public PlaylistMediaPlayer.ProgressMode progressMode = PlaylistMediaPlayer.ProgressMode.OnFinish;
+ [SerializeField] public float progressTimeSeconds = 0.5f;
+ [SerializeField] public bool isOverrideTransition = false;
+ [SerializeField] public PlaylistMediaPlayer.Transition overrideTransition = PlaylistMediaPlayer.Transition.None;
+ [SerializeField] public float overrideTransitionDuration = 1f;
+ [SerializeField] public PlaylistMediaPlayer.Easing.Preset overrideTransitionEasing = PlaylistMediaPlayer.Easing.Preset.Linear;
+ }
+
+ [SerializeField] List _items = new List(8);
+ public List Items { get { return _items; } }
+
+ public bool HasItemAt(int index)
+ {
+ return (index >= 0 && index < _items.Count);
+ }
+ }
+
+ ///
+ /// This is a BETA component
+ ///
+ [AddComponentMenu("AVPro Video/Playlist Media Player (BETA)", -80)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public class PlaylistMediaPlayer : MediaPlayer, ITextureProducer
+ {
+ public enum Transition
+ {
+ None,
+ Fade,
+ Black,
+ White,
+ Transparent,
+ Horiz,
+ Vert,
+ Diag,
+ MirrorH,
+ MirrorV,
+ MirrorD,
+ ScrollV,
+ ScrollH,
+ Circle,
+ Diamond,
+ Blinds,
+ Arrows,
+ SlideH,
+ SlideV,
+ Zoom,
+ RectV,
+ Random,
+ }
+
+ public enum PlaylistLoopMode
+ {
+ None,
+ Loop,
+ }
+
+ public enum StartMode
+ {
+ Immediate,
+ //AfterSeconds,
+ Manual,
+ }
+
+ public enum ProgressMode
+ {
+ OnFinish,
+ BeforeFinish,
+ //AfterTime,
+ Manual,
+ }
+ [SerializeField] Shader _transitionShader = null;
+
+ [SerializeField] MediaPlayer _playerA = null;
+ [SerializeField] MediaPlayer _playerB = null;
+ [SerializeField] bool _playlistAutoProgress = true;
+
+ [Tooltip("Close the video on the other MediaPlayer when it is not visible any more. This is useful for freeing up memory and GPU decoding resources.")]
+ [SerializeField] bool _autoCloseVideo = true;
+
+ [SerializeField] PlaylistLoopMode _playlistLoopMode = PlaylistLoopMode.None;
+ [SerializeField] MediaPlaylist _playlist = new MediaPlaylist();
+
+ [Tooltip("Pause the previously playing video. This is useful for systems that will struggle to play 2 videos at once")]
+ [SerializeField] bool _pausePreviousOnTransition = true;
+
+ [SerializeField] Transition _defaultTransition = Transition.None;
+ [SerializeField] float _defaultTransitionDuration = 1f;
+ [SerializeField] Easing.Preset _defaultTransitionEasing = Easing.Preset.Linear;
+
+ private static readonly LazyShaderProperty PropFromTex = new LazyShaderProperty("_FromTex");
+ private static readonly LazyShaderProperty PropFade = new LazyShaderProperty("_Fade");
+
+ private bool _isPaused = false;
+ private int _playlistIndex = 0;
+ private MediaPlayer _nextPlayer;
+ private Material _material;
+ private Transition _currentTransition = Transition.None;
+ private string _currentTransitionName = "LERP_NONE";
+ private float _currentTransitionDuration = 1f;
+ private Easing.Preset _currentTransitionEasing = Easing.Preset.Linear;
+ private float _textureTimer;
+ private float _transitionTimer;
+ private System.Func _easeFunc;
+ private RenderTexture _rt;
+ private MediaPlaylist.MediaItem _currentItem;
+ private MediaPlaylist.MediaItem _nextItem;
+
+ public MediaPlayer CurrentPlayer
+ {
+ get
+ {
+ if (NextPlayer == _playerA)
+ {
+ return _playerB;
+ }
+ return _playerA;
+ }
+ }
+
+ public MediaPlayer NextPlayer
+ {
+ get
+ {
+ return _nextPlayer;
+ }
+ }
+
+ public MediaPlaylist Playlist { get { return _playlist; } }
+
+ public int PlaylistIndex { get { return _playlistIndex; } }
+
+ public MediaPlaylist.MediaItem PlaylistItem { get { if (_playlist.HasItemAt(_playlistIndex)) return _playlist.Items[_playlistIndex]; return null; } }
+
+ ///
+ /// The default transition to use if the transition is not overridden in the MediaItem
+ ///
+ public Transition DefaultTransition { get { return _defaultTransition; } set { _defaultTransition = value; } }
+
+ ///
+ /// The default duration the transition will take (in seconds) if the transition is not overridden in the MediaItem
+ ///
+ public float DefaultTransitionDuration { get { return _defaultTransitionDuration; } set { _defaultTransitionDuration = value; } }
+
+ ///
+ /// The default easing the transition will use if the transition is not overridden in the MediaItem
+ ///
+ public Easing.Preset DefaultTransitionEasing { get { return _defaultTransitionEasing; } set { _defaultTransitionEasing = value; } }
+
+ ///
+ /// Closes videos that aren't playing. This will save memory but adds extra overhead
+ ///
+ public bool AutoCloseVideo { get { return _autoCloseVideo; } set { _autoCloseVideo = value; } }
+
+ ///
+ /// None: Do not loop the playlist when the end is reached.
Loop: Rewind the playlist and play again when the each is reached
+ ///
+ public PlaylistLoopMode LoopMode { get { return _playlistLoopMode; } set { _playlistLoopMode = value; } }
+
+ ///
+ /// Enable the playlist to progress to the next item automatically, or wait for manual trigger via scripting
+ ///
+ public bool AutoProgress { get { return _playlistAutoProgress; } set { _playlistAutoProgress = value; } }
+
+ ///
+ /// Returns the IMediaInfo interface for the MediaPlayer that is playing the current active item in the playlist (returned by CurrentPlayer property). This will change during each transition.
+ ///
+ public override IMediaInfo Info
+ {
+ get { if (CurrentPlayer != null) return CurrentPlayer.Info; return null; }
+ }
+
+ ///
+ /// Returns the IMediaControl interface for the MediaPlayer that is playing the current active item in the playlist (returned by CurrentPlayer property). This will change during each transition.
+ ///
+ public override IMediaControl Control
+ {
+ get { if (CurrentPlayer != null) return CurrentPlayer.Control; return null; }
+ }
+
+ public override ITextureProducer TextureProducer
+ {
+ get
+ {
+ if (CurrentPlayer != null)
+ {
+ if (IsTransitioning())
+ {
+ return this;
+ }
+ /*if (_currentItem != null && _currentItem.sourceType == MediaPlaylist.MediaItem.SourceType.Texture2D && _currentItem.texture != null)
+ {
+ return this;
+ }*/
+ return CurrentPlayer.TextureProducer;
+ }
+ return null;
+ }
+ }
+
+ [SerializeField, Range(0.0f, 1.0f)] float _playlistAudioVolume = 1.0f;
+ [SerializeField] bool _playlistAudioMuted = false;
+
+ public override float AudioVolume
+ {
+ get { return _playlistAudioVolume; }
+ set { _playlistAudioVolume = Mathf.Clamp01(value); if (!IsTransitioning() && CurrentPlayer != null) CurrentPlayer.AudioVolume = _playlistAudioVolume; }
+ }
+
+ public override bool AudioMuted
+ {
+ get { return _playlistAudioMuted; }
+ set { _playlistAudioMuted = value; if (!IsTransitioning() && CurrentPlayer != null) CurrentPlayer.AudioMuted = _playlistAudioMuted; }
+ }
+
+ public override void Play()
+ {
+ _isPaused = false;
+ if (Control != null)
+ {
+ Control.Play();
+ }
+ if (IsTransitioning())
+ {
+ if (!_pausePreviousOnTransition && NextPlayer.Control != null)
+ {
+ NextPlayer.Control.Play();
+ }
+ }
+ }
+
+ public override void Pause()
+ {
+ _isPaused = true;
+ if (Control != null)
+ {
+ Control.Pause();
+ }
+ if (IsTransitioning())
+ {
+ if (NextPlayer.Control != null)
+ {
+ NextPlayer.Control.Pause();
+ }
+ }
+ }
+
+ public bool IsPaused()
+ {
+ return _isPaused;
+ }
+
+ private void SwapPlayers()
+ {
+ // Pause the previously playing video
+ // This is useful for systems that will struggle to play 2 videos at once
+ if (_pausePreviousOnTransition)
+ {
+ CurrentPlayer.Pause();
+ }
+
+ // Tell listeners that the playlist item has changed
+ Events.Invoke(this, MediaPlayerEvent.EventType.PlaylistItemChanged, ErrorCode.None);
+
+ // Start the transition
+ if (_currentTransition != Transition.None)
+ {
+ // Create a new transition texture if required
+ Texture currentTexture = GetCurrentTexture();
+ Texture nextTexture = GetNextTexture();
+ if (currentTexture != null && nextTexture != null)
+ {
+ int maxWidth = Mathf.Max(nextTexture.width, currentTexture.width);
+ int maxHeight = Mathf.Max(nextTexture.height, currentTexture.height);
+ if (_rt != null)
+ {
+ if (_rt.width != maxWidth || _rt.height != maxHeight)
+ {
+ RenderTexture.ReleaseTemporary(_rt);
+ _rt = null;
+ }
+ }
+
+ if (_rt == null)
+ {
+ _rt = RenderTexture.GetTemporary(maxWidth, maxHeight, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Default, 1);
+ }
+ Graphics.Blit(currentTexture, _rt);
+
+ _material.SetTexture(PropFromTex.Id, currentTexture);
+
+ _easeFunc = Easing.GetFunction(_currentTransitionEasing);
+ _transitionTimer = 0f;
+ }
+ else
+ {
+ // Immediately complete the transition
+ _transitionTimer = _currentTransitionDuration;
+
+ // Immediately update the audio volume
+ NextPlayer.AudioVolume = this.AudioVolume;
+ CurrentPlayer.AudioVolume = 0f;
+
+ if (_autoCloseVideo)
+ {
+ CurrentPlayer.MediaPath.Path = string.Empty;
+ CurrentPlayer.CloseMedia();
+ }
+ }
+ }
+
+ // Swap the videos
+ if (NextPlayer == _playerA)
+ {
+ _nextPlayer = _playerB;
+ }
+ else
+ {
+ _nextPlayer = _playerA;
+ }
+
+ // Swap the items
+ _currentItem = _nextItem;
+ _nextItem = null;
+ }
+
+ private Texture GetCurrentTexture()
+ {
+ /*if (_currentItem != null && _currentItem.sourceType == MediaPlaylist.MediaItem.SourceType.Texture2D && _currentItem.texture != null)
+ {
+ return _currentItem.texture;
+ }
+ else*/ if (CurrentPlayer != null && CurrentPlayer.TextureProducer != null)
+ {
+ return CurrentPlayer.TextureProducer.GetTexture();
+ }
+ return null;
+ }
+
+ private Texture GetNextTexture()
+ {
+ /*if (_nextItem != null && _nextItem.sourceType == MediaPlaylist.MediaItem.SourceType.Texture2D && _nextItem.texture != null)
+ {
+ return _nextItem.texture;
+ }
+ else*/ if (_nextPlayer != null && _nextPlayer.TextureProducer != null)
+ {
+ return _nextPlayer.TextureProducer.GetTexture();
+ }
+ return null;
+ }
+
+ private void Awake()
+ {
+ #if UNITY_IOS && !UNITY_EDITOR_OSX
+ Application.targetFrameRate = 60;
+ #endif
+ _nextPlayer = _playerA;
+ if (_transitionShader == null)
+ {
+ _transitionShader = Shader.Find("AVProVideo/Internal/Transition");
+ if (_transitionShader == null)
+ {
+ Debug.LogError("[AVProVideo] Missing transition shader");
+ }
+ }
+ _material = new Material(_transitionShader);
+ _easeFunc = Easing.GetFunction(_defaultTransitionEasing);
+ }
+
+ protected override void OnDestroy()
+ {
+ if (_rt != null)
+ {
+ RenderTexture.ReleaseTemporary(_rt);
+ _rt = null;
+ }
+ if (_material != null)
+ {
+ if (Application.isPlaying)
+ {
+ Material.Destroy(_material);
+ }
+ else
+ {
+ Material.DestroyImmediate(_material);
+ }
+ _material = null;
+ }
+ base.OnDestroy();
+ }
+
+ private void Start()
+ {
+ if (Application.isPlaying)
+ {
+ if (CurrentPlayer)
+ {
+ CurrentPlayer.Events.AddListener(OnVideoEvent);
+
+ if (NextPlayer)
+ {
+ NextPlayer.Events.AddListener(OnVideoEvent);
+ }
+ }
+
+ JumpToItem(0);
+ }
+ }
+
+ public void OnVideoEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ if (mp == CurrentPlayer)
+ {
+ Events.Invoke(mp, et, errorCode);
+ }
+
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.FirstFrameReady:
+ if (mp == NextPlayer)
+ {
+ SwapPlayers();
+ Events.Invoke(mp, et, errorCode);
+ }
+ break;
+ case MediaPlayerEvent.EventType.FinishedPlaying:
+ if (_playlistAutoProgress && mp == CurrentPlayer && _currentItem.progressMode == ProgressMode.OnFinish)
+ {
+ NextItem();
+ }
+ break;
+ }
+ }
+
+ public bool PrevItem()
+ {
+ return JumpToItem(_playlistIndex - 1);
+ }
+
+ public bool NextItem()
+ {
+ bool result = JumpToItem(_playlistIndex + 1);
+ if (!result)
+ {
+ Events.Invoke(this, MediaPlayerEvent.EventType.PlaylistFinished, ErrorCode.None);
+ }
+ return result;
+ }
+
+ public bool CanJumpToItem(int index)
+ {
+ if (_playlistLoopMode == PlaylistLoopMode.Loop)
+ {
+ if (_playlist.Items.Count > 0)
+ {
+ index %= _playlist.Items.Count;
+ if (index < 0)
+ {
+ index += _playlist.Items.Count;
+ }
+ }
+ }
+ return _playlist.HasItemAt(index);
+ }
+
+ public bool JumpToItem(int index)
+ {
+ if (_playlistLoopMode == PlaylistLoopMode.Loop)
+ {
+ if (_playlist.Items.Count > 0)
+ {
+ index %= _playlist.Items.Count;
+ if (index < 0)
+ {
+ index += _playlist.Items.Count;
+ }
+ }
+ }
+ if (_playlist.HasItemAt(index))
+ {
+ _playlistIndex = index;
+ _nextItem = _playlist.Items[_playlistIndex];
+ OpenVideoFile(_nextItem);
+ return true;
+ }
+ return false;
+ }
+
+ public void OpenVideoFile(MediaPlaylist.MediaItem mediaItem)
+ {
+ bool isMediaAlreadyLoaded = false;
+ if (NextPlayer.MediaPath == mediaItem.mediaPath)
+ {
+ isMediaAlreadyLoaded = true;
+ }
+
+ if (!mediaItem.isOverrideTransition)
+ {
+ SetTransition(_defaultTransition, _defaultTransitionDuration, _defaultTransitionEasing);
+ }
+ else
+ {
+ SetTransition(mediaItem.overrideTransition, mediaItem.overrideTransitionDuration, mediaItem.overrideTransitionEasing);
+ }
+
+ this.Loop = NextPlayer.Loop = mediaItem.loop;
+ NextPlayer.MediaPath = new MediaPath(mediaItem.mediaPath);
+ this.MediaPath = new MediaPath(mediaItem.mediaPath);
+ NextPlayer.AudioMuted = _playlistAudioMuted;
+ NextPlayer.AudioVolume = _playlistAudioVolume;
+ if (_transitionTimer < _currentTransitionDuration && _currentTransition != Transition.None)
+ {
+ NextPlayer.AudioVolume = 0f;
+ }
+
+ if (isMediaAlreadyLoaded)
+ {
+ NextPlayer.Rewind(false);
+ if (_nextItem.startMode == StartMode.Immediate)
+ {
+ NextPlayer.Play();
+ }
+ // TODO: We probably want to wait until the new frame arrives before swapping after a Rewind()
+ SwapPlayers();
+ }
+ else
+ {
+ if (string.IsNullOrEmpty(NextPlayer.MediaPath.Path))
+ {
+ NextPlayer.CloseMedia();
+ }
+ else
+ {
+ NextPlayer.OpenMedia(NextPlayer.MediaPath.PathType, NextPlayer.MediaPath.Path, _nextItem.startMode == StartMode.Immediate);
+ }
+ }
+ }
+
+ private bool IsTransitioning()
+ {
+ if (_rt != null && _transitionTimer < _currentTransitionDuration && _currentTransition != Transition.None)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ private void SetTransition(Transition transition, float duration, Easing.Preset easing)
+ {
+ if (transition == Transition.Random)
+ {
+ transition = (Transition)Random.Range(0, (int)Transition.Random);
+ }
+
+ if (transition != _currentTransition)
+ {
+ // Disable the previous transition
+ if (!string.IsNullOrEmpty(_currentTransitionName))
+ {
+ _material.DisableKeyword(_currentTransitionName);
+ }
+
+ // Enable the next transition
+ _currentTransition = transition;
+ _currentTransitionName = GetTransitionName(transition);
+ _material.EnableKeyword(_currentTransitionName);
+ }
+
+ _currentTransitionDuration = duration;
+ _currentTransitionEasing = easing;
+ }
+
+ protected override void Update()
+ {
+ if (!Application.isPlaying) return;
+
+ if (!IsPaused())
+ {
+ if (IsTransitioning())
+ {
+ _transitionTimer += Time.deltaTime;
+ float t = _easeFunc(Mathf.Clamp01(_transitionTimer / _currentTransitionDuration));
+
+ // Fade the audio volume
+ NextPlayer.AudioVolume = (1f - t) * this.AudioVolume;
+ CurrentPlayer.AudioVolume = t * this.AudioVolume;
+
+ // TODO: support going from mono to stereo
+ // TODO: support videos of different aspect ratios by rendering with scaling to fit
+ // This can be done by blitting twice, once for each eye
+ // If the stereo mode is different for playera/b then both should be set to stereo during the transition
+ // if (CurrentPlayer.m_StereoPacking == StereoPacking.TopBottom)....
+ _material.SetFloat(PropFade.Id, t);
+ _rt.DiscardContents();
+ Graphics.Blit(GetCurrentTexture(), _rt, _material);
+
+ // After the transition is now complete, close/pause the previous video if required
+ bool isTransitioning = IsTransitioning();
+ if (!isTransitioning)
+ {
+ if (_autoCloseVideo)
+ {
+ if (NextPlayer != null)
+ {
+ NextPlayer.MediaPath.Path = string.Empty;
+ NextPlayer.CloseMedia();
+ }
+ }
+ else if (!_pausePreviousOnTransition)
+ {
+ if (NextPlayer != null && NextPlayer.Control.IsPlaying())
+ {
+ NextPlayer.Pause();
+ }
+ }
+ }
+ }
+ else
+ {
+ if (_playlistAutoProgress && _nextItem == null && _currentItem != null && _currentItem.progressMode == ProgressMode.BeforeFinish && Control != null && Control.HasMetaData() && Control.GetCurrentTime() >= (Info.GetDuration() - (_currentItem.progressTimeSeconds)))
+ {
+ this.NextItem();
+ }
+ else if (_playlistAutoProgress && _currentItem == null)
+ {
+ JumpToItem(_playlistIndex);
+ }
+ }
+ }
+
+ base.Update();
+ }
+
+#region Implementing ITextureProducer
+ public Texture GetTexture(int index = 0)
+ {
+ // TODO: support iOS YCbCr by supporting multiple textures
+ /*if (!IsTransitioning())
+ {
+ if (_currentItem != null && _currentItem.sourceType == MediaPlaylist.MediaItem.SourceType.Texture2D && _currentItem.texture != null)
+ {
+ return _currentItem.texture;
+ }
+ }*/
+ return _rt;
+ }
+
+ public int GetTextureCount()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureCount();
+ }
+
+ public int GetTextureFrameCount()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureFrameCount();
+ }
+
+ public bool SupportsTextureFrameCount()
+ {
+ return CurrentPlayer.TextureProducer.SupportsTextureFrameCount();
+ }
+
+ public long GetTextureTimeStamp()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureTimeStamp();
+ }
+
+ public float GetTexturePixelAspectRatio()
+ {
+ return CurrentPlayer.TextureProducer.GetTexturePixelAspectRatio();
+ }
+
+ public bool RequiresVerticalFlip()
+ {
+ return CurrentPlayer.TextureProducer.RequiresVerticalFlip();
+ }
+
+ public Matrix4x4 GetYpCbCrTransform()
+ {
+ return CurrentPlayer.TextureProducer.GetYpCbCrTransform();
+ }
+
+ public StereoPacking GetTextureStereoPacking()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureStereoPacking();
+ }
+
+ public TransparencyMode GetTextureTransparency()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureTransparency();
+ }
+
+ public AlphaPacking GetTextureAlphaPacking()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureAlphaPacking();
+ }
+
+ public float[] GetAffineTransform()
+ {
+ return CurrentPlayer.TextureProducer.GetAffineTransform();
+ }
+
+ public Matrix4x4 GetTextureMatrix()
+ {
+ return CurrentPlayer.TextureProducer.GetTextureMatrix();
+ }
+
+#endregion Implementing ITextureProducer
+
+ private static string GetTransitionName(Transition transition)
+ {
+ switch (transition)
+ {
+ case Transition.None: return "LERP_NONE";
+ case Transition.Fade: return "LERP_FADE";
+ case Transition.Black: return "LERP_BLACK";
+ case Transition.White: return "LERP_WHITE";
+ case Transition.Transparent:return "LERP_TRANSP";
+ case Transition.Horiz: return "LERP_HORIZ";
+ case Transition.Vert: return "LERP_VERT";
+ case Transition.Diag: return "LERP_DIAG";
+ case Transition.MirrorH: return "LERP_HORIZ_MIRROR";
+ case Transition.MirrorV: return "LERP_VERT_MIRROR";
+ case Transition.MirrorD: return "LERP_DIAG_MIRROR";
+ case Transition.ScrollV: return "LERP_SCROLL_VERT";
+ case Transition.ScrollH: return "LERP_SCROLL_HORIZ";
+ case Transition.Circle: return "LERP_CIRCLE";
+ case Transition.Diamond: return "LERP_DIAMOND";
+ case Transition.Blinds: return "LERP_BLINDS";
+ case Transition.Arrows: return "LERP_ARROW";
+ case Transition.SlideH: return "LERP_SLIDE_HORIZ";
+ case Transition.SlideV: return "LERP_SLIDE_VERT";
+ case Transition.Zoom: return "LERP_ZOOM_FADE";
+ case Transition.RectV: return "LERP_RECTS_VERT";
+ }
+ return string.Empty;
+ }
+
+#region Easing
+
+ ///
+ /// Easing functions
+ ///
+ [System.Serializable]
+ public class Easing
+ {
+ public Preset preset = Preset.Linear;
+
+ public enum Preset
+ {
+ Step,
+ Linear,
+ InQuad,
+ OutQuad,
+ InOutQuad,
+ InCubic,
+ OutCubic,
+ InOutCubic,
+ InQuint,
+ OutQuint,
+ InOutQuint,
+ InQuart,
+ OutQuart,
+ InOutQuart,
+ InExpo,
+ OutExpo,
+ InOutExpo,
+ Random,
+ RandomNotStep,
+ }
+
+ public static System.Func GetFunction(Preset preset)
+ {
+ System.Func result = null;
+ switch (preset)
+ {
+ case Preset.Step:
+ result = Step;
+ break;
+ case Preset.Linear:
+ result = Linear;
+ break;
+ case Preset.InQuad:
+ result = InQuad;
+ break;
+ case Preset.OutQuad:
+ result = OutQuad;
+ break;
+ case Preset.InOutQuad:
+ result = InOutQuad;
+ break;
+ case Preset.InCubic:
+ result = InCubic;
+ break;
+ case Preset.OutCubic:
+ result = OutCubic;
+ break;
+ case Preset.InOutCubic:
+ result = InOutCubic;
+ break;
+ case Preset.InQuint:
+ result = InQuint;
+ break;
+ case Preset.OutQuint:
+ result = OutQuint;
+ break;
+ case Preset.InOutQuint:
+ result = InOutQuint;
+ break;
+ case Preset.InQuart:
+ result = InQuart;
+ break;
+ case Preset.OutQuart:
+ result = OutQuart;
+ break;
+ case Preset.InOutQuart:
+ result = InOutQuart;
+ break;
+ case Preset.InExpo:
+ result = InExpo;
+ break;
+ case Preset.OutExpo:
+ result = OutExpo;
+ break;
+ case Preset.InOutExpo:
+ result = InOutExpo;
+ break;
+ case Preset.Random:
+ result = GetFunction((Preset)Random.Range(0, (int)Preset.Random));
+ break;
+ case Preset.RandomNotStep:
+ result = GetFunction((Preset)Random.Range((int)Preset.Step+1, (int)Preset.Random));
+ break;
+ }
+ return result;
+ }
+
+ public static float PowerEaseIn(float t, float power)
+ {
+ return Mathf.Pow(t, power);
+ }
+
+ public static float PowerEaseOut(float t, float power)
+ {
+ return 1f - Mathf.Abs(Mathf.Pow(t - 1f, power));
+ }
+
+ public static float PowerEaseInOut(float t, float power)
+ {
+ float result;
+ if (t < 0.5f)
+ {
+ result = PowerEaseIn(t * 2f, power) / 2f;
+ }
+ else
+ {
+ result = PowerEaseOut(t * 2f - 1f, power) / 2f + 0.5f;
+ }
+ return result;
+ }
+
+ public static float Step(float t)
+ {
+ float result = 0f;
+ if (t >= 0.5f)
+ {
+ result = 1f;
+ }
+ return result;
+ }
+
+ public static float Linear(float t)
+ {
+ return t;
+ }
+
+ public static float InQuad(float t)
+ {
+ return PowerEaseIn(t, 2f);
+ }
+
+ public static float OutQuad(float t)
+ {
+ return PowerEaseOut(t, 2f);
+ //return t * (2f - t);
+ }
+
+ public static float InOutQuad(float t)
+ {
+ return PowerEaseInOut(t, 2f);
+ //return t < 0.5 ? (2f * t * t) : (-1f + (4f - 2f * t) * t);
+ }
+
+ public static float InCubic(float t)
+ {
+ return PowerEaseIn(t, 3f);
+ //return t * t * t;
+ }
+
+ public static float OutCubic(float t)
+ {
+ return PowerEaseOut(t, 3f);
+ //return (--t) * t * t + 1f;
+ }
+
+ public static float InOutCubic(float t)
+ {
+ return PowerEaseInOut(t, 3f);
+ //return t < .5f ? (4f * t * t * t) : ((t - 1f) * (2f * t - 2f) * (2f * t - 2f) + 1f);
+ }
+
+ public static float InQuart(float t)
+ {
+ return PowerEaseIn(t, 4f);
+ //return t * t * t * t;
+ }
+
+ public static float OutQuart(float t)
+ {
+ return PowerEaseOut(t, 4f);
+ //return 1f - (--t) * t * t * t;
+ }
+
+ public static float InOutQuart(float t)
+ {
+ return PowerEaseInOut(t, 4f);
+ //return t < 0.5f ? (8f * t * t * t * t) : (1f - 8f * (--t) * t * t * t);
+ }
+
+ public static float InQuint(float t)
+ {
+ return PowerEaseIn(t, 5f);
+ //return t * t * t * t * t;
+ }
+
+ public static float OutQuint(float t)
+ {
+ return PowerEaseOut(t, 5f);
+ //return 1f + (--t) * t * t * t * t;
+ }
+
+ public static float InOutQuint(float t)
+ {
+ return PowerEaseInOut(t, 5f);
+ //return t < 0.5f ? (16f * t * t * t * t * t) : (1f + 16f * (--t) * t * t * t * t);
+ }
+
+ public static float InExpo(float t)
+ {
+ float result = 0f;
+ if (t != 0f)
+ {
+ result = Mathf.Pow(2f, 10f * (t - 1f));
+ }
+ return result;
+ }
+
+ public static float OutExpo(float t)
+ {
+ float result = 1f;
+ if (t != 1f)
+ {
+ result = -Mathf.Pow(2f, -10f * t) + 1f;
+ }
+ return result;
+ }
+
+ public static float InOutExpo(float t)
+ {
+ float result = 0f;
+ if (t > 0f)
+ {
+ result = 1f;
+ if (t < 1f)
+ {
+ t *= 2f;
+ if (t < 1f)
+ {
+ result = 0.5f * Mathf.Pow(2f, 10f * (t - 1f));
+ }
+ else
+ {
+ t--;
+ result = 0.5f * (-Mathf.Pow(2f, -10f * t) + 2f);
+ }
+ }
+ }
+ return result;
+ }
+ }
+#endregion Easing
+
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/PlaylistMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/PlaylistMediaPlayer.cs.meta
new file mode 100755
index 0000000..db067bf
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/PlaylistMediaPlayer.cs.meta
@@ -0,0 +1,17 @@
+fileFormatVersion: 2
+guid: e9ea31f33222f4b418e4e051a8a5ed24
+timeCreated: 1588679963
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences:
+ - m_AudioHeadTransform: {instanceID: 0}
+ - m_AudioFocusTransform: {instanceID: 0}
+ - _transitionShader: {fileID: 4800000, guid: 73f378cafe7b4a745907b70e76bb3259, type: 3}
+ - _playerA: {instanceID: 0}
+ - _playerB: {instanceID: 0}
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ResolveToRenderTexture.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ResolveToRenderTexture.cs
new file mode 100755
index 0000000..fd4d20f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ResolveToRenderTexture.cs
@@ -0,0 +1,234 @@
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2019-2023 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ /// Renders the video texture to a RenderTexture - either one provided by the user (external) or to an internal one.
+ /// The video frames can optionally be "resolved" to unpack packed alpha, display a single stereo eye, generate mip maps, and apply colorspace conversions
+ [AddComponentMenu("AVPro Video/Resolve To RenderTexture", 330)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public class ResolveToRenderTexture : MonoBehaviour
+ {
+ [SerializeField] MediaPlayer _mediaPlayer = null;
+ [SerializeField] VideoResolveOptions _options = VideoResolveOptions.Create();
+ [SerializeField] VideoRender.ResolveFlags _resolveFlags = (VideoRender.ResolveFlags.ColorspaceSRGB | VideoRender.ResolveFlags.Mipmaps | VideoRender.ResolveFlags.PackedAlpha | VideoRender.ResolveFlags.StereoLeft);
+ [SerializeField] RenderTexture _externalTexture = null;
+
+ private Material _materialResolve;
+ private bool _isMaterialSetup;
+ private bool _isMaterialDirty;
+ private bool _isMaterialOES;
+ private RenderTexture _internalTexture;
+ private int _textureFrameCount = -1;
+
+ // Material used for blitting the texture as we need a shader to provide clamp to border colour style texture sampling
+ private Material _materialBlit;
+ private int _srcTexId;
+
+ public MediaPlayer MediaPlayer
+ {
+ get
+ {
+ return _mediaPlayer;
+ }
+ set
+ {
+ ChangeMediaPlayer(value);
+ }
+ }
+
+ public VideoResolveOptions VideoResolveOptions
+ {
+ get
+ {
+ return _options;
+ }
+ set
+ {
+ _options = value;
+ _isMaterialDirty = true;
+ }
+ }
+
+ public RenderTexture ExternalTexture
+ {
+ get
+ {
+ return _externalTexture;
+ }
+ set
+ {
+ _externalTexture = value;
+ }
+ }
+
+ public RenderTexture TargetTexture
+ {
+ get
+ {
+ if (_externalTexture == null)
+ return _internalTexture;
+ return _externalTexture;
+ }
+ }
+
+ public void SetMaterialDirty()
+ {
+ _isMaterialDirty = true;
+ }
+
+ private void ChangeMediaPlayer(MediaPlayer mediaPlayer)
+ {
+ if (_mediaPlayer != mediaPlayer)
+ {
+ _mediaPlayer = mediaPlayer;
+ _textureFrameCount = -1;
+ _isMaterialSetup = false;
+ _isMaterialDirty = true;
+ Resolve();
+ }
+ }
+
+ void Start()
+ {
+ _isMaterialOES = _mediaPlayer != null ? _mediaPlayer.IsUsingAndroidOESPath() : false;
+ _materialResolve = VideoRender.CreateResolveMaterial(_isMaterialOES);
+ VideoRender.SetupMaterialForMedia(_materialResolve, _mediaPlayer, -1);
+
+ _materialBlit = new Material(Shader.Find("AVProVideo/Internal/Blit"));
+ _srcTexId = Shader.PropertyToID("_SrcTex");
+ }
+
+ void LateUpdate()
+ {
+ Debug.Assert(_mediaPlayer != null);
+ Resolve();
+ }
+
+ public void Resolve()
+ {
+ ITextureProducer textureProducer = _mediaPlayer != null ? _mediaPlayer.TextureProducer : null;
+ if (textureProducer == null)
+ return;
+
+ if (textureProducer.GetTexture())
+ {
+ // Check for a swap between OES and none-OES
+ bool playerIsOES = _mediaPlayer.IsUsingAndroidOESPath();
+ if (_isMaterialOES != playerIsOES)
+ {
+ _isMaterialOES = playerIsOES;
+ _materialResolve = VideoRender.CreateResolveMaterial(playerIsOES);
+ }
+
+ if (!_isMaterialSetup)
+ {
+ VideoRender.SetupMaterialForMedia(_materialResolve, _mediaPlayer, -1);
+ _isMaterialSetup = true;
+ _isMaterialDirty = true;
+ }
+
+ if (_isMaterialDirty)
+ {
+ VideoRender.SetupResolveMaterial(_materialResolve, _options);
+ _isMaterialDirty = false;
+ }
+
+ int textureFrameCount = textureProducer.GetTextureFrameCount();
+ if (textureFrameCount != _textureFrameCount)
+ {
+ _internalTexture = VideoRender.ResolveVideoToRenderTexture(_materialResolve, _internalTexture, textureProducer, _resolveFlags);
+ _textureFrameCount = textureFrameCount;
+
+ if (_internalTexture && _externalTexture)
+ {
+ float srcAspectRatio = (float)_internalTexture.width / (float)_internalTexture.height;
+ float dstAspectRatio = (float)_externalTexture.width / (float)_externalTexture.height;
+
+ Vector2 offset = Vector2.zero;
+ Vector2 scale = new Vector2(1.0f, 1.0f);
+
+ // No point in handling the aspect ratio if the textures dimension's are the same
+ if (srcAspectRatio != dstAspectRatio)
+ {
+ switch (_options.aspectRatio)
+ {
+ case VideoResolveOptions.AspectRatio.NoScaling:
+ scale.x = (float)_externalTexture.width / (float)_internalTexture.width;
+ scale.y = (float)_externalTexture.height / (float)_internalTexture.height;
+ offset.x = (1.0f - scale.x) * 0.5f;
+ offset.y = (1.0f - scale.y) * 0.5f;
+ break;
+
+ case VideoResolveOptions.AspectRatio.FitVertically:
+ scale.x = (float)_internalTexture.height / (float)_internalTexture.width * dstAspectRatio;
+ offset.x = (1.0f - scale.x) * 0.5f;
+ break;
+
+ case VideoResolveOptions.AspectRatio.FitHorizontally:
+ scale.y = (float)_externalTexture.height / (float)_externalTexture.width * srcAspectRatio;
+ offset.y = (1.0f - scale.y) * 0.5f;
+ break;
+
+ case VideoResolveOptions.AspectRatio.FitInside:
+ {
+ if (srcAspectRatio > dstAspectRatio)
+ goto case VideoResolveOptions.AspectRatio.FitHorizontally;
+ else if (srcAspectRatio < dstAspectRatio)
+ goto case VideoResolveOptions.AspectRatio.FitVertically;
+ } break;
+
+ case VideoResolveOptions.AspectRatio.FitOutside:
+ {
+ if (srcAspectRatio > dstAspectRatio)
+ goto case VideoResolveOptions.AspectRatio.FitVertically;
+ else if (srcAspectRatio < dstAspectRatio)
+ goto case VideoResolveOptions.AspectRatio.FitHorizontally;
+ } break;
+
+ case VideoResolveOptions.AspectRatio.Stretch:
+ break;
+ }
+ }
+
+ // NOTE: This blit can be removed once we can ResolveVideoToRenderTexture is made not to recreate textures
+ // NOTE: This blit probably doesn't do correct linear/srgb conversion if the colorspace settings differ, may have to use GL.sRGBWrite
+ // NOTE: Cannot use _MainTex as Graphics.Blit replaces the texture offset and scale when using a material
+ _materialBlit.SetTexture(_srcTexId, _internalTexture);
+ _materialBlit.SetTextureOffset(_srcTexId, offset);
+ _materialBlit.SetTextureScale(_srcTexId, scale);
+ Graphics.Blit(null, _externalTexture, _materialBlit, 0);
+ }
+ }
+ }
+ }
+
+ void OnDisable()
+ {
+ if (_internalTexture)
+ {
+ RenderTexture.ReleaseTemporary(_internalTexture); _internalTexture = null;
+ }
+ }
+
+ void OnDestroy()
+ {
+ if (_materialResolve)
+ {
+ Destroy(_materialResolve); _materialResolve = null;
+ }
+ }
+#if false
+ void OnGUI()
+ {
+ if (TargetTexture)
+ {
+ GUI.DrawTexture(new Rect(0f, 0f, Screen.width * 0.8f, Screen.height * 0.8f), TargetTexture, ScaleMode.ScaleToFit, true);
+ }
+ }
+#endif
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ResolveToRenderTexture.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ResolveToRenderTexture.cs.meta
new file mode 100755
index 0000000..3207218
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/ResolveToRenderTexture.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 448e5e4039505584c852da1a7cc5c361
+timeCreated: 1654790987
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/UpdateMultiPassStereo.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/UpdateMultiPassStereo.cs
new file mode 100755
index 0000000..893db42
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/UpdateMultiPassStereo.cs
@@ -0,0 +1,178 @@
+#if UNITY_ANDROID
+ #if USING_URP
+ #define ANDROID_URP
+ #endif
+#endif
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// This script is needed to send the camera position to the stereo shader so that
+ /// it can determine which eye it is rendering. This is only needed for multi-pass
+ /// rendering, as single pass has a built-in shader variable
+ ///
+ [AddComponentMenu("AVPro Video/Update Multi-Pass Stereo", 320)]
+ [HelpURL("https://www.renderheads.com/products/avpro-video/")]
+ public class UpdateMultiPassStereo : MonoBehaviour
+ {
+ [Header("Stereo camera")]
+ [SerializeField] Camera _camera = null;
+
+ public Camera Camera
+ {
+ get { return _camera; }
+ set { _camera = value; }
+ }
+
+ private static readonly LazyShaderProperty PropWorldCameraPosition = new LazyShaderProperty("_WorldCameraPosition");
+ private static readonly LazyShaderProperty PropWorldCameraRight = new LazyShaderProperty("_WorldCameraRight");
+
+ // State
+
+ private Camera _foundCamera;
+
+ void Awake()
+ {
+ if (_camera == null)
+ {
+ Debug.LogWarning("[AVProVideo] No camera set for UpdateMultiPassStereo component. If you are rendering in multi-pass stereo then it is recommended to set this.");
+ }
+ }
+
+ void Start()
+ {
+ LogXRDeviceDetails();
+
+ #if ANDROID_URP
+ if( GetComponent() == null )
+ {
+ throw new MissingComponentException("[AVProVideo] When using URP the UpdateMultiPassStereo component must be on the Camera gameobject. This component is not required on all VR devices, but if it is then stereo eye rendering may not work correctly.");
+ }
+ #endif
+ }
+
+ private void LogXRDeviceDetails()
+ {
+#if UNITY_2019_1_OR_NEWER && !UNITY_TVOS
+ string logOutput = "[AVProVideo] XR Device details: UnityEngine.XR.XRSettings.loadedDeviceName = " + UnityEngine.XR.XRSettings.loadedDeviceName + " | supportedDevices = ";
+
+ string[] aSupportedDevices = UnityEngine.XR.XRSettings.supportedDevices;
+ int supportedDeviceCount = aSupportedDevices.Length;
+ for (int i = 0; i < supportedDeviceCount; i++)
+ {
+ logOutput += aSupportedDevices[i];
+ if( i < (supportedDeviceCount - 1 ))
+ {
+ logOutput += ", ";
+ }
+ }
+
+ List inputDevices = new List();
+ UnityEngine.XR.InputDevices.GetDevices(inputDevices);
+ int deviceCount = inputDevices.Count;
+ if (deviceCount > 0)
+ {
+ logOutput += " | XR Devices = ";
+
+ for (int i = 0; i < deviceCount; i++)
+ {
+ logOutput += inputDevices[i].name;
+ if( i < (deviceCount -1 ))
+ {
+ logOutput += ", ";
+ }
+ }
+ }
+
+ UnityEngine.XR.InputDevice headDevice = UnityEngine.XR.InputDevices.GetDeviceAtXRNode(UnityEngine.XR.XRNode.Head);
+ if( headDevice != null )
+ {
+ logOutput += " | headDevice name = " + headDevice.name + ", manufacturer = " + headDevice.manufacturer;
+ }
+
+ Debug.Log(logOutput);
+#endif
+ }
+
+
+#if ANDROID_URP
+ void OnEnable()
+ {
+ RenderPipelineManager.beginCameraRendering += RenderPipelineManager_beginCameraRendering;
+ }
+ void OnDisable()
+ {
+ RenderPipelineManager.beginCameraRendering -= RenderPipelineManager_beginCameraRendering;
+ }
+#endif
+
+ private static bool IsMultiPassVrEnabled()
+ {
+ #if UNITY_TVOS
+ return false;
+ #else
+ #if UNITY_2017_2_OR_NEWER
+ if (!UnityEngine.XR.XRSettings.enabled) return false;
+ #endif
+ #if UNITY_2018_3_OR_NEWER
+ if (UnityEngine.XR.XRSettings.stereoRenderingMode != UnityEngine.XR.XRSettings.StereoRenderingMode.MultiPass) return false;
+ #endif
+ return true;
+ #endif
+ }
+
+
+ // We do a LateUpdate() to allow for any changes in the camera position that may have happened in Update()
+#if ANDROID_URP
+ // Android URP
+ private void RenderPipelineManager_beginCameraRendering(ScriptableRenderContext context, Camera camera)
+#else
+ // Normal render pipeline
+ private void LateUpdate()
+#endif
+ {
+ if (!IsMultiPassVrEnabled())
+ {
+ return;
+ }
+
+ if (_camera != null && _foundCamera != _camera)
+ {
+ _foundCamera = _camera;
+ }
+ if (_foundCamera == null)
+ {
+ _foundCamera = Camera.main;
+ if (_foundCamera == null)
+ {
+ Debug.LogWarning("[AVProVideo] Cannot find main camera for UpdateMultiPassStereo, this can lead to eyes flickering");
+ if (Camera.allCameras.Length > 0)
+ {
+ _foundCamera = Camera.allCameras[0];
+ Debug.LogWarning("[AVProVideo] UpdateMultiPassStereo using camera " + _foundCamera.name);
+ }
+ }
+ }
+
+ if (_foundCamera != null)
+ {
+ #if ANDROID_URP
+ Shader.EnableKeyword("USING_URP");
+ #else
+ Shader.DisableKeyword("USING_URP");
+ #endif
+
+ Shader.SetGlobalVector(PropWorldCameraPosition.Id, _foundCamera.transform.position);
+ Shader.SetGlobalVector(PropWorldCameraRight.Id, _foundCamera.transform.right);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/UpdateMultiPassStereo.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/UpdateMultiPassStereo.cs.meta
new file mode 100755
index 0000000..0577c69
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Components/UpdateMultiPassStereo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8b2366b5575fcba46a0f97038fb6c5fb
+timeCreated: 1611065944
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: bb83b41b53a59874692b83eab5873998, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal.meta
new file mode 100755
index 0000000..eb1444d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 1bb8f28c4529a1343b4430d732bb5f2a
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs
new file mode 100755
index 0000000..bd2a8fb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs
@@ -0,0 +1,124 @@
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS
+ #define UNITY_PLATFORM_SUPPORTS_YPCBCR
+#endif
+
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Base class to apply texture from MediaPlayer
+ ///
+ public abstract class ApplyToBase : MonoBehaviour
+ {
+ [Header("Media Source")]
+ [Space(8f)]
+
+ [SerializeField] protected MediaPlayer _media = null;
+
+ public MediaPlayer Player
+ {
+ get { return _media; }
+ set { ChangeMediaPlayer(value); }
+ }
+
+ [Space(8f)]
+ [Header("Display")]
+
+ [SerializeField] bool _automaticStereoPacking = true;
+ public bool AutomaticStereoPacking
+ {
+ get { return _automaticStereoPacking; }
+ set { if (_automaticStereoPacking != value) { _automaticStereoPacking = value; _isDirty = true; } }
+ }
+
+ [SerializeField] StereoPacking _overrideStereoPacking = StereoPacking.None;
+ public StereoPacking OverrideStereoPacking
+ {
+ get { return _overrideStereoPacking; }
+ set { if (_overrideStereoPacking != value) { _overrideStereoPacking = value; _isDirty = true; } }
+ }
+
+ [SerializeField] bool _stereoRedGreenTint = false;
+ public bool StereoRedGreenTint { get { return _stereoRedGreenTint; } set { if (_stereoRedGreenTint != value) { _stereoRedGreenTint = value; _isDirty = true; } } }
+
+ protected bool _isDirty = false;
+
+ void Awake()
+ {
+ ChangeMediaPlayer(_media, force:true);
+ }
+
+ private void ChangeMediaPlayer(MediaPlayer player, bool force = false)
+ {
+ if (_media != player || force)
+ {
+ if (_media != null)
+ {
+ _media.Events.RemoveListener(OnMediaPlayerEvent);
+ }
+ _media = player;
+ if (_media != null)
+ {
+ _media.Events.AddListener(OnMediaPlayerEvent);
+ }
+ _isDirty = true;
+ }
+ }
+
+ // Callback function to handle events
+ private void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.FirstFrameReady:
+ case MediaPlayerEvent.EventType.PropertiesChanged:
+ ForceUpdate();
+ break;
+ }
+ }
+
+ public void ForceUpdate()
+ {
+ _isDirty = true;
+ if (this.isActiveAndEnabled)
+ {
+ Apply();
+ }
+ }
+
+ private void Start()
+ {
+ SaveProperties();
+ Apply();
+ }
+
+ protected virtual void OnEnable()
+ {
+ SaveProperties();
+ ForceUpdate();
+ }
+
+ protected virtual void OnDisable()
+ {
+ RestoreProperties();
+ }
+
+ private void OnDestroy()
+ {
+ ChangeMediaPlayer(null);
+ }
+
+ protected virtual void SaveProperties()
+ {
+ }
+
+ protected virtual void RestoreProperties()
+ {
+ }
+
+ public abstract void Apply();
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs.meta
new file mode 100755
index 0000000..4bdb15d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 33aa9dfec55e1f6438ee868d02dcabe2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/AudioOutputManager.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/AudioOutputManager.cs
new file mode 100755
index 0000000..da9255c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/AudioOutputManager.cs
@@ -0,0 +1,215 @@
+//-----------------------------------------------------------------------------
+// Copyright 2015-2023 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// A singleton to handle multiple instances of the AudioOutput component
+ ///
+ public class AudioOutputManager
+ {
+ private static AudioOutputManager _instance = null;
+
+ public static AudioOutputManager Instance
+ {
+ get
+ {
+ if (_instance == null)
+ {
+ _instance = new AudioOutputManager();
+ }
+ return _instance;
+ }
+ }
+
+ protected class PlayerInstance
+ {
+ public HashSet outputs;
+ public float[] pcmData;
+ public bool isPcmDataReady;
+ }
+
+ private Dictionary _instances;
+
+ private AudioOutputManager()
+ {
+ _instances = new Dictionary();
+ }
+
+ public void RequestAudio(AudioOutput outputComponent, MediaPlayer mediaPlayer, float[] audioData, int audioChannelCount, int channelMask, AudioOutput.AudioOutputMode audioOutputMode, bool supportPositionalAudio)
+ {
+ if (mediaPlayer == null || mediaPlayer.Control == null)
+ {
+ if (supportPositionalAudio)
+ {
+ ZeroAudio(audioData, 0);
+ }
+ return;
+ }
+
+ int channels = mediaPlayer.Control.GetAudioChannelCount();
+ if (channels <= 0)
+ {
+ if (supportPositionalAudio)
+ {
+ ZeroAudio(audioData, 0);
+ }
+ return;
+ }
+
+ // total samples requested should be multiple of channels
+ Debug.Assert(audioData.Length % audioChannelCount == 0);
+
+ // Find or create an instance
+ PlayerInstance instance = null;
+ if (!_instances.TryGetValue(mediaPlayer, out instance))
+ {
+ instance = _instances[mediaPlayer] = new PlayerInstance()
+ {
+ outputs = new HashSet(),
+ pcmData = null
+ };
+ }
+
+ // requests data if it hasn't been requested yet for the current cycle
+ if (instance.outputs.Count == 0 || instance.outputs.Contains(outputComponent) || instance.pcmData == null)
+ {
+ instance.outputs.Clear();
+
+ int actualDataRequired = (audioData.Length * channels) / audioChannelCount;
+ if (instance.pcmData == null || actualDataRequired != instance.pcmData.Length)
+ {
+ instance.pcmData = new float[actualDataRequired];
+ }
+
+ instance.isPcmDataReady = GrabAudio(mediaPlayer, instance.pcmData, channels);
+
+ instance.outputs.Add(outputComponent);
+ }
+
+ if (instance.isPcmDataReady)
+ {
+ // calculate how many samples and what channels are needed and then copy over the data
+ int samples = Math.Min(audioData.Length / audioChannelCount, instance.pcmData.Length / channels);
+ int storedPos = 0;
+ int requestedPos = 0;
+
+ // multiple mode, copies over audio from desired channels into the same channels on the audiosource
+ if (audioOutputMode == AudioOutput.AudioOutputMode.MultipleChannels)
+ {
+ int lesserChannels = Math.Min(channels, audioChannelCount);
+
+ if (!supportPositionalAudio)
+ {
+ for (int i = 0; i < samples; ++i)
+ {
+ for (int j = 0; j < lesserChannels; ++j)
+ {
+ if ((1 << j & channelMask) > 0)
+ {
+ audioData[requestedPos + j] = instance.pcmData[storedPos + j];
+ }
+ }
+
+ storedPos += channels;
+ requestedPos += audioChannelCount;
+ }
+ }
+ else
+ {
+ for (int i = 0; i < samples; ++i)
+ {
+ for (int j = 0; j < lesserChannels; ++j)
+ {
+ if ((1 << j & channelMask) > 0)
+ {
+ audioData[requestedPos + j] *= instance.pcmData[storedPos + j];
+ }
+ }
+
+ storedPos += channels;
+ requestedPos += audioChannelCount;
+ }
+ }
+ }
+ //Mono mode, copies over single channel to all output channels
+ else if (audioOutputMode == AudioOutput.AudioOutputMode.OneToAllChannels)
+ {
+ int desiredChannel = 0;
+
+ for (int i = 0; i < 8; ++i)
+ {
+ if ((channelMask & (1 << i)) > 0)
+ {
+ desiredChannel = i;
+ break;
+ }
+ }
+
+ if (desiredChannel < channels)
+ {
+ if (!supportPositionalAudio)
+ {
+ for (int i = 0; i < samples; ++i)
+ {
+ for (int j = 0; j < audioChannelCount; ++j)
+ {
+ audioData[requestedPos + j] = instance.pcmData[storedPos + desiredChannel];
+ }
+
+ storedPos += channels;
+ requestedPos += audioChannelCount;
+ }
+ }
+ else
+ {
+ for (int i = 0; i < samples; ++i)
+ {
+ for (int j = 0; j < audioChannelCount; ++j)
+ {
+ audioData[requestedPos + j] *= instance.pcmData[storedPos + desiredChannel];
+ }
+
+ storedPos += channels;
+ requestedPos += audioChannelCount;
+ }
+ }
+ }
+ }
+
+ // If there is left over audio
+ if (supportPositionalAudio && requestedPos != audioData.Length)
+ {
+ // Zero the remaining audio data otherwise there are pops
+ ZeroAudio(audioData, requestedPos);
+ }
+ }
+ else
+ {
+ if (supportPositionalAudio)
+ {
+ // Zero the remaining audio data otherwise there are pops
+ ZeroAudio(audioData, 0);
+ }
+ }
+ }
+
+ private void ZeroAudio(float[] audioData, int startPosition)
+ {
+ for (int i = startPosition; i < audioData.Length; i++)
+ {
+ audioData[i] = 0f;
+ }
+ }
+
+ private bool GrabAudio(MediaPlayer player, float[] audioData, int channelCount)
+ {
+ return (0 != player.Control.GrabAudio(audioData, audioData.Length, channelCount));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/AudioOutputManager.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/AudioOutputManager.cs.meta
new file mode 100755
index 0000000..80de031
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/AudioOutputManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 714026a371bd2d64c86edb3dab5607d9
+timeCreated: 1495699104
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/BaseMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/BaseMediaPlayer.cs
new file mode 100755
index 0000000..1f8efc8
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/BaseMediaPlayer.cs
@@ -0,0 +1,669 @@
+#if UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_WSA_10_0 || UNITY_IOS || UNITY_ANDROID
+ #define UNITY_PLATFORM_SUPPORTS_LINEAR
+#endif
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Base class for all platform specific MediaPlayers
+ ///
+ public abstract partial class BaseMediaPlayer : IMediaPlayer, IMediaControl, IMediaInfo, IMediaCache, ITextureProducer, IMediaSubtitles, IVideoTracks, IAudioTracks, ITextTracks, IBufferedDisplay, System.IDisposable
+ {
+ public BaseMediaPlayer()
+ {
+ InitTracks();
+ }
+
+ public abstract string GetVersion();
+ public abstract string GetExpectedVersion();
+
+ ///
+ public abstract bool OpenMedia(string path, long offset, string customHttpHeaders, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false);
+
+#if NETFX_CORE
+ ///
+ public virtual bool OpenMedia(Windows.Storage.Streams.IRandomAccessStream ras, string path, long offset, string customHttpHeaders) { return false; }
+#endif
+
+ ///
+ public virtual bool OpenMediaFromBuffer(byte[] buffer) { return false; }
+ ///
+ public virtual bool StartOpenMediaFromBuffer(ulong length) { return false; }
+ ///
+ public virtual bool AddChunkToMediaBuffer(byte[] chunk, ulong offset, ulong length) { return false; }
+ ///
+ public virtual bool EndOpenMediaFromBuffer() { return false; }
+
+ ///
+ public virtual void CloseMedia()
+ {
+ #if UNITY_EDITOR
+ _displayRateLastRealTime = 0f;
+ #endif
+ _displayRateTimer = 0f;
+ _displayRateLastFrameCount = 0;
+ _displayRate = 0f;
+
+ _stallDetectionTimer = 0f;
+ _stallDetectionFrame = 0;
+ _lastError = ErrorCode.None;
+
+ _textTracks.Clear();
+ _audioTracks.Clear();
+ _videoTracks.Clear();
+ _currentTextCue = null;
+ _mediaHints = new MediaHints();
+ }
+
+ ///
+ public abstract void SetLooping(bool looping);
+ ///
+ public abstract bool IsLooping();
+
+ ///
+ public abstract bool HasMetaData();
+ ///
+ public abstract bool CanPlay();
+ ///
+ public abstract void Play();
+ ///
+ public abstract void Pause();
+ ///
+ public abstract void Stop();
+ ///
+ public virtual void Rewind() { SeekFast(0.0); }
+
+ ///
+ public abstract void Seek(double time);
+ ///
+ public abstract void SeekFast(double time);
+ ///
+ public virtual void SeekWithTolerance(double time, double timeDeltaBefore, double timeDeltaAfter) { Seek(time); }
+ ///
+ public abstract double GetCurrentTime();
+ ///
+ public virtual DateTime GetProgramDateTime() { return DateTime.MinValue; }
+ ///
+ public abstract float GetPlaybackRate();
+ ///
+ public abstract void SetPlaybackRate(float rate);
+
+ // Basic Properties
+ ///
+ public abstract double GetDuration();
+ ///
+ public abstract int GetVideoWidth();
+ ///
+ public abstract int GetVideoHeight();
+ ///
+ public abstract float GetVideoFrameRate();
+ ///
+ public virtual float GetVideoDisplayRate() { return _displayRate; }
+ ///
+ public abstract bool HasAudio();
+ ///
+ public abstract bool HasVideo();
+ ///
+ public bool IsVideoStereo() { return GetTextureStereoPacking() != StereoPacking.None; }
+
+ // Basic State
+ ///
+ public abstract bool IsSeeking();
+ ///
+ public abstract bool IsPlaying();
+ ///
+ public abstract bool IsPaused();
+ ///
+ public abstract bool IsFinished();
+ ///
+ public abstract bool IsBuffering();
+ ///
+ public virtual bool WaitForNextFrame(Camera dummyCamera, int previousFrameCount) { return false; }
+
+ // Textures
+ ///
+ public virtual int GetTextureCount() { return 1; }
+ ///
+ public abstract Texture GetTexture(int index = 0);
+ ///
+ public abstract int GetTextureFrameCount();
+ ///
+ public virtual bool SupportsTextureFrameCount() { return true; }
+ ///
+ public virtual long GetTextureTimeStamp() { return long.MinValue; }
+ ///
+ public abstract bool RequiresVerticalFlip();
+ ///
+ public virtual float GetTexturePixelAspectRatio() { return 1f; }
+ ///
+ public virtual Matrix4x4 GetYpCbCrTransform() { return Matrix4x4.identity; }
+ ///
+ public virtual float[] GetAffineTransform() { return new float[] { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }; }
+ ///
+ public virtual float[] GetTextureTransform() { return GetAffineTransform(); }
+ ///
+ public virtual Matrix4x4 GetTextureMatrix()
+ {
+ float[] transform = GetAffineTransform();
+ if (transform == null || transform.Length != 6)
+ return Matrix4x4.identity;
+ Vector4 v0 = new Vector4(transform[0], transform[1], 0, 0);
+ Vector4 v1 = new Vector4(transform[2], transform[3], 0, 0);
+ Vector4 v2 = new Vector4( 0, 0, 1, 0);
+ Vector4 v3 = new Vector4(transform[4], transform[5], 0, 1);
+ Matrix4x4 xfrm = new Matrix4x4(v0, v1, v2, v3);
+ return xfrm;
+ }
+
+ public StereoPacking GetTextureStereoPacking()
+ {
+ StereoPacking result = InternalGetTextureStereoPacking();
+ if (result == StereoPacking.Unknown)
+ {
+ // If stereo is unknown, fall back to media hints or no packing
+ result = _mediaHints.stereoPacking;
+ }
+ return result;
+ }
+ internal abstract StereoPacking InternalGetTextureStereoPacking();
+
+ public virtual TransparencyMode GetTextureTransparency()
+ {
+ return _mediaHints.transparency;
+ }
+
+ public AlphaPacking GetTextureAlphaPacking()
+ {
+ if (GetTextureTransparency() == TransparencyMode.Transparent)
+ {
+ return _mediaHints.alphaPacking;
+ }
+ return AlphaPacking.None;
+ }
+
+ // Audio General
+ ///
+ public abstract void MuteAudio(bool bMuted);
+ ///
+ public abstract bool IsMuted();
+ ///
+ public abstract void SetVolume(float volume);
+ ///
+ public virtual void SetBalance(float balance) { }
+ ///
+ public abstract float GetVolume();
+ ///
+ public virtual float GetBalance() { return 0f; }
+
+ // Audio Grabbing
+ ///
+ public virtual int GetAudioChannelCount() { return -1; }
+ ///
+ public virtual AudioChannelMaskFlags GetAudioChannelMask() { return 0; }
+ ///
+ public virtual int GrabAudio(float[] audioData, int audioDataFloatCount, int channelCount) { return 0; }
+ ///
+ public virtual int GetAudioBufferedSampleCount() { return 0; }
+
+ ///
+ public virtual void AudioConfigurationChanged(bool deviceChanged) { }
+
+ // 360 Audio
+ ///
+ public virtual void SetAudioHeadRotation(Quaternion q) { }
+ ///
+ public virtual void ResetAudioHeadRotation() { }
+ ///
+ public virtual void SetAudioChannelMode(Audio360ChannelMode channelMode) { }
+ ///
+ public virtual void SetAudioFocusEnabled(bool enabled) { }
+ ///
+ public virtual void SetAudioFocusProperties(float offFocusLevel, float widthDegrees) { }
+ ///
+ public virtual void SetAudioFocusRotation(Quaternion q) { }
+ ///
+ public virtual void ResetAudioFocus() { }
+
+ // Streaming
+ ///
+ public virtual long GetEstimatedTotalBandwidthUsed() { return -1; }
+ ///
+ public virtual void SetPlayWithoutBuffering(bool playWithoutBuffering) { }
+
+ // Caching
+ ///
+ public virtual bool IsMediaCachingSupported() { return false; }
+ ///
+ public virtual void AddMediaToCache(string url, string headers, MediaCachingOptions options) { }
+ ///
+ public virtual void CancelDownloadOfMediaToCache(string url) { }
+ ///
+ public virtual void PauseDownloadOfMediaToCache(string url) { }
+ ///
+ public virtual void ResumeDownloadOfMediaToCache(string url) { }
+ ///
+ public virtual void RemoveMediaFromCache(string url) { }
+ ///
+ public virtual CachedMediaStatus GetCachedMediaStatus(string url, ref float progress) { return CachedMediaStatus.NotCached; }
+// ///
+// public virtual bool IsMediaCached() { return false; }
+
+ // External playback
+ ///
+ public virtual bool IsExternalPlaybackSupported() { return false; }
+ ///
+ public virtual bool IsExternalPlaybackActive() { return false; }
+ ///
+ public virtual void SetAllowsExternalPlayback(bool enable) { }
+ ///
+ public virtual void SetExternalPlaybackVideoGravity(ExternalPlaybackVideoGravity gravity) { }
+
+ // Authentication
+ //public virtual void SetKeyServerURL(string url) { }
+ ///
+ public virtual void SetKeyServerAuthToken(string token) { }
+ ///
+ public virtual void SetOverrideDecryptionKey(byte[] key) { }
+
+ // General
+ ///
+ public abstract void Update();
+ ///
+ public /*abstract*/virtual void BeginRender() { }
+ ///
+ public abstract void Render();
+ ///
+ public abstract void Dispose();
+
+ // Internal method
+ public virtual bool GetDecoderPerformance(ref int activeDecodeThreadCount, ref int decodedFrameCount, ref int droppedFrameCount) { return false; }
+
+#if false
+ public void Update()
+ {
+ Native.Update(_instance);
+ if (UpdateTracks())
+ {
+
+ }
+ if (UpdateTextCue())
+ {
+
+ }
+ }
+#endif
+
+ public virtual void EndUpdate() { }
+
+ public virtual IntPtr GetNativePlayerHandle() { return IntPtr.Zero; }
+
+ public ErrorCode GetLastError()
+ {
+ ErrorCode errorCode = _lastError;
+ _lastError = ErrorCode.None;
+ return errorCode;
+ }
+
+ ///
+ public virtual long GetLastExtendedErrorCode()
+ {
+ return 0;
+ }
+
+ public string GetPlayerDescription()
+ {
+ return _playerDescription;
+ }
+
+ ///
+ public virtual bool PlayerSupportsLinearColorSpace()
+ {
+#if UNITY_PLATFORM_SUPPORTS_LINEAR
+ return true;
+#else
+ return false;
+#endif
+ }
+
+ protected string _playerDescription = string.Empty;
+ protected ErrorCode _lastError = ErrorCode.None;
+ protected FilterMode _defaultTextureFilterMode = FilterMode.Bilinear;
+ protected TextureWrapMode _defaultTextureWrapMode = TextureWrapMode.Clamp;
+ protected int _defaultTextureAnisoLevel = 1;
+ protected MediaHints _mediaHints;
+ protected TimeRanges _seekableTimes = new TimeRanges();
+ protected TimeRanges _bufferedTimes = new TimeRanges();
+
+ public TimeRanges GetSeekableTimes() { return _seekableTimes; }
+ public TimeRanges GetBufferedTimes() { return _bufferedTimes; }
+
+ public void GetTextureProperties(out FilterMode filterMode, out TextureWrapMode wrapMode, out int anisoLevel)
+ {
+ filterMode = _defaultTextureFilterMode;
+ wrapMode = _defaultTextureWrapMode;
+ anisoLevel = _defaultTextureAnisoLevel;
+ }
+
+ public void SetTextureProperties(FilterMode filterMode = FilterMode.Bilinear, TextureWrapMode wrapMode = TextureWrapMode.Clamp, int anisoLevel = 0)
+ {
+ _defaultTextureFilterMode = filterMode;
+ _defaultTextureWrapMode = wrapMode;
+ _defaultTextureAnisoLevel = anisoLevel;
+ for (int i = 0; i < GetTextureCount(); ++i)
+ {
+ ApplyTextureProperties(GetTexture(i));
+ }
+ }
+
+ protected virtual void ApplyTextureProperties(Texture texture)
+ {
+ if (texture != null)
+ {
+ texture.filterMode = _defaultTextureFilterMode;
+ texture.wrapMode = _defaultTextureWrapMode;
+ texture.anisoLevel = _defaultTextureAnisoLevel;
+ }
+ }
+
+#region Video Display Rate
+#if UNITY_EDITOR
+ private float _displayRateLastRealTime = 0f;
+#endif
+ private float _displayRateTimer;
+ private int _displayRateLastFrameCount;
+ private float _displayRate = 1f;
+
+ protected void UpdateDisplayFrameRate()
+ {
+ const float IntervalSeconds = 0.5f;
+ if (_displayRateTimer >= IntervalSeconds)
+ {
+ int frameCount = GetTextureFrameCount();
+ int frameDelta = (frameCount - _displayRateLastFrameCount);
+ _displayRate = (float)frameDelta / _displayRateTimer;
+ _displayRateTimer -= IntervalSeconds;
+ if (_displayRateTimer >= IntervalSeconds) _displayRateTimer -= IntervalSeconds;
+ if (_displayRateTimer >= IntervalSeconds) _displayRateTimer = 0f;
+ _displayRateLastFrameCount = frameCount;
+ }
+
+ float deltaTime = Time.deltaTime;
+#if UNITY_EDITOR
+ if (!Application.isPlaying)
+ {
+ // When not playing Time.deltaTime isn't valid so we have to derive it
+ deltaTime = (Time.realtimeSinceStartup - _displayRateLastRealTime);
+ _displayRateLastRealTime = Time.realtimeSinceStartup;
+ }
+#endif
+ _displayRateTimer += deltaTime;
+ }
+#endregion // Video Display Rate
+
+#region Stall Detection
+ protected bool IsExpectingNewVideoFrame()
+ {
+ if (HasVideo())
+ {
+ // If we're playing then we expect a new frame
+ if (!IsFinished() && (!IsPaused() && IsPlaying() && GetPlaybackRate() != 0.0f))
+ {
+ // Check that the video is not a single frame and therefore there is no other frame to display
+ bool isSingleFrame = (GetTextureFrameCount() > 0 && GetDurationFrames() == 1);
+ if (!isSingleFrame)
+ {
+ // NOTE: if a new frame isn't available then we could either be seeking or stalled
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ ///
+ public virtual bool IsPlaybackStalled()
+ {
+ const float StallDetectionDuration = 0.5f;
+
+ // Manually detect stalled video if the platform doesn't have native support to detect it
+ if (SupportsTextureFrameCount() && IsExpectingNewVideoFrame())
+ {
+ // Detect a new video frame
+ int frameCount = GetTextureFrameCount();
+ if (frameCount != _stallDetectionFrame)
+ {
+ _stallDetectionTimer = 0f;
+ _stallDetectionFrame = frameCount;
+ }
+ else
+ {
+ // Update the detection timer, but never more than once a Unity frame
+ if (_stallDetectionGuard != Time.frameCount)
+ {
+ _stallDetectionTimer += Time.deltaTime;
+ }
+ }
+ _stallDetectionGuard = Time.frameCount;
+
+ float thresholdDuration = StallDetectionDuration;
+
+ // Scale by the playback rate, but should be at least StallDetectionDuration
+ thresholdDuration = Mathf.Max(thresholdDuration / Mathf.Abs(GetPlaybackRate()), StallDetectionDuration);
+
+ // If a valid FPS is available then make sure the thresholdDuration
+ // is at least double that. This is mainly for very low FPS
+ // content (eg 1 or 2 FPS)
+ float fps = GetVideoFrameRate();
+ if (fps > 0f && !float.IsNaN(fps))
+ {
+ thresholdDuration = Mathf.Max(thresholdDuration, 2f / fps);
+ }
+
+ return (_stallDetectionTimer > thresholdDuration);
+ }
+ else
+ {
+ _stallDetectionTimer = 0f;
+ }
+ return false;
+ }
+
+ private float _stallDetectionTimer;
+ private int _stallDetectionFrame;
+ private int _stallDetectionGuard;
+#endregion // Stall Detection
+
+ protected List _subtitles;
+ protected Subtitle _currentSubtitle;
+
+ ///
+ public bool LoadSubtitlesSRT(string data)
+ {
+ if (string.IsNullOrEmpty(data))
+ {
+ // Disable subtitles
+ _subtitles = null;
+ _currentSubtitle = null;
+ }
+ else
+ {
+ _subtitles = SubtitleUtils.ParseSubtitlesSRT(data);
+ _currentSubtitle = null;
+ }
+ return (_subtitles != null);
+ }
+
+ ///
+ public virtual void UpdateSubtitles()
+ {
+ if (_subtitles != null)
+ {
+ double time = GetCurrentTime();
+
+ // TODO: implement a more efficient subtitle index searcher
+ int searchIndex = 0;
+ if (_currentSubtitle != null)
+ {
+ if (!_currentSubtitle.IsTime(time))
+ {
+ if (time > _currentSubtitle.timeEnd)
+ {
+ searchIndex = _currentSubtitle.index + 1;
+ }
+ _currentSubtitle = null;
+ }
+ }
+
+ if (_currentSubtitle == null)
+ {
+ for (int i = searchIndex; i < _subtitles.Count; i++)
+ {
+ if (_subtitles[i].IsTime(time))
+ {
+ _currentSubtitle = _subtitles[i];
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ public virtual int GetSubtitleIndex()
+ {
+ int result = -1;
+ if (_currentSubtitle != null)
+ {
+ result = _currentSubtitle.index;
+ }
+ return result;
+ }
+
+ ///
+ public virtual string GetSubtitleText()
+ {
+ string result = string.Empty;
+ if (_currentSubtitle != null)
+ {
+ result = _currentSubtitle.text;
+ }
+ else if (_currentTextCue != null)
+ {
+ result = _currentTextCue.Text;
+ }
+ return result;
+ }
+
+ public virtual void OnEnable()
+ {
+ }
+
+ ///
+ public int GetCurrentTimeFrames(float overrideFrameRate = 0f)
+ {
+ int result = 0;
+ float frameRate = (overrideFrameRate > 0f) ? overrideFrameRate : GetVideoFrameRate();
+ if (frameRate > 0f)
+ {
+ result = Helper.ConvertTimeSecondsToFrame(GetCurrentTime(), frameRate);
+ result = Mathf.Min(result, GetMaxFrameNumber(overrideFrameRate));
+ }
+ return result;
+ }
+
+ ///
+ public int GetDurationFrames(float overrideFrameRate = 0f)
+ {
+ int result = 0;
+ float frameRate = (overrideFrameRate > 0f) ? overrideFrameRate : GetVideoFrameRate();
+ if (frameRate > 0f)
+ {
+ result = Helper.ConvertTimeSecondsToFrame(GetDuration(), frameRate);
+ }
+ return result;
+ }
+
+ ///
+ public int GetMaxFrameNumber(float overrideFrameRate = 0f)
+ {
+ int result = GetDurationFrames(overrideFrameRate);
+ result = Mathf.Max(0, result - 1);
+ return result;
+ }
+
+ ///
+ public void SeekToFrameRelative(int frameOffset, float overrideFrameRate = 0f)
+ {
+ float frameRate = (overrideFrameRate > 0f)?overrideFrameRate:GetVideoFrameRate();
+ if (frameRate > 0f)
+ {
+ int frame = Helper.ConvertTimeSecondsToFrame(GetCurrentTime(), frameRate);
+ frame += frameOffset;
+ frame = Mathf.Clamp(frame, 0, GetMaxFrameNumber(frameRate));
+ double time = Helper.ConvertFrameToTimeSeconds(frame, frameRate);
+ Seek(time);
+ }
+ }
+
+ ///
+ public void SeekToFrame(int frame, float overrideFrameRate = 0f)
+ {
+ float frameRate = (overrideFrameRate > 0f)?overrideFrameRate:GetVideoFrameRate();
+ if (frameRate > 0f)
+ {
+ frame = Mathf.Clamp(frame, 0, GetMaxFrameNumber(frameRate));
+ double time = Helper.ConvertFrameToTimeSeconds(frame, frameRate);
+ Seek(time);
+ }
+ }
+
+ #region IBufferedDisplay Implementation
+
+ private int _unityFrameCountBufferedDisplayGuard = -1;
+
+ ///
+ public long UpdateBufferedDisplay()
+ {
+ // Guard to make sure we're only updating the buffered frame once per Unity frame
+ if (Time.frameCount == _unityFrameCountBufferedDisplayGuard) return GetTextureTimeStamp();
+
+ _unityFrameCountBufferedDisplayGuard = Time.frameCount;
+
+ return InternalUpdateBufferedDisplay();
+ }
+
+ internal virtual long InternalUpdateBufferedDisplay() { return 0; }
+
+ ///
+ public virtual BufferedFramesState GetBufferedFramesState()
+ {
+ return new BufferedFramesState();
+ }
+
+ ///
+ public virtual void SetSlaves(IBufferedDisplay[] slaves) { }
+
+ ///
+ public virtual void SetBufferedDisplayMode(BufferedFrameSelectionMode mode, IBufferedDisplay master = null) { }
+
+ ///
+ public virtual void SetBufferedDisplayOptions(bool pauseOnPrerollComplete) { }
+
+ #endregion // IBufferedDisplay Implementation
+
+ protected PlaybackQualityStats _playbackQualityStats = new PlaybackQualityStats();
+
+ public PlaybackQualityStats GetPlaybackQualityStats()
+ {
+ return _playbackQualityStats;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/BaseMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/BaseMediaPlayer.cs.meta
new file mode 100755
index 0000000..c6f50ab
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/BaseMediaPlayer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4f59504ca098e7d41b036917f4764ee0
+timeCreated: 1447782861
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Events.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Events.cs
new file mode 100755
index 0000000..7e2c2a7
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Events.cs
@@ -0,0 +1,109 @@
+using UnityEngine.Events;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ [System.Serializable]
+ public class MediaPlayerLoadEvent : UnityEvent {}
+
+ [System.Serializable]
+ public class MediaPlayerEvent : UnityEvent
+ {
+ public enum EventType
+ {
+ MetaDataReady, // Triggered when meta data(width, duration etc) is available
+ ReadyToPlay, // Triggered when the video is loaded and ready to play
+ Started, // Triggered when the playback starts
+ FirstFrameReady, // Triggered when the first frame has been rendered
+ FinishedPlaying, // Triggered when a non-looping video has finished playing
+ Closing, // Triggered when the media is closed
+ Error, // Triggered when an error occurs
+ SubtitleChange, // Triggered when the subtitles change
+ Stalled, // Triggered when media is stalled (eg. when lost connection to media stream)
+ Unstalled, // Triggered when media is resumed form a stalled state (eg. when lost connection is re-established)
+ ResolutionChanged, // Triggered when the resolution of the video has changed (including the load) Useful for adaptive streams
+ StartedSeeking, // Triggered when seeking begins
+ FinishedSeeking, // Triggered when seeking has finished
+ StartedBuffering, // Triggered when buffering begins
+ FinishedBuffering, // Triggered when buffering has finished
+ PropertiesChanged, // Triggered when any properties (eg stereo packing are changed) - this has to be triggered manually
+ PlaylistItemChanged,// Triggered when the new item is played in the playlist
+ PlaylistFinished, // Triggered when the playlist reaches the end
+
+ TextTracksChanged, // Triggered when the text tracks are added or removed
+ Paused, // Triggered when the player is paused
+ Unpaused, // Triggered when the player resumes playing
+
+ // TODO:
+ //StartLoop, // Triggered when the video starts and is in loop mode
+ //EndLoop, // Triggered when the video ends and is in loop mode
+ //NewFrame // Trigger when a new video frame is available
+
+ TextCueChanged = SubtitleChange, // Triggered when the text to display changes
+ }
+
+ private List> _listeners = new List>(4);
+
+ public bool HasListeners()
+ {
+ return (_listeners.Count > 0) || (GetPersistentEventCount() > 0);
+ }
+
+ new public void AddListener(UnityAction call)
+ {
+ if (!_listeners.Contains(call))
+ {
+ _listeners.Add(call);
+ base.AddListener(call);
+ }
+ }
+
+ new public void RemoveListener(UnityAction call)
+ {
+ int index = _listeners.IndexOf(call);
+ if (index >= 0)
+ {
+ _listeners.RemoveAt(index);
+ base.RemoveListener(call);
+ }
+ }
+
+ new public void RemoveAllListeners()
+ {
+ _listeners.Clear();
+ base.RemoveAllListeners();
+ }
+ }
+
+#if false
+ public interface IMediaEvents
+ {
+ void AddEventListener(UnityAction call);
+ void RemoveListener(UnityAction call);
+ void RemoveAllEventListeners();
+ }
+
+ public partial class BaseMediaPlayer
+ {
+ void AddEventListener(UnityAction call)
+ {
+
+ }
+ void RemoveListener(UnityAction call)
+ {
+
+ }
+ void RemoveAllEventListeners()
+ {
+
+ }
+
+ private MediaPlayerEvent _eventHandler;
+
+ }
+#endif
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Events.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Events.cs.meta
new file mode 100755
index 0000000..150ad21
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Events.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 16a5efbe992a09144ac89dde2b3e0898
+timeCreated: 1438695622
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Helper.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Helper.cs
new file mode 100755
index 0000000..4e6a6ac
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Helper.cs
@@ -0,0 +1,526 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public static class Helper
+ {
+ public const string AVProVideoVersion = "3.0.8";
+ public sealed class ExpectedPluginVersion
+ {
+ public const string Windows = "3.0.8";
+ public const string WinRT = "3.0.8";
+ public const string Android = "3.0.8";
+ public const string Apple = "3.0.8";
+ }
+
+ public const string UnityBaseTextureName = "_MainTex";
+ public const string UnityBaseTextureName_URP = "_BaseMap";
+ public const string UnityBaseTextureName_HDRP = "_BaseColorMap";
+
+ public static string GetPath(MediaPathType location)
+ {
+ string result = string.Empty;
+ switch (location)
+ {
+ case MediaPathType.AbsolutePathOrURL:
+ break;
+ case MediaPathType.RelativeToDataFolder:
+ result = Application.dataPath;
+ break;
+ case MediaPathType.RelativeToPersistentDataFolder:
+ result = Application.persistentDataPath;
+ break;
+ case MediaPathType.RelativeToProjectFolder:
+#if !UNITY_WINRT_8_1
+ string path = "..";
+#if UNITY_STANDALONE_OSX && !UNITY_EDITOR_OSX
+ path += "/..";
+#endif
+ result = System.IO.Path.GetFullPath(System.IO.Path.Combine(Application.dataPath, path));
+ result = result.Replace('\\', '/');
+#endif
+ break;
+ case MediaPathType.RelativeToStreamingAssetsFolder:
+ result = Application.streamingAssetsPath;
+ break;
+ }
+ return result;
+ }
+
+ public static string GetFilePath(string path, MediaPathType location)
+ {
+ string result = string.Empty;
+ if (!string.IsNullOrEmpty(path))
+ {
+ switch (location)
+ {
+ case MediaPathType.AbsolutePathOrURL:
+ result = path;
+ break;
+ case MediaPathType.RelativeToDataFolder:
+ case MediaPathType.RelativeToPersistentDataFolder:
+ case MediaPathType.RelativeToProjectFolder:
+ case MediaPathType.RelativeToStreamingAssetsFolder:
+ result = System.IO.Path.Combine(GetPath(location), path);
+ break;
+ }
+ }
+ return result;
+ }
+
+ public static string GetFriendlyResolutionName(int width, int height, float fps)
+ {
+ // List of common 16:9 resolutions
+ int[] areas = { 0, 7680 * 4320, 3840 * 2160, 2560 * 1440, 1920 * 1080, 1280 * 720, 853 * 480, 640 * 360, 426 * 240, 256 * 144 };
+ string[] names = { "Unknown", "8K", "4K", "1440p", "1080p", "720p", "480p", "360p", "240p", "144p" };
+
+ Debug.Assert(areas.Length == names.Length);
+
+ // Find the closest resolution
+ int closestAreaIndex = 0;
+ int area = width * height;
+ int minDelta = int.MaxValue;
+ for (int i = 0; i < areas.Length; i++)
+ {
+ int d = Mathf.Abs(areas[i] - area);
+ // TODO: add a maximum threshold to ignore differences that are too high
+ if (d < minDelta)
+ {
+ closestAreaIndex = i;
+ minDelta = d;
+ // If the exact mode is found, early out
+ if (d == 0)
+ {
+ break;
+ }
+ }
+ }
+
+ string result = names[closestAreaIndex];
+
+ // Append frame rate if valid
+ if (fps > 0f && !float.IsNaN(fps))
+ {
+ result += fps.ToString("0.##");
+ }
+
+ return result;
+ }
+
+ public static string GetErrorMessage(ErrorCode code)
+ {
+ string result = string.Empty;
+ switch (code)
+ {
+ case ErrorCode.None:
+ result = "No Error";
+ break;
+ case ErrorCode.LoadFailed:
+ result = "Loading failed. File not found, codec not supported, video resolution too high or insufficient system resources.";
+#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
+ // Add extra information for older Windows versions that don't have support for modern codecs
+ if (SystemInfo.operatingSystem.StartsWith("Windows XP") ||
+ SystemInfo.operatingSystem.StartsWith("Windows Vista"))
+ {
+ result += " NOTE: Windows XP and Vista don't have native support for H.264 codec. Consider using an older codec such as DivX or installing 3rd party codecs such as LAV Filters.";
+ }
+#endif
+ break;
+ case ErrorCode.DecodeFailed:
+ result = "Decode failed. Possible codec not supported, video resolution/bit-depth too high, or insufficient system resources.";
+#if UNITY_ANDROID
+ result += " On Android this is generally due to the hardware not having enough resources to decode the video. Most Android devices can only handle a maximum of one 4K video at once.";
+#endif
+ break;
+ }
+ return result;
+ }
+
+ public static string GetPlatformName(Platform platform)
+ {
+ string result = "Unknown";
+ switch (platform)
+ {
+ case Platform.WindowsUWP:
+ result = "Windows UWP";
+ break;
+ default:
+ result = platform.ToString();
+ break;
+ }
+ return result;
+ }
+
+ public static string[] GetPlatformNames()
+ {
+ return new string[] {
+ GetPlatformName(Platform.Windows),
+ GetPlatformName(Platform.macOS),
+ GetPlatformName(Platform.iOS),
+ GetPlatformName(Platform.tvOS),
+ GetPlatformName(Platform.visionOS),
+ GetPlatformName(Platform.Android),
+ GetPlatformName(Platform.WindowsUWP),
+ GetPlatformName(Platform.WebGL),
+ };
+ }
+
+#if AVPROVIDEO_DISABLE_LOGGING
+ [System.Diagnostics.Conditional("ALWAYS_FALSE")]
+#endif
+ public static void LogInfo(string message, Object context = null)
+ {
+ if (context == null)
+ {
+ Debug.Log("[AVProVideo] " + message);
+ }
+ else
+ {
+ Debug.Log("[AVProVideo] " + message, context);
+ }
+ }
+
+ public static int GetUnityAudioSampleRate()
+ {
+ // For standalone builds (not in the editor):
+ // In Unity 4.6, 5.0, 5.1 when audio is disabled there is no indication from the API.
+ // But in 5.2.0 and above, it logs an error when trying to call
+ // AudioSettings.GetDSPBufferSize() or AudioSettings.outputSampleRate
+ // So to prevent the error, check if AudioSettings.GetConfiguration().sampleRate == 0
+ return (AudioSettings.GetConfiguration().sampleRate == 0) ? 0 : AudioSettings.outputSampleRate;
+ }
+
+ public static int GetUnityAudioSpeakerCount()
+ {
+ switch (AudioSettings.GetConfiguration().speakerMode)
+ {
+ case AudioSpeakerMode.Mono: return 1;
+ case AudioSpeakerMode.Stereo: return 2;
+ case AudioSpeakerMode.Quad: return 4;
+ case AudioSpeakerMode.Surround: return 5;
+ case AudioSpeakerMode.Mode5point1: return 6;
+ case AudioSpeakerMode.Mode7point1: return 8;
+ case AudioSpeakerMode.Prologic: return 2;
+ }
+ return 0;
+ }
+
+ // Returns a valid range to use for a timeline display
+ // Either it will return the range 0..duration, or
+ // for live streams it will return first seekable..last seekable time
+ public static TimeRange GetTimelineRange(double duration, TimeRanges seekable)
+ {
+ TimeRange result = new TimeRange();
+ if (duration >= 0.0 && duration < 2e10)
+ {
+ // Duration is valid
+ result.startTime = 0f;
+ result.duration = duration;
+ }
+ else
+ {
+ // Duration is invalid, so it could be a live stream, so derive from seekable range
+ result.startTime = seekable.MinTime;
+ result.duration = seekable.Duration;
+ }
+ return result;
+ }
+
+ public const double SecondsToHNS = 10000000.0;
+ public const double MilliSecondsToHNS = 10000.0;
+
+ public static string GetTimeString(double timeSeconds, bool showMilliseconds = false)
+ {
+ float totalSeconds = (float)timeSeconds;
+ int hours = Mathf.FloorToInt(totalSeconds / (60f * 60f));
+ float usedSeconds = hours * 60f * 60f;
+
+ int minutes = Mathf.FloorToInt((totalSeconds - usedSeconds) / 60f);
+ usedSeconds += minutes * 60f;
+
+ int seconds = Mathf.FloorToInt(totalSeconds - usedSeconds);
+
+ string result;
+ if (hours <= 0)
+ {
+ if (showMilliseconds)
+ {
+ int milliSeconds = (int)((totalSeconds - Mathf.Floor(totalSeconds)) * 1000f);
+ result = string.Format("{0:00}:{1:00}:{2:000}", minutes, seconds, milliSeconds);
+ }
+ else
+ {
+ result = string.Format("{0:00}:{1:00}", minutes, seconds);
+ }
+ }
+ else
+ {
+ if (showMilliseconds)
+ {
+ int milliSeconds = (int)((totalSeconds - Mathf.Floor(totalSeconds)) * 1000f);
+ result = string.Format("{2}:{0:00}:{1:00}:{3:000}", minutes, seconds, hours, milliSeconds);
+ }
+ else
+ {
+ result = string.Format("{2}:{0:00}:{1:00}", minutes, seconds, hours);
+ }
+ }
+
+ return result;
+ }
+
+ ///
+ /// Convert texture transform matrix to an enum of orientation types
+ ///
+ public static Orientation GetOrientation(float[] t)
+ {
+ Orientation result = Orientation.Landscape;
+ if (t != null)
+ {
+ // TODO: check that the Portrait and PortraitFlipped are the right way around
+ if (t[0] == 0f && t[1]== 1f && t[2] == -1f && t[3] == 0f)
+ {
+ result = Orientation.Portrait;
+ } else
+ if (t[0] == 0f && t[1] == -1f && t[2] == 1f && t[3] == 0f)
+ {
+ result = Orientation.PortraitFlipped;
+ } else
+ if (t[0]== 1f && t[1] == 0f && t[2] == 0f && t[3] == 1f)
+ {
+ result = Orientation.Landscape;
+ } else
+ if (t[0] == -1f && t[1] == 0f && t[2] == 0f && t[3] == -1f)
+ {
+ result = Orientation.LandscapeFlipped;
+ }
+ else
+ if (t[0] == 0f && t[1] == 1f && t[2] == 1f && t[3] == 0f)
+ {
+ result = Orientation.PortraitHorizontalMirror;
+ }
+ }
+ return result;
+ }
+
+ private static Matrix4x4 PortraitMatrix = Matrix4x4.TRS(new Vector3(0f, 1f, 0f), Quaternion.Euler(0f, 0f, -90f), Vector3.one);
+ private static Matrix4x4 PortraitFlippedMatrix = Matrix4x4.TRS(new Vector3(1f, 0f, 0f), Quaternion.Euler(0f, 0f, 90f), Vector3.one);
+ private static Matrix4x4 LandscapeFlippedMatrix = Matrix4x4.TRS(new Vector3(1f, 1f, 0f), Quaternion.Euler(0f, 0f, -180f), Vector3.one);
+
+ public static Matrix4x4 GetMatrixForOrientation(Orientation ori)
+ {
+ Matrix4x4 result;
+ switch (ori)
+ {
+ case Orientation.Landscape:
+ result = Matrix4x4.identity;
+ break;
+ case Orientation.LandscapeFlipped:
+ result = LandscapeFlippedMatrix;
+ break;
+ case Orientation.Portrait:
+ result = PortraitMatrix;
+ break;
+ case Orientation.PortraitFlipped:
+ result = PortraitFlippedMatrix;
+ break;
+ case Orientation.PortraitHorizontalMirror:
+ result = new Matrix4x4();
+ result.SetColumn(0, new Vector4(0f, 1f, 0f, 0f));
+ result.SetColumn(1, new Vector4(1f, 0f, 0f, 0f));
+ result.SetColumn(2, new Vector4(0f, 0f, 1f, 0f));
+ result.SetColumn(3, new Vector4(0f, 0f, 0f, 1f));
+ break;
+ default:
+ throw new System.Exception("Unknown Orientation type");
+ }
+ return result;
+ }
+
+ public static Matrix4x4 Matrix4x4FromAffineTransform(float[] affineXfrm)
+ {
+ Vector4 v0 = new Vector4(affineXfrm[0], affineXfrm[1], 0, 0);
+ Vector4 v1 = new Vector4(affineXfrm[2], affineXfrm[3], 0, 0);
+ Vector4 v2 = new Vector4( 0, 0, 1, 0);
+ Vector4 v3 = new Vector4(affineXfrm[4], affineXfrm[5], 0, 1);
+ return new Matrix4x4(v0, v1, v2, v3);
+ }
+
+ public static int ConvertTimeSecondsToFrame(double seconds, float frameRate)
+ {
+ // NOTE: Generally you should use RountToInt when converting from time to frame number
+ // but because we're adding a half frame offset (which seems to be the safer thing to do) we need to FloorToInt
+ seconds = System.Math.Max(0.0, seconds);
+ frameRate = Mathf.Max(0f, frameRate);
+ return (int)System.Math.Floor(frameRate * seconds);
+ }
+
+ public static double ConvertFrameToTimeSeconds(int frame, float frameRate)
+ {
+ frame = Mathf.Max(0, frame);
+ frameRate = Mathf.Max(0f, frameRate);
+ double frameDurationSeconds = 1.0 / frameRate;
+ return ((double)frame * frameDurationSeconds) + (frameDurationSeconds * 0.5); // Add half a frame we that the time lands in the middle of the frame range and not at the edges
+ }
+
+ public static double FindNextKeyFrameTimeSeconds(double seconds, float frameRate, int keyFrameInterval)
+ {
+ seconds = System.Math.Max(0.0, seconds);
+ frameRate = Mathf.Max(0f, frameRate);
+ keyFrameInterval = Mathf.Max(0, keyFrameInterval);
+ int currentFrame = Helper.ConvertTimeSecondsToFrame(seconds, frameRate);
+ // TODO: allow specifying a minimum number of frames so that if currentFrame is too close to nextKeyFrame, it will calculate the next-next keyframe
+ int nextKeyFrame = keyFrameInterval * Mathf.CeilToInt((float)(currentFrame + 1) / (float)keyFrameInterval);
+ return Helper.ConvertFrameToTimeSeconds(nextKeyFrame, frameRate);
+ }
+
+ public static System.DateTime ConvertSecondsSince1970ToDateTime(double secondsSince1970)
+ {
+ System.TimeSpan time = System.TimeSpan.FromSeconds(secondsSince1970);
+ return new System.DateTime(1970, 1, 1).Add(time);
+ }
+
+ #if (UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN))
+ [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode, EntryPoint = "GetShortPathNameW", SetLastError=true)]
+ private static extern int GetShortPathName([System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string pathName,
+ [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] System.Text.StringBuilder shortName,
+ int cbShortName);
+
+ // Handle very long file paths by converting to DOS 8.3 format
+ internal static string ConvertLongPathToShortDOS83Path(string path)
+ {
+ const string pathToken = @"\\?\";
+ string result = pathToken + path.Replace("/","\\");
+ int length = GetShortPathName(result, null, 0);
+ if (length > 0)
+ {
+ System.Text.StringBuilder sb = new System.Text.StringBuilder(length);
+ if (0 != GetShortPathName(result, sb, length))
+ {
+ result = sb.ToString().Replace(pathToken, "");
+ Debug.LogWarning("[AVProVideo] Long path detected. Changing to DOS 8.3 format");
+ }
+ }
+ return result;
+ }
+ #endif
+
+ // Converts a non-readable texture to a readable Texture2D.
+ // "targetTexture" can be null or you can pass in an existing texture.
+ // Remember to Destroy() the returned texture after finished with it
+ public static Texture2D GetReadableTexture(Texture inputTexture, bool requiresVerticalFlip, Orientation ori, Texture2D targetTexture = null)
+ {
+ Texture2D resultTexture = targetTexture;
+
+ RenderTexture prevRT = RenderTexture.active;
+
+ int textureWidth = inputTexture.width;
+ int textureHeight = inputTexture.height;
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IPHONE || UNITY_IOS || UNITY_TVOS
+ if (ori == Orientation.Portrait || ori == Orientation.PortraitFlipped)
+ {
+ textureWidth = inputTexture.height;
+ textureHeight = inputTexture.width;
+ }
+#endif
+
+ // Blit the texture to a temporary RenderTexture
+ // This handles any format conversion that is required and allows us to use ReadPixels to copy texture from RT to readable texture
+ RenderTexture tempRT = RenderTexture.GetTemporary(textureWidth, textureHeight, 0, RenderTextureFormat.ARGB32);
+
+ if (ori == Orientation.Landscape)
+ {
+ if (!requiresVerticalFlip)
+ {
+ Graphics.Blit(inputTexture, tempRT);
+ }
+ else
+ {
+ // The above Blit can't flip unless using a material, so we use Graphics.DrawTexture instead
+ GL.PushMatrix();
+ RenderTexture.active = tempRT;
+ GL.LoadPixelMatrix(0f, tempRT.width, 0f, tempRT.height);
+ Rect sourceRect = new Rect(0f, 0f, 1f, 1f);
+ // NOTE: not sure why we need to set y to -1, without this there is a 1px gap at the bottom
+ Rect destRect = new Rect(0f, -1f, tempRT.width, tempRT.height);
+
+ Graphics.DrawTexture(destRect, inputTexture, sourceRect, 0, 0, 0, 0);
+ GL.PopMatrix();
+ GL.InvalidateState();
+ }
+ }
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IPHONE || UNITY_IOS || UNITY_TVOS
+ else
+ {
+ Matrix4x4 m = Matrix4x4.identity;
+ switch (ori)
+ {
+ case Orientation.Portrait:
+ m = Matrix4x4.TRS(new Vector3(0f, inputTexture.width, 0f), Quaternion.Euler(0f, 0f, -90f), Vector3.one);
+ break;
+ case Orientation.PortraitFlipped:
+ m = Matrix4x4.TRS(new Vector3(inputTexture.height, 0f, 0f), Quaternion.Euler(0f, 0f, 90f), Vector3.one);
+ break;
+ case Orientation.LandscapeFlipped:
+ m = Matrix4x4.TRS(new Vector3(inputTexture.width, inputTexture.height, 0f), Quaternion.identity, new Vector3(-1f, -1f, 1f));
+ break;
+ }
+
+ // The above Blit can't flip unless using a material, so we use Graphics.DrawTexture instead
+ GL.InvalidateState();
+ RenderTexture.active = tempRT;
+ GL.Clear(false, true, Color.black);
+ GL.PushMatrix();
+ GL.LoadPixelMatrix(0f, tempRT.width, 0f, tempRT.height);
+ Rect sourceRect = new Rect(0f, 0f, 1f, 1f);
+ // NOTE: not sure why we need to set y to -1, without this there is a 1px gap at the bottom
+ Rect destRect = new Rect(0f, -1f, inputTexture.width, inputTexture.height);
+ GL.MultMatrix(m);
+
+ Graphics.DrawTexture(destRect, inputTexture, sourceRect, 0, 0, 0, 0);
+ GL.PopMatrix();
+ GL.InvalidateState();
+ }
+#endif
+
+ if (resultTexture == null)
+ {
+ resultTexture = new Texture2D(textureWidth, textureHeight, TextureFormat.ARGB32, false);
+ }
+
+ RenderTexture.active = tempRT;
+ resultTexture.ReadPixels(new Rect(0f, 0f, textureWidth, textureHeight), 0, 0, false);
+ resultTexture.Apply(false, false);
+ RenderTexture.ReleaseTemporary(tempRT);
+
+ RenderTexture.active = prevRT;
+
+ return resultTexture;
+ }
+
+ // Converts a non-readable texture to a readable Texture2D.
+ // "targetTexture" can be null or you can pass in an existing texture.
+ // Remember to Destroy() the returned texture after finished with it
+ public static Texture2D GetReadableTexture(RenderTexture inputTexture, Texture2D targetTexture = null)
+ {
+ if (targetTexture == null)
+ {
+ targetTexture = new Texture2D(inputTexture.width, inputTexture.height, TextureFormat.ARGB32, false);
+ }
+
+ RenderTexture prevRT = RenderTexture.active;
+ RenderTexture.active = inputTexture;
+ targetTexture.ReadPixels(new Rect(0f, 0f, inputTexture.width, inputTexture.height), 0, 0, false);
+ targetTexture.Apply(false, false);
+ RenderTexture.active = prevRT;
+
+ return targetTexture;
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Helper.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Helper.cs.meta
new file mode 100755
index 0000000..50a5229
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Helper.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 79e446998599e1647804321292c80f42
+timeCreated: 1600887818
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Interfaces.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Interfaces.cs
new file mode 100755
index 0000000..055d643
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Interfaces.cs
@@ -0,0 +1,1011 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public interface IMediaPlayer
+ {
+ void OnEnable();
+ void Update();
+ void EndUpdate();
+ void BeginRender();
+ void Render();
+ IntPtr GetNativePlayerHandle();
+ }
+
+ ///
+ /// Interface for side loading of subtitles in SRT format
+ ///
+ public interface IMediaSubtitles
+ {
+ bool LoadSubtitlesSRT(string data);
+ int GetSubtitleIndex();
+ string GetSubtitleText();
+ }
+
+ public enum BufferedFrameSelectionMode : int
+ {
+ // No buffering, just selects the latest decoded frame
+ None = 0,
+
+ // Selects the newest buffered frame, and displays it until a newer frame is available
+ NewestFrame = 10,
+
+ // Selects the oldest buffered frame, and displays it until a newer frame is available
+ OldestFrame = 11,
+
+ // Selects the next buffered frame, and displays it until the number of buffered frames changes
+ MediaClock = 20,
+
+ // Uses Time.deltaTime to keep a clock which is used to select the buffered frame
+ ElapsedTime = 30,
+
+ // Uses VSync delta time to keep a clock which is used to select the buffered frame
+ // Time.deltaTime is used to calculate the number of vsyncs that have elapsed
+ ElapsedTimeVsynced = 40,
+
+ // Selects the buffered frame corresponding to the external timeStamp (useful for frame-syncing players)
+ FromExternalTime = 50,
+
+ // Selects the closest buffered frame corresponding to the external timeStamp (useful for frame-syncing players)
+ FromExternalTimeClosest = 51,
+ }
+
+ ///
+ /// Interface for buffering frames for more control over the timing of their display
+ ///
+ public interface IBufferedDisplay
+ {
+ ///
+ /// We need to manually call UpdateBufferedDisplay() in the case of master-slave synced playback so that master is updated before slaves
+ ///
+ long UpdateBufferedDisplay();
+
+ BufferedFramesState GetBufferedFramesState();
+
+ void SetSlaves(IBufferedDisplay[] slaves);
+
+ void SetBufferedDisplayMode(BufferedFrameSelectionMode mode, IBufferedDisplay master = null);
+
+ void SetBufferedDisplayOptions(bool pauseOnPrerollComplete);
+ }
+
+ public interface IMediaControl
+ {
+ ///
+ /// Be careful using this method directly. It is best to instead use the OpenMedia() method in the MediaPlayer component as this will set up the events correctly and also perform other checks
+ /// customHttpHeaders is in the format "key1:value1\r\nkey2:value2\r\n"=
+ ///
+ bool OpenMedia(string path, long offset, string customHttpHeaders, MediaHints mediahints, int forceFileFormat = 0, bool startWithHighestBitrate = false);
+ bool OpenMediaFromBuffer(byte[] buffer);
+ bool StartOpenMediaFromBuffer(ulong length);
+ bool AddChunkToMediaBuffer(byte[] chunk, ulong offset, ulong length);
+ bool EndOpenMediaFromBuffer();
+
+#if NETFX_CORE
+ bool OpenMedia(Windows.Storage.Streams.IRandomAccessStream ras, string path, long offset, string customHttpHeaders);
+#endif
+
+ void CloseMedia();
+
+ void SetLooping(bool bLooping);
+ bool IsLooping();
+
+ bool HasMetaData();
+ bool CanPlay();
+ bool IsPlaying();
+ bool IsSeeking();
+ bool IsPaused();
+ bool IsFinished();
+ bool IsBuffering();
+
+ void Play();
+ void Pause();
+ void Stop();
+ void Rewind();
+
+ ///
+ /// The time in seconds seeked will be to the exact time
+ /// This can take a long time is the keyframes are far apart
+ /// Some platforms don't support this and instead seek to the closest keyframe
+ ///
+ void Seek(double time);
+
+ ///
+ /// The time in seconds seeked will be to the closest keyframe
+ ///
+ void SeekFast(double time);
+
+ ///
+ /// The time in seconds seeked to will be within the range [time-timeDeltaBefore, time+timeDeltaAfter] for efficiency.
+ /// Only supported on macOS, iOS and tvOS.
+ /// Other platforms will automatically pass through to Seek()
+ ///
+ void SeekWithTolerance(double time, double timeDeltaBefore, double timeDeltaAfter);
+
+ ///
+ /// Seek to a specific frame, range is [0, GetMaxFrameNumber()]
+ /// NOTE: For best results the video should be encoded as keyframes only
+ /// and have no audio track, or an audio track with the same length as the video track
+ ///
+ void SeekToFrame(int frame, float overrideFrameRate = 0f);
+
+ ///
+ /// Seek forwards or backwards relative to the current frame
+ /// NOTE: For best results the video should be encoded as keyframes only
+ /// and have no audio track, or an audio track with the same length as the video track
+ ///
+ void SeekToFrameRelative(int frameOffset, float overrideFrameRate = 0f);
+
+ ///
+ /// Returns the current video time in seconds
+ ///
+ double GetCurrentTime();
+
+ ///
+ /// Returns the current video time in frames, range is [0, GetMaxFrameNumber()]
+ /// NOTE: For best results the video should be encoded as keyframes only
+ /// and have no audio track, or an audio track with the same length as the video track
+ ///
+ int GetCurrentTimeFrames(float overrideFrameRate = 0f);
+
+ ///
+ /// Returns the current video date and time usually from the
+ /// EXT-X-PROGRAM-DATE-TIME tag on HLS streams
+ /// Only supported on macOS, iOS, tvOS and Android (using ExoPlayer API)
+ /// And Windows 10 using WinRT API
+ ///
+ System.DateTime GetProgramDateTime();
+
+ float GetPlaybackRate();
+ void SetPlaybackRate(float rate);
+
+ void MuteAudio(bool bMute);
+ bool IsMuted();
+ void SetVolume(float volume);
+ void SetBalance(float balance);
+ float GetVolume();
+ float GetBalance();
+
+ /*int GetCurrentVideoTrack();
+ void SetVideoTrack(int index);
+
+ int GetCurrentAudioTrack();
+ void SetAudioTrack(int index);*/
+
+ ///
+ /// Returns a range of time values that can be seeked in seconds
+ ///
+ TimeRanges GetSeekableTimes();
+
+ ///
+ /// Returns a range of time values that contain fully downloaded segments,
+ /// which can be seeked to immediately without requiring additional downloading
+ ///
+ TimeRanges GetBufferedTimes();
+
+ ErrorCode GetLastError();
+ long GetLastExtendedErrorCode();
+
+ void SetTextureProperties(FilterMode filterMode = FilterMode.Bilinear, TextureWrapMode wrapMode = TextureWrapMode.Clamp, int anisoLevel = 1);
+ void GetTextureProperties(out FilterMode filterMode, out TextureWrapMode wrapMode, out int anisoLevel);
+
+ // Audio Grabbing
+
+ ///
+ /// Copies the specified amount of audio into the buffer
+ /// If the specified amount is not yet available then nothing no samples are copied
+ /// The number of audio samples grabbed are returned
+ ///
+ int GrabAudio(float[] buffer, int sampleCount, int channelCount);
+ int GetAudioBufferedSampleCount();
+ int GetAudioChannelCount();
+ AudioChannelMaskFlags GetAudioChannelMask();
+
+ void AudioConfigurationChanged(bool deviceChanged);
+
+ // Audio 360
+
+ void SetAudioChannelMode(Audio360ChannelMode channelMode);
+ void SetAudioHeadRotation(Quaternion q);
+ void ResetAudioHeadRotation();
+ void SetAudioFocusEnabled(bool enabled);
+ void SetAudioFocusProperties(float offFocusLevel, float widthDegrees);
+ void SetAudioFocusRotation(Quaternion q);
+ void ResetAudioFocus();
+
+ bool WaitForNextFrame(Camera dummyCamera, int previousFrameCount);
+
+ [Obsolete("SetPlayWithoutBuffering has been deprecated, see platform specific options for how to enable playback without buffering (if supported).")]
+ void SetPlayWithoutBuffering(bool playWithoutBuffering);
+
+ // Encrypted stream support
+ //void SetKeyServerURL(string url);
+ void SetKeyServerAuthToken(string token);
+ void SetOverrideDecryptionKey(byte[] key);
+
+ // External playback support.
+
+ ///
+ /// Check to see if external playback is currently active on the player.
+ ///
+ bool IsExternalPlaybackActive();
+
+ ///
+ /// Set whether the player is allowed to switch to external playback, e.g. AirPlay.
+ ///
+ void SetAllowsExternalPlayback(bool enable);
+
+ ///
+ /// Sets the video gravity of the player for external playback only.
+ ///
+ void SetExternalPlaybackVideoGravity(ExternalPlaybackVideoGravity gravity);
+ }
+
+ public interface IMediaInfo
+ {
+ ///
+ /// Returns media duration in seconds
+ ///
+ double GetDuration();
+
+ ///
+ /// Returns media duration in frames
+ /// NOTE: For best results the video should be encoded as keyframes only
+ /// and have no audio track, or an audio track with the same length as the video track
+ ///
+ int GetDurationFrames(float overrideFrameRate = 0f);
+
+ ///
+ /// Returns highest frame number that can be seeked to
+ /// NOTE: For best results the video should be encoded as keyframes only
+ /// and have no audio track, or an audio track with the same length as the video track
+ ///
+ int GetMaxFrameNumber(float overrideFrameRate = 0f);
+
+ ///
+ /// Returns video width in pixels
+ ///
+ int GetVideoWidth();
+
+ ///
+ /// Returns video height in pixels
+ ///
+ int GetVideoHeight();
+
+ ///
+ /// Returns the frame rate of the media.
+ ///
+ float GetVideoFrameRate();
+
+ ///
+ /// Returns the current achieved display rate in frames per second
+ ///
+ float GetVideoDisplayRate();
+
+ ///
+ /// Returns true if the media has a visual track
+ ///
+ bool HasVideo();
+
+ ///
+ /// Returns true if the media has a audio track
+ ///
+ bool HasAudio();
+
+ ///
+ /// Returns the a description of which playback path is used internally.
+ /// This can for example expose whether CPU or GPU decoding is being performed
+ /// For Windows the available player descriptions are:
+ /// "DirectShow" - legacy Microsoft API but still very useful especially with modern filters such as LAV
+ /// "MF-MediaEngine-Software" - uses the Windows 8.1 features of the Microsoft Media Foundation API, but software decoding
+ /// "MF-MediaEngine-Hardware" - uses the Windows 8.1 features of the Microsoft Media Foundation API, but GPU decoding
+ /// Android has "MediaPlayer" and "ExoPlayer"
+ /// macOS / tvOS / iOS just has "AVFoundation"
+ ///
+ string GetPlayerDescription();
+
+#if !AVPRO_NEW_GAMMA
+ ///
+ /// Whether this MediaPlayer instance supports linear color space
+ /// If it doesn't then a correction may have to be made in the shader
+ ///
+ bool PlayerSupportsLinearColorSpace();
+#endif
+
+ ///
+ /// Checks if the playback is in a stalled state
+ ///
+ bool IsPlaybackStalled();
+
+ ///
+ /// The affine transform of the texture as an array of six floats: a, b, c, d, tx, ty.
+ ///
+ float[] GetTextureTransform();
+
+ ///
+ /// Gets the estimated bandwidth used by all video players (in bits per second)
+ /// Currently only supported on Android when using ExoPlayer API
+ ///
+ long GetEstimatedTotalBandwidthUsed();
+
+ /*
+ string GetMediaDescription();
+ string GetVideoDescription();
+ string GetAudioDescription();*/
+
+ ///
+ /// Checks if the media is compatible with external playback, for instance via AirPlay.
+ ///
+ bool IsExternalPlaybackSupported();
+
+ // Internal method
+ bool GetDecoderPerformance(ref int activeDecodeThreadCount, ref int decodedFrameCount, ref int droppedFrameCount);
+
+ // Internal method
+ PlaybackQualityStats GetPlaybackQualityStats();
+ }
+
+ #region MediaCaching
+
+ /// Options for configuring media caching.
+ public class MediaCachingOptions
+ {
+ /// The minimum bitrate of the media to cache in bits per second.
+ public double minimumRequiredBitRate;
+
+ /// The minimum resolution of the media to cache.
+ /// Only supported on Android and iOS 14 and later.
+ public Vector2 minimumRequiredResolution;
+
+ /// The maximum bitrate of the media to cache in bits per second.
+ /// Only supported on Android.
+ public double maximumRequiredBitRate;
+
+ /// The maximum resolution of the media to cache.
+ /// Only supported on Android.
+ public Vector2 maximumRequiredResolution;
+
+ /// Human readable title for the cached media.
+ /// iOS: This value will be displayed in the usage pane of the settings app.
+ public string title;
+
+ /// Optional artwork for the cached media in PNG format.
+ /// iOS: This value will be displayed in the usage pane of the settings app.
+ public byte[] artwork;
+ }
+
+ /// Status of the media item in the cache.
+ public enum CachedMediaStatus: int
+ {
+ /// The media has not been cached.
+ NotCached,
+ /// The media is being cached.
+ Caching,
+ /// The media is cached.
+ Cached,
+ /// The media is not cached, something went wrong - check the log.
+ Failed,
+ /// The media caching is paused.
+ Paused
+ }
+
+ /// Interface for the media cache.
+ public interface IMediaCache
+ {
+ /// Test to see if the player can cache media.
+ /// True if media caching is supported.
+ bool IsMediaCachingSupported();
+
+ /// Cache the media specified by url.
+ /// The url of the media.
+ ///
+ ///
+ void AddMediaToCache(string url, string headers = null, MediaCachingOptions options = null);
+
+ /// Cancels the download of the media specified by url.
+ /// The url of the media.
+ void CancelDownloadOfMediaToCache(string url);
+
+ /// Pause the download of the media specified by url.
+ /// The url of the media.
+ void PauseDownloadOfMediaToCache(string url);
+
+ /// Resume the download of the media specified by url.
+ /// The url of the media.
+ void ResumeDownloadOfMediaToCache(string url);
+
+ /// Remove the cached media specified by url.
+ /// The url of the media.
+ void RemoveMediaFromCache(string url);
+
+ /// Get the cached status for the media specified.
+ /// The url of the media.
+ /// The amount of the media that has been cached in the range [0...1].
+ /// The status of the media.
+ CachedMediaStatus GetCachedMediaStatus(string url, ref float progress);
+
+// /// Test if the currently open media is cached.
+// /// True if the media is cached, false otherwise.
+// bool IsMediaCached();
+ }
+
+ #endregion
+
+ public interface ITextureProducer
+ {
+ ///
+ /// Gets the number of textures produced by the media player.
+ ///
+ int GetTextureCount();
+
+ ///
+ /// Returns the Unity texture containing the current frame image.
+ /// The texture pointer will return null while the video is loading
+ /// This texture usually remains the same for the duration of the video.
+ /// There are cases when this texture can change, for instance: if the graphics device is recreated,
+ /// a new video is loaded, or if an adaptive stream (eg HLS) is used and it switches video streams.
+ ///
+ Texture GetTexture(int index = 0);
+
+ ///
+ /// Returns a count of how many times the texture has been updated
+ ///
+ int GetTextureFrameCount();
+
+ ///
+ /// Returns whether this platform supports counting the number of times the texture has been updated
+ ///
+ bool SupportsTextureFrameCount();
+
+ ///
+ /// Returns the presentation time stamp of the current texture
+ ///
+ long GetTextureTimeStamp();
+
+ ///
+ /// Returns the DAR/SAR ratio
+ ///
+ float GetTexturePixelAspectRatio();
+
+ ///
+ /// Returns true if the image on the texture is upside-down
+ ///
+ bool RequiresVerticalFlip();
+
+ ///
+ /// Returns the type of packing used for stereo content
+ ///
+ StereoPacking GetTextureStereoPacking();
+
+ ///
+ /// Returns the whether the texture has transparency
+ ///
+ TransparencyMode GetTextureTransparency();
+
+ ///
+ /// Returns the type of packing used for alpha content
+ ///
+ AlphaPacking GetTextureAlphaPacking();
+
+ ///
+ /// Returns the current transformation required to convert from YpCbCr to RGB colorspaces.
+ ///
+ Matrix4x4 GetYpCbCrTransform();
+
+ ///
+ /// The affine transform of the texture as an array of six floats: [a, b, c, d, tx, ty].
+ ///
+ float[] GetAffineTransform();
+
+ ///
+ /// The full 4x4 transform of the texture
+ ///
+ Matrix4x4 GetTextureMatrix();
+
+#if AVPRO_NEW_GAMMA
+ ///
+ /// Returns the gamma type of a sampled pixel
+ /// Is the texture returns samples in linear gamma then no conversion is need when using Unity's linear color space mode
+ /// If it doesn't then a correction may have to be made in the shader
+ ///
+ TextureGamma GetTextureSampleGamma();
+
+ bool TextureRequiresGammaConversion();
+#endif
+ }
+
+ public enum Platform
+ {
+ Windows,
+ macOS,
+ iOS,
+ tvOS,
+ visionOS,
+ Android,
+ WindowsUWP,
+ WebGL,
+ Count = 7,
+ Unknown = 100,
+ }
+
+ public enum MediaSource
+ {
+ Reference,
+ Path,
+ }
+
+ public enum MediaPathType
+ {
+ AbsolutePathOrURL,
+ RelativeToProjectFolder,
+ RelativeToStreamingAssetsFolder,
+ RelativeToDataFolder,
+ RelativeToPersistentDataFolder,
+ }
+
+ [System.Serializable]
+ public class MediaPath
+ {
+ [SerializeField] MediaPathType _pathType = MediaPathType.RelativeToStreamingAssetsFolder;
+ public MediaPathType PathType { get { return _pathType; } internal set { _pathType = value; } }
+
+ [SerializeField] string _path = string.Empty;
+ public string Path { get { return _path; } internal set { _path = value; } }
+
+ public MediaPath()
+ {
+ _pathType = MediaPathType.RelativeToStreamingAssetsFolder;
+ _path = string.Empty;
+ }
+ public MediaPath(MediaPath copy)
+ {
+ _pathType = copy.PathType;
+ _path = copy.Path;
+ }
+ public MediaPath(string path, MediaPathType pathType)
+ {
+ _pathType = pathType;
+ _path = path;
+ }
+
+ public string GetResolvedFullPath()
+ {
+ string result = Helper.GetFilePath(_path, _pathType);
+
+ #if (UNITY_EDITOR_WIN || (!UNITY_EDITOR && UNITY_STANDALONE_WIN))
+ if (result.Length > 200 && !result.Contains("://"))
+ {
+ result = Helper.ConvertLongPathToShortDOS83Path(result);
+ }
+ #endif
+
+ return result;
+ }
+
+ public static bool operator == (MediaPath a, MediaPath b)
+ {
+ if ((object)a == null)
+ return (object)b == null;
+
+ return a.Equals(b);
+ }
+ public static bool operator != (MediaPath a, MediaPath b)
+ {
+ return !(a == b);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj == null || GetType() != obj.GetType())
+ return false;
+
+ var a = (MediaPath)obj;
+ return (_pathType == a._pathType && _path == a._path);
+ }
+
+ public override int GetHashCode()
+ {
+ return _pathType.GetHashCode() ^ _path.GetHashCode();
+ }
+ }
+
+ public enum OverrideMode
+ {
+ None, // No overide, just use internal logic
+ Override, // Manually override
+ }
+
+ public enum TextureGamma
+ {
+ SRGB,
+ Linear,
+
+ // Future HDR support
+ // PQ,
+ // HLG,
+ }
+
+ public enum StereoPacking : int
+ {
+ None = 0, // Monoscopic
+ TopBottom = 1, // Top is the left eye, bottom is the right eye
+ LeftRight = 2, // Left is the left eye, right is the right eye
+ CustomUV = 3, // Use the mesh UV to unpack, uv0=left eye, uv1=right eye
+ TwoTextures = 4, // First texture left eye, second texture is right eye
+ Unknown = 10,
+ }
+
+ [System.Serializable]
+ public struct MediaHints
+ {
+ public TransparencyMode transparency;
+ public AlphaPacking alphaPacking;
+ public StereoPacking stereoPacking;
+
+ private static MediaHints defaultHints = new MediaHints();
+ public static MediaHints Default { get { return defaultHints; } }
+ }
+
+ [System.Serializable]
+ public struct VideoResolveOptions
+ {
+ public enum AspectRatio
+ {
+ NoScaling,
+ FitVertically,
+ FitHorizontally,
+ FitInside,
+ FitOutside,
+ Stretch
+ }
+
+ [SerializeField] public bool applyHSBC;
+ [SerializeField, Range(0f, 1f)] public float hue;
+ [SerializeField, Range(0f, 1f)] public float saturation;
+ [SerializeField, Range(0f, 1f)] public float brightness;
+ [SerializeField, Range(0f, 1f)] public float contrast;
+ [SerializeField, Range(0.0001f, 10f)] public float gamma;
+ [SerializeField] public Color tint;
+ [SerializeField] public bool generateMipmaps;
+ [SerializeField] public AspectRatio aspectRatio;
+
+ public bool IsColourAdjust()
+ {
+ return (applyHSBC && (hue != 0.0f || saturation != 0.5f || brightness != 0.5f || contrast != 0.5f || gamma != 1.0f));
+ }
+
+ internal void ResetColourAdjust()
+ {
+ hue = 0.0f;
+ saturation = 0.5f;
+ brightness = 0.5f;
+ contrast = 0.5f;
+ gamma = 1.0f;
+ }
+
+ public static VideoResolveOptions Create()
+ {
+ VideoResolveOptions result = new VideoResolveOptions()
+ {
+ tint = Color.white,
+ aspectRatio = AspectRatio.Stretch,
+ };
+ result.ResetColourAdjust();
+
+ return result;
+ }
+ }
+
+ /// Transparency Mode
+ public enum TransparencyMode
+ {
+ Opaque,
+ Transparent,
+ }
+
+ public enum StereoEye
+ {
+ Both,
+ Left,
+ Right,
+ }
+
+ public enum AlphaPacking
+ {
+ None,
+ TopBottom,
+ LeftRight,
+ }
+
+ public enum ErrorCode
+ {
+ None = 0,
+ LoadFailed = 100,
+ DecodeFailed = 200,
+ }
+
+ public enum Orientation
+ {
+ Landscape, // Landscape Right (0 degrees)
+ LandscapeFlipped, // Landscape Left (180 degrees)
+ Portrait, // Portrait Up (90 degrees)
+ PortraitFlipped, // Portrait Down (-90 degrees)
+ PortraitHorizontalMirror, // Portrait that is mirrored horizontally
+ }
+
+ public enum VideoMapping
+ {
+ Unknown,
+ Normal,
+ EquiRectangular360,
+ EquiRectangular180,
+ CubeMap3x2,
+ }
+
+ public enum FileFormat
+ {
+ Unknown,
+ HLS,
+ DASH,
+ SmoothStreaming,
+ }
+
+ public static class Windows
+ {
+ public enum VideoApi
+ {
+ MediaFoundation, // Windows 8.1 and above
+ DirectShow, // Legacy API
+ WinRT, // Windows 10 and above
+ };
+
+ public enum AudioOutput
+ {
+ System, // Default
+ Unity, // Media Foundation API only
+ FacebookAudio360, // Media Foundation API only
+ None, // Media Foundation API only
+ }
+
+ // WIP: Experimental feature to allow overriding audio device for VR headsets
+ public const string AudioDeviceOutputName_Vive = "HTC VIVE USB Audio";
+ public const string AudioDeviceOutputName_Rift = "Headphones (Rift Audio)";
+ }
+
+ public static class WindowsUWP
+ {
+ public enum VideoApi
+ {
+ MediaFoundation, // UWP 8.1 and above
+ WinRT, // UWP 10 and above
+ };
+
+ public enum AudioOutput
+ {
+ System, // Default
+ Unity, // Media Foundation API only
+ FacebookAudio360, // Media Foundation API only
+ None, // Media Foundation API only
+ }
+ }
+
+ public static class Android
+ {
+ public enum VideoApi
+ {
+ MediaPlayer = 1,
+ ExoPlayer,
+ }
+
+ public enum AudioOutput
+ {
+ System, // Default
+ Unity, // ExoPlayer API only
+ FacebookAudio360, // ExoPlayer API only
+ }
+
+ public enum TextureFiltering
+ {
+ Point,
+ Bilinear,
+ Trilinear,
+ }
+
+ public const int Default_MinBufferTimeMs = 50000; // Only valid when using ExoPlayer (default comes from DefaultLoadControl.DEFAULT_MIN_BUFFER_MS)
+ public const int Default_MaxBufferTimeMs = 50000; // Only valid when using ExoPlayer (default comes from DefaultLoadControl.DEFAULT_MAX_BUFFER_MS)
+ public const int Default_BufferForPlaybackMs = 2500; // Only valid when using ExoPlayer (default comes from DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS)
+ public const int Default_BufferForPlaybackAfterRebufferMs = 5000; // Only valid when using ExoPlayer (default comes from DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS)
+ }
+
+ public static class WebGL
+ {
+ public enum ExternalLibrary
+ {
+ None,
+ DashJs,
+ HlsJs,
+ Custom,
+ }
+ }
+
+ // Facebook Audio 360 channel mapping
+ public enum Audio360ChannelMode
+ {
+ TBE_8_2 = 0, /// 8 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio
+ TBE_8, /// 8 channels of hybrid TBE ambisonics. NO head-locked stereo audio
+ TBE_6_2, /// 6 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio
+ TBE_6, /// 6 channels of hybrid TBE ambisonics. NO head-locked stereo audio
+ TBE_4_2, /// 4 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio
+ TBE_4, /// 4 channels of hybrid TBE ambisonics. NO head-locked stereo audio
+ TBE_8_PAIR0, /// Channels 1 and 2 of TBE hybrid ambisonics
+ TBE_8_PAIR1, /// Channels 3 and 4 of TBE hybrid ambisonics
+ TBE_8_PAIR2, /// Channels 5 and 6 of TBE hybrid ambisonics
+ TBE_8_PAIR3, /// Channels 7 and 8 of TBE hybrid ambisonics
+ TBE_CHANNEL0, /// Channels 1 of TBE hybrid ambisonics
+ TBE_CHANNEL1, /// Channels 2 of TBE hybrid ambisonics
+ TBE_CHANNEL2, /// Channels 3 of TBE hybrid ambisonics
+ TBE_CHANNEL3, /// Channels 4 of TBE hybrid ambisonics
+ TBE_CHANNEL4, /// Channels 5 of TBE hybrid ambisonics
+ TBE_CHANNEL5, /// Channels 6 of TBE hybrid ambisonics
+ TBE_CHANNEL6, /// Channels 7 of TBE hybrid ambisonics
+ TBE_CHANNEL7, /// Channels 8 of TBE hybrid ambisonics
+ HEADLOCKED_STEREO, /// Head-locked stereo audio
+ HEADLOCKED_CHANNEL0, /// Channels 1 or left of head-locked stereo audio
+ HEADLOCKED_CHANNEL1, /// Channels 2 or right of head-locked stereo audio
+ AMBIX_4, /// 4 channels of first order ambiX
+ AMBIX_4_2, /// 4 channels of first order ambiX with 2 channels of head-locked audio
+ AMBIX_9, /// 9 channels of second order ambiX
+ AMBIX_9_2, /// 9 channels of second order ambiX with 2 channels of head-locked audio
+ AMBIX_16, /// 16 channels of third order ambiX
+ AMBIX_16_2, /// 16 channels of third order ambiX with 2 channels of head-locked audio
+ MONO, /// Mono audio
+ STEREO, /// Stereo audio
+ UNKNOWN, /// Unknown channel map
+ INVALID, /// Invalid/unknown map. This must always be last.
+ }
+
+ [System.Flags]
+ public enum AudioChannelMaskFlags : int
+ {
+ Unspecified = 0x0,
+ FrontLeft = 0x1,
+ FrontRight = 0x2,
+ FrontCenter = 0x4,
+ LowFrequency = 0x8,
+ BackLeft = 0x10,
+ BackRight = 0x20,
+ FrontLeftOfCenter = 0x40,
+ FrontRightOfCenter = 0x80,
+ BackCenter = 0x100,
+ SideLeft = 0x200,
+ SideRight = 0x400,
+ TopCenter = 0x800,
+ TopFrontLeft = 0x1000,
+ TopFrontCenter = 0x2000,
+ TopFrontRight = 0x4000,
+ TopBackLeft = 0x8000,
+ TopBackCenter = 0x10000,
+ TopBackRight = 0x20000,
+ }
+
+ public enum TextureFlags : int
+ {
+ Unknown = 0,
+ TopDown = 1 << 0,
+ SamplingIsLinear = 1 << 1,
+ }
+
+ [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 1)]
+ public struct BufferedFramesState
+ {
+ public System.Int32 freeFrameCount;
+ public System.Int32 bufferedFrameCount;
+ public System.Int64 minTimeStamp;
+ public System.Int64 maxTimeStamp;
+ public System.Int32 prerolledCount;
+ }
+
+ [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 1)]
+ public struct TextureFrame
+ {
+ internal System.IntPtr texturePointer;
+ internal System.IntPtr auxTexturePointer;
+ internal System.Int64 timeStamp;
+ internal System.UInt32 frameCounter;
+ internal System.UInt32 writtenFrameCount;
+ internal TextureFlags flags;
+ internal System.IntPtr internalNativePointer;
+ }
+
+ [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 1)]
+ public struct TimeRange
+ {
+ public TimeRange(double startTime, double duration)
+ {
+ this.startTime = startTime;
+ this.duration = duration;
+ }
+
+ public double startTime, duration;
+
+ public double StartTime { get { return startTime; } }
+ public double EndTime { get { return startTime + duration; } }
+ public double Duration { get { return duration; } }
+ }
+
+ public class TimeRanges : IEnumerable
+ {
+ internal TimeRanges() {}
+
+ public IEnumerator GetEnumerator()
+ {
+ return _ranges.GetEnumerator();
+ }
+
+ public TimeRange this[int index]
+ {
+ get
+ {
+ return _ranges[index];
+ }
+ }
+
+ public override string ToString()
+ {
+ return $"TimeRanges: {{ MinTime: {MinTime}, MaxTime: {MaxTime}, Duration: {Duration}, Count: {Count} }}";
+ }
+
+ internal TimeRanges(TimeRange[] ranges)
+ {
+ _ranges = ranges;
+ CalculateRange();
+ }
+
+ internal void CalculateRange()
+ {
+ _minTime = _maxTime = 0.0;
+ if (_ranges != null && _ranges.Length > 0)
+ {
+ double maxTime = 0.0;
+ double minTime = double.MaxValue;
+ for (int i = 0; i < _ranges.Length; i++)
+ {
+ minTime = System.Math.Min(minTime, _ranges[i].startTime);
+ maxTime = System.Math.Max(maxTime, _ranges[i].startTime + _ranges[i].duration);
+ }
+ _minTime = minTime;
+ _maxTime = maxTime;
+ }
+ }
+
+ public int Count { get { return _ranges.Length; } }
+ public double MinTime { get { return _minTime; } }
+ public double MaxTime { get { return _maxTime; } }
+ public double Duration { get { return (_maxTime - _minTime); } }
+
+ internal TimeRange[] _ranges = new TimeRange[0];
+ internal double _minTime = 0.0;
+ internal double _maxTime = 0.0;
+ }
+
+ ///
+ /// Video gravity to use with external playback.
+ ///
+ public enum ExternalPlaybackVideoGravity
+ {
+ /// Resizes the video to fit the display, may cause stretching.
+ Resize,
+ /// Resizes the video whilst preserving the video's aspect ratio to fit the display bounds.
+ ResizeAspect,
+ /// Resizes the video whilst preserving aspect to fill the display bounds.
+ ResizeAspectFill,
+ };
+
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Interfaces.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Interfaces.cs.meta
new file mode 100755
index 0000000..156ab7c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Interfaces.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 00407cbf3ca503142903894431082ac6
+timeCreated: 1438695622
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/PlaybackQualityStats.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/PlaybackQualityStats.cs
new file mode 100755
index 0000000..489834b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/PlaybackQualityStats.cs
@@ -0,0 +1,225 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Attempts to give insight into video playback presentation smoothness quality
+ /// Keeps track of skipped and duplicated frames and warns about suboptimal setup
+ /// such as no vsync enabled or video frame rate not being a multiple of the display frame rate
+ ///
+ public class PlaybackQualityStats
+ {
+ public int SkippedFrames { get; private set; }
+ public int DuplicateFrames { get; private set; }
+ public int UnityDroppedFrames { get; private set; }
+ public float PerfectFramesT { get; private set; }
+ public string VSyncStatus { get; private set; }
+ private int PerfectFrames { get; set; }
+ private int TotalFrames { get; set; }
+
+ public bool LogIssues { get; set; }
+
+ private int _sameFrameCount;
+ private long _lastTimeStamp;
+ private BaseMediaPlayer _player;
+
+ public void Reset()
+ {
+ _sameFrameCount = 0;
+ if (_player != null)
+ {
+ _lastTimeStamp = _player.GetTextureTimeStamp();
+ }
+
+ SkippedFrames = 0;
+ DuplicateFrames = 0;
+ UnityDroppedFrames = 0;
+ TotalFrames = 0;
+ PerfectFrames = 0;
+ PerfectFramesT = 0f;
+ }
+
+ internal void Start(BaseMediaPlayer player)
+ {
+ _player = player;
+ Reset();
+
+ bool vsyncEnabled = true;
+ if (QualitySettings.vSyncCount == 0)
+ {
+ vsyncEnabled = false;
+ if (LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] VSync is currently disabled in Quality Settings");
+ }
+ }
+ if (!IsGameViewVSyncEnabled())
+ {
+ vsyncEnabled = false;
+ if (LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] VSync is currently disabled in the Game View");
+ }
+ }
+
+ float frameRate = _player.GetVideoFrameRate();
+ float frameMs = (1000f / frameRate);
+ if (LogIssues)
+ {
+ Debug.Log(string.Format("[AVProVideo][Quality] Video: {0}fps {1}ms", frameRate, frameMs));
+ }
+
+ if (vsyncEnabled)
+ {
+#if UNITY_2022_2_OR_NEWER
+ float refreshRate = (float)( Screen.currentResolution.refreshRateRatio.value );
+#else
+ float refreshRate = (float)( Screen.currentResolution.refreshRate );
+#endif
+
+ float vsyncRate = refreshRate / QualitySettings.vSyncCount;
+ float vsyncMs = (1000f / vsyncRate);
+
+ if (LogIssues)
+ {
+ Debug.Log(string.Format("[AVProVideo][Quality] VSync: {0}fps {1}ms", vsyncRate, vsyncMs));
+ }
+
+ float framesPerVSync = frameMs / vsyncMs;
+ float fractionalframesPerVsync = framesPerVSync - Mathf.FloorToInt(framesPerVSync);
+ if (fractionalframesPerVsync > 0.0001f && LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] Video is not a multiple of VSync so playback cannot be perfect");
+ }
+ VSyncStatus = "VSync " + framesPerVSync;
+ }
+ else
+ {
+ if (LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] Running without VSync enabled");
+ }
+ VSyncStatus = "No VSync";
+ }
+ }
+
+ internal void Update()
+ {
+ if (_player == null) return;
+
+ // Don't analyse stats unless real playback is happening
+ if (_player.IsPaused() || _player.IsSeeking() || _player.IsFinished()) return;
+
+ long timeStamp = _player.GetTextureTimeStamp();
+ long frameDuration = (long)(Helper.SecondsToHNS / _player.GetVideoFrameRate());
+
+ bool isPerfectFrame = true;
+
+ // Check for skipped frames
+ long d = (timeStamp - _lastTimeStamp);
+ if (d > 0)
+ {
+ const long threshold = 10000;
+ d -= frameDuration;
+ if (d > threshold)
+ {
+ int skippedFrames = Mathf.FloorToInt((float)d / (float)frameDuration);
+ if (LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] Possible frame skip, at " + timeStamp + " delta " + d + " = " + skippedFrames + " frames");
+ }
+ SkippedFrames += skippedFrames;
+ isPerfectFrame = false;
+ }
+ }
+
+ if (QualitySettings.vSyncCount != 0)
+ {
+#if UNITY_2022_2_OR_NEWER
+ float refreshRate = (float)( Screen.currentResolution.refreshRateRatio.value );
+#else
+ float refreshRate = (float)( Screen.currentResolution.refreshRate );
+#endif
+
+ long vsyncDuration = (long)((QualitySettings.vSyncCount * Helper.SecondsToHNS) / refreshRate);
+ if (timeStamp != _lastTimeStamp)
+ {
+ float framesPerVSync = (float)frameDuration / (float)vsyncDuration;
+ //Debug.Log((float)frameDuration + " " + (float)vsyncDuration);
+ float fractionalFramesPerVSync = framesPerVSync - Mathf.FloorToInt(framesPerVSync);
+
+ //Debug.Log(framesPerVSync + " " + fractionalFramesPerVSync);
+ // VSync rate is a multiple of the video rate so we should be able to get perfectly smooth playback
+ if (fractionalFramesPerVSync <= 0.0001f)
+ {
+ // Check for duplicate frames
+ if (!Mathf.Approximately(_sameFrameCount, (int)framesPerVSync))
+ {
+ if (LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] Frame " + timeStamp + " was shown for " + _sameFrameCount + " frames instead of expected " + framesPerVSync);
+ }
+ DuplicateFrames++;
+ isPerfectFrame = false;
+ }
+ }
+
+ _sameFrameCount = 1;
+ }
+ else
+ {
+ // Count the number of Unity-frames the video-frame is displayed for
+ _sameFrameCount++;
+ }
+
+ // Check for Unity dropping frames
+ {
+ long frameTime = (long)(Time.deltaTime * Helper.SecondsToHNS);
+ if (frameTime > (vsyncDuration + (vsyncDuration / 3)))
+ {
+ if (LogIssues)
+ {
+ Debug.LogWarning("[AVProVideo][Quality] Possible Unity dropped frame, delta time: " + (Time.deltaTime * 1000f) + "ms");
+ }
+ UnityDroppedFrames++;
+ isPerfectFrame = false;
+ }
+ }
+ }
+
+ if (_lastTimeStamp != timeStamp)
+ {
+ if (isPerfectFrame)
+ {
+ PerfectFrames++;
+ }
+ TotalFrames++;
+ PerfectFramesT = (float)PerfectFrames / (float)TotalFrames;
+ }
+
+ _lastTimeStamp = timeStamp;
+ }
+
+ private static bool IsGameViewVSyncEnabled()
+ {
+ bool result = true;
+#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
+ System.Reflection.Assembly assembly = typeof(UnityEditor.EditorWindow).Assembly;
+ System.Type type = assembly.GetType("UnityEditor.GameView");
+ UnityEditor.EditorWindow window = UnityEditor.EditorWindow.GetWindow(type);
+ System.Reflection.PropertyInfo prop = type.GetProperty("vSyncEnabled");
+ if (prop != null)
+ {
+ result = (bool)prop.GetValue(window);
+ }
+#endif
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/PlaybackQualityStats.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/PlaybackQualityStats.cs.meta
new file mode 100755
index 0000000..941ea79
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/PlaybackQualityStats.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4f344d823db9c4148af4dec2235f690d
+timeCreated: 1634119397
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players.meta
new file mode 100755
index 0000000..04e10d3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e2f8dd08c4c77654282b755fd4a069c1
+folderAsset: yes
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/NullMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/NullMediaPlayer.cs
new file mode 100755
index 0000000..9c0d16b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/NullMediaPlayer.cs
@@ -0,0 +1,347 @@
+using System;
+using System.Text;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// This media player fakes video playback for platforms that aren't supported
+ ///
+ public sealed partial class NullMediaPlayer : BaseMediaPlayer
+ {
+ private bool _isPlaying = false;
+ private bool _isPaused = false;
+ private double _currentTime = 0.0;
+// private bool _audioMuted = false;
+ private float _volume = 0.0f;
+ private float _playbackRate = 1.0f;
+ private bool _bLoop;
+
+ private int _Width = 256;
+ private int _height = 256;
+ private Texture2D _texture;
+ private Texture2D _texture_AVPro;
+ private Texture2D _texture_AVPro1;
+ private float _fakeFlipTime;
+ private int _frameCount;
+
+ private const float FrameRate = 10f;
+
+ ///
+ public override string GetVersion()
+ {
+ return "0.0.0";
+ }
+
+ ///
+ public override string GetExpectedVersion()
+ {
+ return GetVersion();
+ }
+
+ ///
+ public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
+ {
+ _texture_AVPro = (Texture2D)Resources.Load("Textures/AVProVideo-NullPlayer-Frame0");
+ _texture_AVPro1 = (Texture2D)Resources.Load("Textures/AVProVideo-NullPlayer-Frame1");
+
+ if( _texture_AVPro )
+ {
+ _Width = _texture_AVPro.width;
+ _height = _texture_AVPro.height;
+ }
+
+ _texture = _texture_AVPro;
+
+ _fakeFlipTime = 0.0f;
+ _frameCount = 0;
+
+ return true;
+ }
+
+ ///
+ public override void CloseMedia()
+ {
+ _frameCount = 0;
+ Resources.UnloadAsset(_texture_AVPro);
+ Resources.UnloadAsset(_texture_AVPro1);
+
+ base.CloseMedia();
+ }
+
+ ///
+ public override void SetLooping( bool bLooping )
+ {
+ _bLoop = bLooping;
+ }
+
+ ///
+ public override bool IsLooping()
+ {
+ return _bLoop;
+ }
+
+ ///
+ public override bool HasMetaData()
+ {
+ return true;
+ }
+
+ ///
+ public override bool CanPlay()
+ {
+ return true;
+ }
+
+ ///
+ public override bool HasAudio()
+ {
+ return false;
+ }
+
+ ///
+ public override bool HasVideo()
+ {
+ return false;
+ }
+
+ ///
+ public override void Play()
+ {
+ _isPlaying = true;
+ _isPaused = false;
+ _fakeFlipTime = 0.0f;
+ }
+
+ ///
+ public override void Pause()
+ {
+ _isPlaying = false;
+ _isPaused = true;
+ }
+
+ ///
+ public override void Stop()
+ {
+ _isPlaying = false;
+ _isPaused = false;
+ }
+
+ ///
+ public override bool IsSeeking()
+ {
+ return false;
+ }
+ ///
+ public override bool IsPlaying()
+ {
+ return _isPlaying;
+ }
+ ///
+ public override bool IsPaused()
+ {
+ return _isPaused;
+ }
+ ///
+ public override bool IsFinished()
+ {
+ return _isPlaying && (_currentTime >= GetDuration());
+ }
+
+ ///
+ public override bool IsBuffering()
+ {
+ return false;
+ }
+
+ ///
+ public override double GetDuration()
+ {
+ return 10.0;
+ }
+
+ ///
+ public override int GetVideoWidth()
+ {
+ return _Width;
+ }
+
+ ///
+ public override int GetVideoHeight()
+ {
+ return _height;
+ }
+
+ ///
+ public override float GetVideoDisplayRate()
+ {
+ return FrameRate;
+ }
+
+ ///
+ public override Texture GetTexture( int index )
+ {
+// return _texture ? _texture : Texture2D.whiteTexture;
+ return _texture;
+ }
+
+ ///
+ public override int GetTextureFrameCount()
+ {
+ return _frameCount;
+ }
+
+ internal override StereoPacking InternalGetTextureStereoPacking()
+ {
+ return StereoPacking.Unknown;
+ }
+
+ ///
+ public override bool RequiresVerticalFlip()
+ {
+ return false;
+ }
+
+ ///
+ public override void Seek(double time)
+ {
+ _currentTime = time;
+ }
+
+ ///
+ public override void SeekFast(double time)
+ {
+ _currentTime = time;
+ }
+
+ ///
+ public override double GetCurrentTime()
+ {
+ return _currentTime;
+ }
+
+ ///
+ public override void SetPlaybackRate(float rate)
+ {
+ _playbackRate = rate;
+ }
+
+ ///
+ public override float GetPlaybackRate()
+ {
+ return _playbackRate;
+ }
+
+ ///
+ public override void MuteAudio(bool bMuted)
+ {
+// _audioMuted = bMuted;
+ }
+
+ ///
+ public override bool IsMuted()
+ {
+ return true;
+ }
+
+ ///
+ public override void SetVolume(float volume)
+ {
+ _volume = volume;
+ }
+
+ ///
+ public override float GetVolume()
+ {
+ return _volume;
+ }
+
+ ///
+ public override float GetVideoFrameRate()
+ {
+ return 0.0f;
+ }
+
+ ///
+ public override void Update()
+ {
+ UpdateSubtitles();
+
+ if (_isPlaying)
+ {
+ _currentTime += Time.deltaTime;
+ if (_currentTime >= GetDuration())
+ {
+ _currentTime = GetDuration();
+ if( _bLoop )
+ {
+ Rewind();
+ }
+ }
+
+ //
+
+ _fakeFlipTime += Time.deltaTime;
+ if( _fakeFlipTime >= (1.0 / FrameRate))
+ {
+ _fakeFlipTime = 0.0f;
+ _texture = ( _texture == _texture_AVPro ) ? _texture_AVPro1 : _texture_AVPro;
+ _frameCount++;
+ }
+ }
+ }
+
+ ///
+ public override void Render()
+ {
+ }
+
+ ///
+ public override void Dispose()
+ {
+ }
+ }
+
+ public sealed partial class NullMediaPlayer : BaseMediaPlayer
+ {
+ internal override bool InternalSetActiveTrack(TrackType trackType, int trackUid)
+ {
+ // Set the active text track using the unique identifier
+ // Or disable all text tracks if < 0
+ return false;
+ }
+
+ internal override bool InternalIsChangedTracks(TrackType trackType)
+ {
+ // Has the tracks changed since the last frame 'tick'
+ return false;
+ }
+
+ internal override int InternalGetTrackCount(TrackType trackType)
+ {
+ // Return number of text tracks
+ return 0;
+ }
+
+ internal override TrackBase InternalGetTrackInfo(TrackType trackType, int index, ref bool isActiveTrack)
+ {
+ // Get information about the specific track at index, range is [0...InternalGetTextTrackCount)
+ return null;
+ }
+
+ internal override bool InternalIsChangedTextCue()
+ {
+ // Has the text cue changed since the last frame 'tick'
+ return false;
+ }
+
+ internal override string InternalGetCurrentTextCue()
+ {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/NullMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/NullMediaPlayer.cs.meta
new file mode 100755
index 0000000..3e55861
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/NullMediaPlayer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 478671181ab1c9b42be924da77d7fcbe
+timeCreated: 1438703159
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer+Native.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer+Native.cs
new file mode 100755
index 0000000..ff04865
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer+Native.cs
@@ -0,0 +1,552 @@
+//-----------------------------------------------------------------------------
+// Copyright 2015-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+#if UNITY_2017_2_OR_NEWER && (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || (!UNITY_EDITOR && (UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID)))
+
+using System;
+using System.Runtime.InteropServices;
+using UnityEngine;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public sealed partial class PlatformMediaPlayer
+ {
+ internal partial struct Native
+ {
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
+ private const string PluginName = "AVProVideo";
+#elif UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS
+ private const string PluginName = "__Internal";
+#elif UNITY_ANDROID
+ private const string PluginName = "AVProVideo2Native";
+#endif
+
+ internal const int kAVPPlayerRenderEventId = 0x5d5ac000;
+ internal const int kAVPPlayerRenderEventMask = 0x7ffff000;
+ internal const int kAVPPlayerRenderEventTypeMask = 0x00000f00;
+ internal const int kAVPPlayerRenderEventTypeShift = 8;
+ internal const int kAVPPlayerRenderEventDataPlayerIDMask = 0xffff;
+ internal const int kAVPPlayerRenderEventDataPlayerIDShift = 0;
+ internal const int kAVPPlayerRenderEventDataOptionsMask = 0xff;
+ internal const int kAVPPlayerRenderEventDataOptionsShift = 16;
+
+ internal enum AVPPluginRenderEvent: int
+ {
+ None,
+ PlayerSetup,
+ PlayerRender,
+ PlayerFreeResources,
+ }
+
+ [Flags]
+ internal enum AVPPlayerRenderEventPlayerSetupFlags: int
+ {
+ AndroidUseOESFastPath = 1 << 0,
+ LinearColourSpace = 1 << 1,
+ }
+
+ // Video settings
+
+ internal enum AVPPlayerVideoAPI: int
+ {
+ // Apple - just included for completeness
+ AVFoundation,
+
+ // Android - Matches Android.VideoApi
+ MediaPlayer = Android.VideoApi.MediaPlayer,
+ ExoPlayer = Android.VideoApi.ExoPlayer,
+ }
+ internal enum AVPPlayerVideoPixelFormat: int
+ {
+ Invalid,
+ Bgra,
+ YCbCr420
+ }
+
+ [Flags]
+ internal enum AVPPlayerVideoOutputSettingsFlags: int
+ {
+ None = 0,
+ LinearColorSpace = 1 << 0,
+ GenerateMipmaps = 1 << 1,
+ PreferSoftwareDecoder = 1 << 2,
+ ForceEnableMediaCodecAsynchronousQueueing = 1 << 3,
+ }
+
+ // Audio settings
+
+ internal enum AVPPlayerAudioOutputMode : int
+ {
+ SystemDirect,
+ Unity,
+ SystemDirectWithCapture,
+ FacebookAudio360,
+ }
+
+ // Network settings
+
+ [Flags]
+ internal enum AVPPlayerNetworkSettingsFlags: int
+ {
+ None = 0,
+ PlayWithoutBuffering = 1 << 0,
+ UseSinglePlayerItem = 1 << 1,
+ ForceStartHighestBitrate = 1 << 2,
+ ForceRtpTCP = 1 << 3,
+ }
+
+ // NOTE: The layout of this structure is important - if adding anything put it at the end, make sure alignment is 4 bytes and DO NOT USE bool
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerSettings
+ {
+ // Video
+ internal AVPPlayerVideoAPI videoApi;
+ internal AVPPlayerVideoPixelFormat pixelFormat;
+ internal AVPPlayerVideoOutputSettingsFlags videoFlags;
+ internal float preferredMaximumResolution_width;
+ internal float preferredMaximumResolution_height;
+ internal float maximumPlaybackRate;
+
+ // Audio
+ internal AVPPlayerAudioOutputMode audioOutputMode;
+ internal int sampleRate;
+ internal int bufferLength;
+ internal int audioFlags;
+ internal Audio360ChannelMode audio360Channels;
+ internal int audio360LatencyMS;
+
+ // Network
+ internal double preferredPeakBitRate;
+ internal double preferredForwardBufferDuration;
+ internal AVPPlayerNetworkSettingsFlags networkFlags;
+ internal int minBufferMs;
+ internal int maxBufferMs;
+ internal int bufferForPlaybackMs;
+ internal int bufferForPlaybackAfterRebufferMs;
+ }
+
+ internal enum AVPPlayerOpenOptionsForceFileFormat: int
+ {
+ Unknown,
+ HLS,
+ DASH,
+ SmoothStreaming
+ };
+
+ [Flags]
+ internal enum AVPPlayerOpenOptionsFlags: int
+ {
+ None = 0,
+ };
+
+ // NOTE: The layout of this structure is important - if adding anything put it at the end, make sure alignment is 4 bytes and DO NOT USE bool
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerOpenOptions
+ {
+ internal long fileOffset;
+ internal AVPPlayerOpenOptionsForceFileFormat forceFileFormat;
+ internal AVPPlayerOpenOptionsFlags flags;
+ };
+
+ [Flags]
+ internal enum AVPPlayerStatus : int
+ {
+ Unknown = 0,
+ ReadyToPlay = 1 << 0,
+ Playing = 1 << 1,
+ Paused = 1 << 2,
+ Finished = 1 << 3,
+ Seeking = 1 << 4,
+ Buffering = 1 << 5,
+ Stalled = 1 << 6,
+ ExternalPlaybackActive = 1 << 7,
+ Cached = 1 << 8,
+ FinishedSeeking = 1 << 9,
+
+ UpdatedAssetInfo = 1 << 16,
+ UpdatedTexture = 1 << 17,
+ UpdatedBufferedTimeRanges = 1 << 18,
+ UpdatedSeekableTimeRanges = 1 << 19,
+ UpdatedText = 1 << 20,
+ UpdatedTextureTransform = 1 << 21,
+
+ HasVideo = 1 << 24,
+ HasAudio = 1 << 25,
+ HasText = 1 << 26,
+ HasMetadata = 1 << 27,
+
+ Failed = 1 << 31
+ }
+
+ [Flags]
+ internal enum AVPPlayerFlags : int
+ {
+ None = 0,
+ Looping = 1 << 0,
+ Muted = 1 << 1,
+ AllowExternalPlayback = 1 << 2,
+ ResumePlayback = 1 << 16, // iOS only, resumes playback after audio session route change
+ Dirty = 1 << 31
+ }
+
+ internal enum AVPPlayerExternalPlaybackVideoGravity : int
+ {
+ Resize,
+ ResizeAspect,
+ ResizeAspectFill
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerSize
+ {
+ internal float width;
+ internal float height;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPAffineTransform
+ {
+ internal float a;
+ internal float b;
+ internal float c;
+ internal float d;
+ internal float tx;
+ internal float ty;
+ }
+
+ [Flags]
+ internal enum AVPPlayerAssetFlags : int
+ {
+ None = 0,
+ CompatibleWithAirPlay = 1 << 0,
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerAssetInfo
+ {
+ internal double duration;
+ internal AVPPlayerSize dimensions;
+ internal float frameRate;
+ internal int videoTrackCount;
+ internal int audioTrackCount;
+ internal int textTrackCount;
+ internal AVPPlayerAssetFlags flags;
+ }
+
+ [Flags]
+ internal enum AVPPlayerTrackFlags: int
+ {
+ Default = 1 << 0,
+ }
+
+ internal enum AVPPlayerVideoTrackStereoMode: int
+ {
+ Unknown,
+ Monoscopic,
+ StereoscopicTopBottom,
+ StereoscopicLeftRight,
+ StereoscopicCustom,
+ StereoscopicRightLeft,
+ }
+
+ [Flags]
+ internal enum AVPPlayerVideoTrackFlags: int
+ {
+ HasAlpha = 1 << 0,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerVideoTrackInfo
+ {
+ [MarshalAs(UnmanagedType.LPWStr)] internal string name;
+ [MarshalAs(UnmanagedType.LPWStr)] internal string language;
+ internal int trackId;
+ internal float estimatedDataRate;
+ internal uint codecSubtype;
+ internal AVPPlayerTrackFlags flags;
+
+ internal AVPPlayerSize dimensions;
+ internal float frameRate;
+ internal AVPAffineTransform transform;
+ internal AVPPlayerVideoTrackStereoMode stereoMode;
+ internal int bitsPerComponent;
+ internal AVPPlayerVideoTrackFlags videoTrackFlags;
+
+ internal Matrix4x4 yCbCrTransform;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerAudioTrackInfo
+ {
+ [MarshalAs(UnmanagedType.LPWStr)] internal string name;
+ [MarshalAs(UnmanagedType.LPWStr)] internal string language;
+ internal int trackId;
+ internal float estimatedDataRate;
+ internal uint codecSubtype;
+ internal AVPPlayerTrackFlags flags;
+
+ internal double sampleRate;
+ internal uint channelCount;
+ internal uint channelLayoutTag;
+ internal AudioChannelMaskFlags channelBitmap;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerTextTrackInfo
+ {
+ [MarshalAs(UnmanagedType.LPWStr)] internal string name;
+ [MarshalAs(UnmanagedType.LPWStr)] internal string language;
+ internal int trackId;
+ internal float estimatedDataRate;
+ internal uint codecSubtype;
+ internal AVPPlayerTrackFlags flags;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerTimeRange
+ {
+ internal double start;
+ internal double duration;
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerState
+ {
+ internal AVPPlayerStatus status;
+ internal double currentTime;
+ internal double currentDate;
+ internal int selectedVideoTrack;
+ internal int selectedAudioTrack;
+ internal int selectedTextTrack;
+ internal int bufferedTimeRangesCount;
+ internal int seekableTimeRangesCount;
+ internal int audioCaptureBufferedSamplesCount;
+ }
+
+ internal enum AVPPlayerTextureFormat: int
+ {
+ Unknown,
+ BGRA8,
+ R8,
+ RG8,
+ BC1,
+ BC3,
+ BC4,
+ BC5,
+ BC7,
+ BGR10A2,
+ R16,
+ RG16,
+ BGR10XR,
+ RGBA16Float,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerTexturePlane
+ {
+ internal IntPtr plane;
+ internal int width;
+ internal int height;
+ internal AVPPlayerTextureFormat textureFormat;
+ }
+
+ [Flags]
+ internal enum AVPPlayerTextureFlags: int
+ {
+ None = 0,
+ Flipped = 1 << 0,
+ Linear = 1 << 1,
+ Mipmapped = 1 << 2,
+ }
+
+ internal enum AVPPlayerTextureYCbCrMatrix: int
+ {
+ Identity,
+ ITU_R_601,
+ ITU_R_709,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerTexture
+ {
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst=2)]
+ internal AVPPlayerTexturePlane[] planes;
+ internal long itemTime;
+ internal int frameCount;
+ internal int planeCount;
+ internal AVPPlayerTextureFlags flags;
+ internal AVPPlayerTextureYCbCrMatrix YCbCrMatrix;
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AVPPlayerText
+ {
+ internal IntPtr buffer;
+ internal long itemTime;
+ internal int length;
+ internal int sequence;
+ };
+
+ internal enum AVPPlayerTrackType: int
+ {
+ Video,
+ Audio,
+ Text
+ };
+
+ internal static string GetPluginVersion()
+ {
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(AVPPluginGetVersionStringPointer());
+ }
+
+#if !UNITY_EDITOR && (UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS)
+ [DllImport(PluginName)]
+ internal static extern void AVPPluginBootstrap();
+#elif !UNITY_EDITOR && (UNITY_ANDROID)
+ internal static void AVPPluginBootstrap()
+ {
+ AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+ if (activityClass != null)
+ {
+ AndroidJavaObject activityContext = activityClass.GetStatic("currentActivity");
+ if (activityContext != null)
+ {
+ AndroidJavaObject avProVideoManager = new AndroidJavaObject("com.renderheads.AVPro.Video.Manager");
+ if (avProVideoManager != null)
+ {
+ avProVideoManager.CallStatic("SetContext", activityContext);
+ }
+ }
+ }
+ // TODO: Handle failure?
+ }
+#endif
+
+ [DllImport(PluginName)]
+ private static extern IntPtr AVPPluginGetVersionStringPointer();
+
+ [DllImport(PluginName)]
+ internal static extern IntPtr AVPPluginGetRenderEventFunction();
+
+ [DllImport(PluginName)]
+ internal static extern IntPtr AVPPluginMakePlayer(AVPPlayerSettings settings);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerRelease(IntPtr player);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerUpdate(IntPtr _player);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetState(IntPtr player, ref AVPPlayerState state);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetFlags(IntPtr player, int flags);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetAssetInfo(IntPtr player, ref AVPPlayerAssetInfo info);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetVideoTrackInfo(IntPtr player, int index, ref AVPPlayerVideoTrackInfo info);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetAudioTrackInfo(IntPtr player, int index, ref AVPPlayerAudioTrackInfo info);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetTextTrackInfo(IntPtr player, int index, ref AVPPlayerTextTrackInfo info);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetBufferedTimeRanges(IntPtr player, AVPPlayerTimeRange[] ranges, int count);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetSeekableTimeRanges(IntPtr player, AVPPlayerTimeRange[] ranges, int count);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetTexture(IntPtr player, ref AVPPlayerTexture texture);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerGetText(IntPtr player, ref AVPPlayerText text);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetPlayerSettings(IntPtr player, AVPPlayerSettings settings);
+
+ [DllImport(PluginName)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool AVPPlayerOpenURL(IntPtr player, string url, string headers, AVPPlayerOpenOptions options);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerClose(IntPtr player);
+
+ [DllImport(PluginName)]
+ internal static extern int AVPPlayerGetAudio(IntPtr player, float[] buffer, int length);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetAudioHeadRotation(IntPtr _player, float[] rotation);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetPositionTrackingEnabled(IntPtr _player, bool enabled);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetAudioFocusEnabled(IntPtr _player, bool enabled);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetAudioFocusProperties(IntPtr _player, float offFocusLevel, float widthDegrees);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetAudioFocusRotation(IntPtr _player, float[] rotation);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerResetAudioFocus(IntPtr _player);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetRate(IntPtr player, float rate);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetVolume(IntPtr player, float volume);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetExternalPlaybackVideoGravity(IntPtr player, AVPPlayerExternalPlaybackVideoGravity gravity);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSeek(IntPtr player, double toTime, double toleranceBefore, double toleranceAfter);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetKeyServerAuthToken(IntPtr player, string token);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetKeyServerURL(IntPtr player, string url);
+
+ [DllImport(PluginName)]
+ internal static extern void AVPPlayerSetDecryptionKey(IntPtr player, byte[] key, int length);
+
+ [DllImport(PluginName)]
+ [return: MarshalAs(UnmanagedType.I1)]
+ internal static extern bool AVPPlayerSetTrack(IntPtr player, AVPPlayerTrackType type, int index);
+
+ public struct MediaCachingOptions
+ {
+ public double minimumRequiredBitRate;
+ public float minimumRequiredResolution_width;
+ public float minimumRequiredResolution_height;
+ public string title;
+ public IntPtr artwork;
+ public int artworkLength;
+ }
+
+ [DllImport(PluginName)]
+ public static extern void AVPPluginCacheMediaForURL(IntPtr player, string url, string headers, MediaCachingOptions options);
+
+ [DllImport(PluginName)]
+ public static extern void AVPPluginCancelDownloadOfMediaForURL(IntPtr player, string url);
+
+ [DllImport(PluginName)]
+ public static extern void AVPPluginRemoveCachedMediaForURL(IntPtr player, string url);
+
+ [DllImport(PluginName)]
+ public static extern int AVPPluginGetCachedMediaStatusForURL(IntPtr player, string url, ref float progress);
+ }
+ }
+}
+
+#endif
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer+Native.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer+Native.cs.meta
new file mode 100755
index 0000000..1035414
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer+Native.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0bf374b5848b649e6b3840fe1dc03cd2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer.cs
new file mode 100755
index 0000000..0d64003
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer.cs
@@ -0,0 +1,1275 @@
+//-----------------------------------------------------------------------------
+// Copyright 2015-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+#if UNITY_2017_2_OR_NEWER && ( UNITY_EDITOR_OSX || ( !UNITY_EDITOR && ( UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID ) ) )
+
+using System;
+using System.Runtime.InteropServices;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public sealed partial class PlatformMediaPlayer : BaseMediaPlayer
+ {
+ private static DateTime Epoch = new DateTime(2001, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ private static IntPtr PluginRenderEventFunction;
+
+ static PlatformMediaPlayer()
+ {
+ #if !UNITY_EDITOR && (UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID)
+ Native.AVPPluginBootstrap();
+ #endif
+
+ PluginRenderEventFunction = Native.AVPPluginGetRenderEventFunction();
+ }
+
+ private IntPtr _player;
+ Native.AVPPlayerSettings _playerSettings;
+
+ private MediaPlayer.PlatformOptions _options;
+
+ public PlatformMediaPlayer(MediaPlayer.PlatformOptions options)
+ {
+ // Keep a handle on the options
+ _options = options;
+
+ // Configure the video output settings
+ _playerSettings = new Native.AVPPlayerSettings();
+
+ if (options is MediaPlayer.OptionsApple)
+ {
+ PlatformMediaPlayerInitWithOptions(options as MediaPlayer.OptionsApple);
+ }
+ else
+ if (options is MediaPlayer.OptionsAndroid)
+ {
+ MediaPlayer.OptionsAndroid androidOptions = options as MediaPlayer.OptionsAndroid;
+ PlatformMediaPlayerInitWithOptions(androidOptions);
+ }
+
+ // Make the player
+ _player = Native.AVPPluginMakePlayer(_playerSettings);
+
+ // Create the command buffers
+ CreateCommandBuffers();
+
+ // And execute the setup buffer
+ Graphics.ExecuteCommandBuffer(_setupCommandBuffer);
+
+ // Force an update to get our state in sync with the native
+ Update();
+ }
+
+ ///
+ /// Creates the command buffers
+ ///
+ private void CreateCommandBuffers()
+ {
+#if !UNITY_EDITOR && UNITY_ANDROID
+ // We pass setup flags alongside the player id on Android
+ long playerID = _player.ToInt64();
+ Debug.Log($"playerID: {playerID:X8}");
+
+ long flags = 0;
+ if ((_options as MediaPlayer.OptionsAndroid).textureFormat == MediaPlayer.PlatformOptions.TextureFormat.YCbCr420_OES)
+ flags |= (long)Native.AVPPlayerRenderEventPlayerSetupFlags.AndroidUseOESFastPath;
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear)
+ flags |= (long)Native.AVPPlayerRenderEventPlayerSetupFlags.LinearColourSpace;
+ Debug.Log($"flags: {flags:X8}");
+
+ long param = (playerID & Native.kAVPPlayerRenderEventDataPlayerIDMask) << Native.kAVPPlayerRenderEventDataPlayerIDShift;
+ param |= (flags & Native.kAVPPlayerRenderEventDataOptionsMask) << Native.kAVPPlayerRenderEventDataOptionsShift;
+ Debug.Log($"flags: {param:X8}");
+
+ IntPtr setupData = new IntPtr(param);
+#else
+ // Other platforms just take the player id directly
+ IntPtr setupData = _player;
+#endif
+ int eventId = Native.kAVPPlayerRenderEventId | ((int)Native.AVPPluginRenderEvent.PlayerSetup << Native.kAVPPlayerRenderEventTypeShift);
+ _setupCommandBuffer = new CommandBuffer();
+ _setupCommandBuffer.name = "AVPPluginRenderEvent.PlayerSetup";
+ _setupCommandBuffer.IssuePluginEventAndData(PluginRenderEventFunction, eventId, setupData);
+
+ // Render resources
+ eventId = Native.kAVPPlayerRenderEventId | ((int)Native.AVPPluginRenderEvent.PlayerRender << Native.kAVPPlayerRenderEventTypeShift);
+ _renderCommandBuffer = new CommandBuffer();
+ _renderCommandBuffer.name = "AVPPluginRenderEvent.PlayerRender";
+ _renderCommandBuffer.IssuePluginEventAndData(PluginRenderEventFunction, eventId, _player);
+
+ // Free resources
+ eventId = Native.kAVPPlayerRenderEventId | ((int)Native.AVPPluginRenderEvent.PlayerFreeResources << Native.kAVPPlayerRenderEventTypeShift);
+ _freeResourcesCommandBuffer = new CommandBuffer();
+ _freeResourcesCommandBuffer.name = "AVPPluginRenderEvent.PlayerFreeResources";
+ _freeResourcesCommandBuffer.IssuePluginEventAndData(PluginRenderEventFunction, eventId, _player);
+ }
+
+ // Configure the player with Apple options
+ private void PlatformMediaPlayerInitWithOptions(MediaPlayer.OptionsApple options)
+ {
+ switch (options.textureFormat)
+ {
+ case MediaPlayer.OptionsApple.TextureFormat.BGRA:
+ default:
+ _playerSettings.pixelFormat = Native.AVPPlayerVideoPixelFormat.Bgra;
+ break;
+ case MediaPlayer.OptionsApple.TextureFormat.YCbCr420_OES:
+ _playerSettings.pixelFormat = Native.AVPPlayerVideoPixelFormat.YCbCr420;
+ break;
+ }
+
+ if (options.flags.GenerateMipmaps())
+ _playerSettings.videoFlags |= Native.AVPPlayerVideoOutputSettingsFlags.GenerateMipmaps;
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear)
+ _playerSettings.videoFlags |= Native.AVPPlayerVideoOutputSettingsFlags.LinearColorSpace;
+
+ GetWidthHeightFromResolution(
+ options.preferredMaximumResolution,
+ options.customPreferredMaximumResolution,
+ out _playerSettings.preferredMaximumResolution_width,
+ out _playerSettings.preferredMaximumResolution_height
+ );
+
+ _playerSettings.maximumPlaybackRate = options.maximumPlaybackRate;
+
+ // Configure the audio output settings
+ _playerSettings.audioOutputMode = (Native.AVPPlayerAudioOutputMode)options.audioMode;
+ if (options.audioMode == MediaPlayer.OptionsApple.AudioMode.Unity)
+ {
+ _playerSettings.sampleRate = AudioSettings.outputSampleRate;
+ int numBuffers;
+ AudioSettings.GetDSPBufferSize(out _playerSettings.bufferLength, out numBuffers);
+ }
+
+ // Configure any network settings
+ _playerSettings.preferredPeakBitRate = options.GetPreferredPeakBitRateInBitsPerSecond();
+ _playerSettings.preferredForwardBufferDuration = options.preferredForwardBufferDuration;
+ if (options.flags.PlayWithoutBuffering())
+ _playerSettings.networkFlags |= Native.AVPPlayerNetworkSettingsFlags.PlayWithoutBuffering;
+ if (options.flags.UseSinglePlayerItem())
+ _playerSettings.networkFlags |= Native.AVPPlayerNetworkSettingsFlags.UseSinglePlayerItem;
+
+ // Setup any other flags from the options
+ _flags = _flags.SetAllowExternalPlayback(options.flags.AllowExternalPlayback());
+ _flags = _flags.SetResumePlayback(options.flags.ResumePlaybackAfterAudioSessionRouteChange());
+ }
+
+ // Configure the player with Android options
+ private void PlatformMediaPlayerInitWithOptions(MediaPlayer.OptionsAndroid options)
+ {
+ _playerSettings.videoApi = options.videoApi == Android.VideoApi.MediaPlayer ? Native.AVPPlayerVideoAPI.MediaPlayer : Native.AVPPlayerVideoAPI.ExoPlayer;
+ if (options.preferSoftwareDecoder)
+ _playerSettings.videoFlags |= Native.AVPPlayerVideoOutputSettingsFlags.PreferSoftwareDecoder;
+ if (options.forceRtpTCP)
+ _playerSettings.networkFlags |= Native.AVPPlayerNetworkSettingsFlags.ForceRtpTCP;
+ if (options.forceEnableMediaCodecAsynchronousQueueing)
+ _playerSettings.videoFlags |= Native.AVPPlayerVideoOutputSettingsFlags.ForceEnableMediaCodecAsynchronousQueueing;
+
+ switch (options.textureFormat)
+ {
+ case MediaPlayer.OptionsAndroid.TextureFormat.BGRA:
+ default:
+ _playerSettings.pixelFormat = Native.AVPPlayerVideoPixelFormat.Bgra;
+ break;
+ case MediaPlayer.OptionsAndroid.TextureFormat.YCbCr420_OES:
+ _playerSettings.pixelFormat = Native.AVPPlayerVideoPixelFormat.YCbCr420;
+ break;
+ }
+
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear)
+ _playerSettings.videoFlags |= Native.AVPPlayerVideoOutputSettingsFlags.LinearColorSpace;
+
+ GetWidthHeightFromResolution(
+ options.preferredMaximumResolution,
+ options.customPreferredMaximumResolution,
+ out _playerSettings.preferredMaximumResolution_width,
+ out _playerSettings.preferredMaximumResolution_height
+ );
+
+ // Configure the audio output settings
+ _playerSettings.audioOutputMode = (Native.AVPPlayerAudioOutputMode)options.audioMode;
+ switch( options.audioMode )
+ {
+ case MediaPlayer.OptionsAndroid.AudioMode.Unity:
+ {
+ _playerSettings.sampleRate = AudioSettings.outputSampleRate;
+ int numBuffers;
+ AudioSettings.GetDSPBufferSize(out _playerSettings.bufferLength, out numBuffers);
+ }
+ break;
+
+ case MediaPlayer.OptionsAndroid.AudioMode.SystemDirectWithCapture:
+ {
+ // SystemDirectWithCapture does not really exist (or supported) on Android
+ _playerSettings.audioOutputMode = (Native.AVPPlayerAudioOutputMode)(MediaPlayer.OptionsAndroid.AudioMode.FacebookAudio360);
+ }
+ break;
+ }
+
+ _playerSettings.audio360Channels = options.audio360ChannelMode;
+ _playerSettings.audio360LatencyMS = options.audio360LatencyMS;
+
+ // Configure any network settings
+ _playerSettings.preferredPeakBitRate = options.GetPreferredPeakBitRateInBitsPerSecond();
+ if (options.startWithHighestBitrate)
+ _playerSettings.networkFlags |= Native.AVPPlayerNetworkSettingsFlags.ForceStartHighestBitrate;
+
+ _playerSettings.minBufferMs = options.minBufferMs;
+ _playerSettings.maxBufferMs = options.maxBufferMs;
+ _playerSettings.bufferForPlaybackMs = options.bufferForPlaybackMs;
+ _playerSettings.bufferForPlaybackAfterRebufferMs = options.bufferForPlaybackAfterRebufferMs;
+ }
+
+ private static void GetWidthHeightFromResolution(MediaPlayer.OptionsApple.Resolution resolution, Vector2Int custom, out float width, out float height)
+ {
+ switch (resolution)
+ {
+ case MediaPlayer.OptionsApple.Resolution.NoPreference:
+ default:
+ width = 0;
+ height = 0;
+ break;
+ case MediaPlayer.OptionsApple.Resolution._480p:
+ width = 640;
+ height = 480;
+ break;
+ case MediaPlayer.OptionsApple.Resolution._720p:
+ width = 1280;
+ height = 720;
+ break;
+ case MediaPlayer.OptionsApple.Resolution._1080p:
+ width = 1920;
+ height = 1080;
+ break;
+ case MediaPlayer.OptionsApple.Resolution._1440p:
+ width = 2560;
+ height = 1440;
+ break;
+ case MediaPlayer.OptionsApple.Resolution._2160p:
+ width = 3840;
+ height = 2160;
+ break;
+ case MediaPlayer.OptionsApple.Resolution.Custom:
+ width = custom.x;
+ height = custom.y;
+ break;
+ }
+ }
+ }
+
+ // IMediaPlayer
+ public sealed partial class PlatformMediaPlayer
+ {
+ private const int MaxTexturePlanes = 2;
+ private Native.AVPPlayerState _state = new Native.AVPPlayerState();
+ private Native.AVPPlayerFlags _flags = Native.AVPPlayerFlags.None;
+ private Native.AVPPlayerAssetInfo _assetInfo = new Native.AVPPlayerAssetInfo();
+ private Native.AVPPlayerVideoTrackInfo[] _videoTrackInfo = new Native.AVPPlayerVideoTrackInfo[0];
+ private Native.AVPPlayerAudioTrackInfo[] _audioTrackInfo = new Native.AVPPlayerAudioTrackInfo[0];
+ private Native.AVPPlayerTextTrackInfo[] _textTrackInfo = new Native.AVPPlayerTextTrackInfo[0];
+ private Native.AVPPlayerTexture _playerTexture;
+ private Native.AVPPlayerText _playerText;
+ private Texture2D[] _texturePlanes = new Texture2D[MaxTexturePlanes];
+ private float _volume = 1.0f;
+ private float _rate = 1.0f;
+ private CommandBuffer _setupCommandBuffer;
+ private CommandBuffer _renderCommandBuffer;
+ private CommandBuffer _freeResourcesCommandBuffer;
+
+ public override void OnEnable()
+ {
+
+ }
+
+ public override void Update()
+ {
+ Native.AVPPlayerUpdate(_player);
+
+ Native.AVPPlayerStatus prevStatus = _state.status;
+ Native.AVPPlayerGetState(_player, ref _state);
+
+ Native.AVPPlayerStatus changedStatus = prevStatus ^ _state.status;
+
+ // Need to make sure that lastError is set when status is failed so that the Error event is triggered
+ if (/*BaseMediaPlayer.*/_lastError == ErrorCode.None && changedStatus.HasFailed() && _state.status.HasFailed())
+ {
+ /*BaseMediaPlayer.*/_lastError = ErrorCode.LoadFailed;
+ }
+
+ if (_state.status.HasUpdatedAssetInfo())
+ {
+ Native.AVPPlayerGetAssetInfo(_player, ref _assetInfo);
+
+ _videoTrackInfo = new Native.AVPPlayerVideoTrackInfo[_assetInfo.videoTrackCount];
+ if (_state.status.HasVideo())
+ {
+ for (int i = 0; i < _assetInfo.videoTrackCount; ++i)
+ {
+ _videoTrackInfo[i] = new Native.AVPPlayerVideoTrackInfo();
+ Native.AVPPlayerGetVideoTrackInfo(_player, i, ref _videoTrackInfo[i]);
+ }
+ }
+
+ _audioTrackInfo = new Native.AVPPlayerAudioTrackInfo[_assetInfo.audioTrackCount];
+ if (_state.status.HasAudio())
+ {
+ for (int i = 0; i < _assetInfo.audioTrackCount; ++i)
+ {
+ _audioTrackInfo[i] = new Native.AVPPlayerAudioTrackInfo();
+ Native.AVPPlayerGetAudioTrackInfo(_player, i, ref _audioTrackInfo[i]);
+ }
+ }
+
+ _textTrackInfo = new Native.AVPPlayerTextTrackInfo[_assetInfo.textTrackCount];
+ if (_state.status.HasText())
+ {
+ for (int i = 0; i < _assetInfo.textTrackCount; ++i)
+ {
+ _textTrackInfo[i] = new Native.AVPPlayerTextTrackInfo();
+ Native.AVPPlayerGetTextTrackInfo(_player, i, ref _textTrackInfo[i]);
+ }
+ }
+
+ /*BaseMediaPlayer.*/UpdateTracks();
+ }
+
+ if (_state.status.HasUpdatedBufferedTimeRanges())
+ {
+ if (_state.bufferedTimeRangesCount > 0)
+ {
+ Native.AVPPlayerTimeRange[] timeRanges = new Native.AVPPlayerTimeRange[_state.bufferedTimeRangesCount];
+ Native.AVPPlayerGetBufferedTimeRanges(_player, timeRanges, timeRanges.Length);
+ _bufferedTimes = ConvertNativeTimeRangesToTimeRanges(timeRanges);
+ }
+ else
+ {
+ _bufferedTimes = new TimeRanges();
+ }
+ }
+
+ if (_state.status.HasUpdatedSeekableTimeRanges())
+ {
+ if (_state.seekableTimeRangesCount > 0)
+ {
+ Native.AVPPlayerTimeRange[] timeRanges = new Native.AVPPlayerTimeRange[_state.seekableTimeRangesCount];
+ Native.AVPPlayerGetSeekableTimeRanges(_player, timeRanges, timeRanges.Length);
+ _seekableTimes = ConvertNativeTimeRangesToTimeRanges(timeRanges);
+ }
+ else
+ {
+ _seekableTimes = new TimeRanges();
+ }
+ }
+
+ if (_state.status.HasUpdatedTexture())
+ {
+ Native.AVPPlayerGetTexture(_player, ref _playerTexture);
+ for (int i = 0; i < _playerTexture.planeCount; ++i)
+ {
+ TextureFormat textureFormat = TextureFormat.BGRA32;
+ switch (_playerTexture.planes[i].textureFormat)
+ {
+ case Native.AVPPlayerTextureFormat.R8:
+ textureFormat = TextureFormat.R8;
+ break;
+
+ case Native.AVPPlayerTextureFormat.R16:
+ textureFormat = TextureFormat.R16;
+ break;
+
+ case Native.AVPPlayerTextureFormat.RG8:
+ textureFormat = TextureFormat.RG16;
+ break;
+
+ case Native.AVPPlayerTextureFormat.RG16:
+ textureFormat = TextureFormat.RG32;
+ break;
+
+ case Native.AVPPlayerTextureFormat.BC1:
+ textureFormat = TextureFormat.DXT1;
+ break;
+
+ case Native.AVPPlayerTextureFormat.BC3:
+ textureFormat = TextureFormat.DXT5;
+ break;
+
+ case Native.AVPPlayerTextureFormat.BC4:
+ textureFormat = TextureFormat.BC4;
+ break;
+
+ case Native.AVPPlayerTextureFormat.BC5:
+ textureFormat = TextureFormat.BC5;
+ break;
+
+ case Native.AVPPlayerTextureFormat.BC7:
+ textureFormat = TextureFormat.BC7;
+ break;
+
+ case Native.AVPPlayerTextureFormat.RGBA16Float:
+ textureFormat = TextureFormat.RGBAHalf;
+ break;
+
+ case Native.AVPPlayerTextureFormat.BGRA8:
+ default:
+ break;
+ }
+
+ if (_texturePlanes[i] == null ||
+ _texturePlanes[i].width != _playerTexture.planes[i].width ||
+ _texturePlanes[i].height != _playerTexture.planes[i].height ||
+ _texturePlanes[i].format != textureFormat)
+ {
+#if !UNITY_ANDROID
+ // Ensure any existing texture is released.
+ if (_texturePlanes[i] != null)
+ {
+ _texturePlanes[i].UpdateExternalTexture(IntPtr.Zero);
+ _texturePlanes[i] = null;
+ }
+#endif
+ _texturePlanes[i] = Texture2D.CreateExternalTexture(
+ _playerTexture.planes[i].width,
+ _playerTexture.planes[i].height,
+ textureFormat,
+ _playerTexture.flags.IsMipmapped(),
+ _playerTexture.flags.IsLinear(),
+ _playerTexture.planes[i].plane
+ );
+ base.ApplyTextureProperties(_texturePlanes[i]);
+ }
+ else
+ {
+ _texturePlanes[i].UpdateExternalTexture(_playerTexture.planes[i].plane);
+ }
+ }
+ }
+
+ if (_state.status.HasUpdatedTextureTransform())
+ {
+ // Directly grab the video track info as path of least resistance
+ if (_state.selectedVideoTrack >= 0)
+ {
+ Native.AVPPlayerGetVideoTrackInfo(_player, _state.selectedVideoTrack, ref _videoTrackInfo[_state.selectedVideoTrack]);
+ }
+ }
+
+ if (_state.status.HasUpdatedText())
+ {
+ Native.AVPPlayerGetText(_player, ref _playerText);
+ /*BaseMediaPlayer.*/UpdateTextCue();
+ }
+
+ if (_flags.IsDirty())
+ {
+ _flags = _flags.SetDirty(false);
+ Native.AVPPlayerSetFlags(_player, (int)_flags);
+ }
+
+ if (_options.HasChanged())
+ {
+ if (_options is MediaPlayer.OptionsApple)
+ {
+ UpdatePlayerSettingsFromOptions(_options as MediaPlayer.OptionsApple);
+ }
+ else
+ if (_options is MediaPlayer.OptionsAndroid)
+ {
+ UpdatePlayerSettingsFromOptions(_options as MediaPlayer.OptionsAndroid);
+ }
+
+ Native.AVPPlayerSetPlayerSettings(_player, _playerSettings);
+
+ _options.ClearChanges();
+ }
+
+ /*BaseMediaPlayer.*/UpdateDisplayFrameRate();
+ /*BaseMediaPlayer.*/UpdateSubtitles();
+ }
+
+ private void UpdatePlayerSettingsFromOptions(MediaPlayer.OptionsApple options)
+ {
+ if (options.HasChanged(MediaPlayer.OptionsApple.ChangeFlags.PreferredPeakBitRate))
+ {
+ _playerSettings.preferredPeakBitRate = options.GetPreferredPeakBitRateInBitsPerSecond();
+ }
+
+ if (options.HasChanged(MediaPlayer.OptionsApple.ChangeFlags.PreferredForwardBufferDuration))
+ {
+ _playerSettings.preferredForwardBufferDuration = options.preferredForwardBufferDuration;
+ }
+
+ if (options.HasChanged(MediaPlayer.OptionsApple.ChangeFlags.PlayWithoutBuffering))
+ {
+ bool enabled = (options.flags & MediaPlayer.OptionsApple.Flags.PlayWithoutBuffering) == MediaPlayer.OptionsApple.Flags.PlayWithoutBuffering;
+ _playerSettings.networkFlags = enabled ? _playerSettings.networkFlags | Native.AVPPlayerNetworkSettingsFlags.PlayWithoutBuffering
+ : _playerSettings.networkFlags & ~Native.AVPPlayerNetworkSettingsFlags.PlayWithoutBuffering;
+ }
+
+ if (options.HasChanged(MediaPlayer.OptionsApple.ChangeFlags.PreferredMaximumResolution))
+ {
+ GetWidthHeightFromResolution(
+ options.preferredMaximumResolution,
+ options.customPreferredMaximumResolution,
+ out _playerSettings.preferredMaximumResolution_width,
+ out _playerSettings.preferredMaximumResolution_height);
+ }
+
+ if (options.HasChanged(MediaPlayer.OptionsApple.ChangeFlags.AudioMode))
+ {
+ if (_state.status.IsReadyToPlay() == false)
+ {
+ _playerSettings.audioOutputMode = (Native.AVPPlayerAudioOutputMode)options.audioMode;
+ if (options.audioMode == MediaPlayer.OptionsApple.AudioMode.Unity)
+ {
+ _playerSettings.sampleRate = AudioSettings.outputSampleRate;
+ int numBuffers;
+ AudioSettings.GetDSPBufferSize(out _playerSettings.bufferLength, out numBuffers);
+ }
+ }
+ else
+ {
+ Debug.LogWarning("[AVProVideo] Unable to change audio mode after media has been loaded and is ready to play");
+ options.audioMode = options.previousAudioMode;
+ }
+ }
+ }
+
+ private void UpdatePlayerSettingsFromOptions(MediaPlayer.OptionsAndroid options)
+ {
+ if (options.HasChanged(MediaPlayer.OptionsAndroid.ChangeFlags.PreferredPeakBitRate))
+ {
+ _playerSettings.preferredPeakBitRate = options.GetPreferredPeakBitRateInBitsPerSecond();
+ }
+
+ if (options.HasChanged(MediaPlayer.OptionsAndroid.ChangeFlags.PreferredMaximumResolution))
+ {
+ GetWidthHeightFromResolution(
+ options.preferredMaximumResolution,
+ options.customPreferredMaximumResolution,
+ out _playerSettings.preferredMaximumResolution_width,
+ out _playerSettings.preferredMaximumResolution_height);
+ }
+
+ if (options.HasChanged(MediaPlayer.OptionsAndroid.ChangeFlags.AudioMode))
+ {
+ if (_state.status.IsReadyToPlay() == false)
+ {
+ _playerSettings.audioOutputMode = (Native.AVPPlayerAudioOutputMode)options.audioMode;
+ if (options.audioMode == MediaPlayer.OptionsAndroid.AudioMode.Unity)
+ {
+ _playerSettings.sampleRate = AudioSettings.outputSampleRate;
+ int numBuffers;
+ AudioSettings.GetDSPBufferSize(out _playerSettings.bufferLength, out numBuffers);
+ }
+ }
+ else
+ {
+ Debug.LogWarning("[AVProVideo] Unable to change audio mode after media has been loaded and is ready to play");
+ options.audioMode = options.previousAudioMode;
+ }
+ }
+ }
+
+ public override void Render()
+ {
+ Graphics.ExecuteCommandBuffer(_renderCommandBuffer);
+ }
+
+ public override IntPtr GetNativePlayerHandle()
+ {
+ return _player;
+ }
+
+ private static TimeRanges ConvertNativeTimeRangesToTimeRanges(Native.AVPPlayerTimeRange[] ranges)
+ {
+ TimeRange[] targetRanges = new TimeRange[ranges.Length];
+ for (int i = 0; i < ranges.Length; i++)
+ {
+ targetRanges[i].startTime = ranges[i].start;
+ targetRanges[i].duration = ranges[i].duration;
+ }
+ return new TimeRanges(targetRanges);
+ }
+ }
+
+ // IMediaControl
+ public sealed partial class PlatformMediaPlayer
+ {
+ public override bool OpenMedia(string path, long offset, string headers, MediaHints mediaHints, int forceFileFormat, bool startWithHighestBitrate)
+ {
+ _mediaHints = mediaHints;
+
+ Native.AVPPlayerOpenOptions options;
+ options.fileOffset = offset;
+ options.forceFileFormat = (Native.AVPPlayerOpenOptionsForceFileFormat)forceFileFormat;
+ options.flags = 0;
+
+ bool b = Native.AVPPlayerOpenURL(_player, path, headers, options);
+ if (b)
+ {
+ Update();
+ }
+
+ return b;
+ }
+
+ public override bool OpenMediaFromBuffer(byte[] buffer)
+ {
+ // Unsupported
+ return false;
+ }
+
+ public override bool StartOpenMediaFromBuffer(ulong length)
+ {
+ // Unsupported
+ return false;
+ }
+
+ public override bool AddChunkToMediaBuffer(byte[] chunk, ulong offset, ulong length)
+ {
+ // Unsupported
+ return false;
+ }
+
+ public override bool EndOpenMediaFromBuffer()
+ {
+ // Unsupported
+ return false;
+ }
+
+ public override void CloseMedia()
+ {
+ Native.AVPPlayerClose(_player);
+ Update();
+#if !UNITY_ANDROID
+ // Clean up the textures
+ for (int i = 0; i < MaxTexturePlanes; ++i)
+ {
+ if (_texturePlanes[i] != null)
+ {
+ _texturePlanes[i].UpdateExternalTexture(IntPtr.Zero);
+ _texturePlanes[i] = null;
+ }
+ }
+ _playerTexture.frameCount = 0;
+#endif
+ }
+
+ public override void SetLooping(bool b)
+ {
+ _flags = _flags.SetLooping(b);
+ }
+
+ public override bool IsLooping()
+ {
+ return _flags.IsLooping();
+ }
+
+ public override bool HasMetaData()
+ {
+ return _state.status.HasMetadata();
+ }
+
+ public override bool CanPlay()
+ {
+ return _state.status.IsReadyToPlay();
+ }
+
+ public override bool IsPlaying()
+ {
+ return _state.status.IsPlaying();
+ }
+
+ public override bool IsSeeking()
+ {
+ return _state.status.IsSeeking() || _state.status.HasFinishedSeeking();
+ }
+
+ public override bool IsPaused()
+ {
+ return _state.status.IsPaused();
+ }
+
+ public override bool IsFinished()
+ {
+ return _state.status.IsFinished();
+ }
+
+ public override bool IsBuffering()
+ {
+ return _state.status.IsBuffering();
+ }
+
+ public override void Play()
+ {
+ Native.AVPPlayerSetRate(_player, _rate);
+ Update();
+ }
+
+ public override void Pause()
+ {
+ Native.AVPPlayerSetRate(_player, 0.0f);
+ Update();
+ }
+
+ public override void Stop()
+ {
+ Pause();
+ }
+
+ public override void Rewind()
+ {
+ SeekWithTolerance(0.0, 0.0, 0.0);
+ }
+
+ public override void Seek(double toTime)
+ {
+ SeekWithTolerance(toTime, 0.0, 0.0);
+ }
+
+ public override void SeekFast(double toTime)
+ {
+ SeekWithTolerance(toTime, double.PositiveInfinity, double.PositiveInfinity);
+ }
+
+ public override void SeekWithTolerance(double toTime, double toleranceBefore, double toleranceAfter)
+ {
+ Native.AVPPlayerSeek(_player, toTime, toleranceBefore, toleranceAfter);
+ Update();
+ }
+
+ public override double GetCurrentTime()
+ {
+ return _state.currentTime;
+ }
+
+ public override DateTime GetProgramDateTime()
+ {
+ return Epoch.AddSeconds(_state.currentDate);
+ }
+
+ public override float GetPlaybackRate()
+ {
+ return _rate;
+ }
+
+ public override void SetPlaybackRate(float rate)
+ {
+ if (rate != _rate)
+ {
+ _rate = rate;
+ Native.AVPPlayerSetRate(_player, rate);
+ Update();
+ }
+ }
+
+ public override void MuteAudio(bool mute)
+ {
+ _flags = _flags.SetMuted(mute);
+ }
+
+ public override bool IsMuted()
+ {
+ return _flags.IsMuted();
+ }
+
+ public override void SetVolume(float volume)
+ {
+ if (volume != _volume)
+ {
+ _volume = volume;
+ Native.AVPPlayerSetVolume(_player, volume);
+ }
+ }
+
+ public override void SetBalance(float balance)
+ {
+ // Unsupported
+ }
+
+ public override float GetVolume()
+ {
+ return _volume;
+ }
+
+ public override float GetBalance()
+ {
+ // Unsupported
+ return 0.0f;
+ }
+
+ public override long GetLastExtendedErrorCode()
+ {
+ return 0;
+ }
+
+ public override int GetAudioChannelCount()
+ {
+ int channelCount = -1;
+ if (_state.selectedAudioTrack > -1 && _state.selectedAudioTrack < _audioTrackInfo.Length)
+ {
+ channelCount = (int)_audioTrackInfo[_state.selectedAudioTrack].channelCount;
+ #if !UNITY_EDITOR && UNITY_IOS
+ MediaPlayer.OptionsApple options = _options as MediaPlayer.OptionsApple;
+ if (options.audioMode == MediaPlayer.OptionsApple.AudioMode.Unity)
+ {
+ // iOS audio capture will convert down to two channel stereo
+ channelCount = Math.Min(channelCount, 2);
+ }
+ #endif
+ }
+ return channelCount;
+ }
+
+ public override AudioChannelMaskFlags GetAudioChannelMask()
+ {
+ if (_state.selectedAudioTrack != -1 && _state.selectedAudioTrack < _audioTrackInfo.Length)
+ {
+ return _audioTrackInfo[_state.selectedAudioTrack].channelBitmap;
+ }
+ return AudioChannelMaskFlags.Unspecified;
+ }
+
+ public override void AudioConfigurationChanged(bool deviceChanged)
+ {
+ if (_playerSettings.audioOutputMode == Native.AVPPlayerAudioOutputMode.SystemDirect)
+ return;
+ _playerSettings.sampleRate = AudioSettings.outputSampleRate;
+ int numBuffers;
+ AudioSettings.GetDSPBufferSize(out _playerSettings.bufferLength, out numBuffers);
+ Native.AVPPlayerSetPlayerSettings(_player, _playerSettings);
+ }
+
+ public override int GrabAudio(float[] buffer, int sampleCount, int channelCount)
+ {
+ return Native.AVPPlayerGetAudio(_player, buffer, buffer.Length);
+ }
+
+ public override int GetAudioBufferedSampleCount()
+ {
+ return _state.audioCaptureBufferedSamplesCount;
+ }
+
+ public override void SetAudioHeadRotation(Quaternion q)
+ {
+ float[] aRotation = new float[] { q.x, q.y, q.z, q.w };
+ Native.AVPPlayerSetAudioHeadRotation(_player, aRotation);
+ }
+
+ public override void ResetAudioHeadRotation()
+ {
+ Native.AVPPlayerSetPositionTrackingEnabled(_player, false);
+ }
+
+ public override void SetAudioChannelMode(Audio360ChannelMode channelMode)
+ {
+ // Unsupported
+ }
+
+ public override void SetAudioFocusEnabled(bool enabled)
+ {
+ Native.AVPPlayerSetAudioFocusEnabled(_player, enabled);
+ }
+
+ public override void SetAudioFocusProperties(float offFocusLevel, float widthDegrees)
+ {
+ Native.AVPPlayerSetAudioFocusProperties(_player, offFocusLevel, widthDegrees);
+ }
+
+ public override void SetAudioFocusRotation(Quaternion q)
+ {
+ float[] aRotation = new float[] { q.x, q.y, q.z, q.w };
+ Native.AVPPlayerSetAudioFocusRotation(_player, aRotation);
+ }
+
+ public override void ResetAudioFocus()
+ {
+ Native.AVPPlayerResetAudioFocus(_player);
+ }
+
+ public override bool WaitForNextFrame(Camera camera, int previousFrameCount)
+ {
+ return false;
+ }
+
+ public override void SetKeyServerAuthToken(string token)
+ {
+ Native.AVPPlayerSetKeyServerAuthToken(_player, token);
+ }
+
+ public override void SetOverrideDecryptionKey(byte[] key)
+ {
+ int length = key != null ? key.Length : 0;
+ Native.AVPPlayerSetDecryptionKey(_player, key, length);
+ }
+
+ public override bool IsExternalPlaybackActive()
+ {
+ return _state.status.IsExternalPlaybackActive();
+ }
+
+ public override void SetAllowsExternalPlayback(bool enable)
+ {
+ _flags.SetAllowExternalPlayback(enable);
+ }
+
+ public override void SetExternalPlaybackVideoGravity(ExternalPlaybackVideoGravity gravity_)
+ {
+ Native.AVPPlayerExternalPlaybackVideoGravity gravity;
+ switch (gravity_)
+ {
+ case ExternalPlaybackVideoGravity.Resize:
+ default:
+ gravity = Native.AVPPlayerExternalPlaybackVideoGravity.Resize;
+ break;
+ case ExternalPlaybackVideoGravity.ResizeAspect:
+ gravity = Native.AVPPlayerExternalPlaybackVideoGravity.ResizeAspect;
+ break;
+ case ExternalPlaybackVideoGravity.ResizeAspectFill:
+ gravity = Native.AVPPlayerExternalPlaybackVideoGravity.ResizeAspectFill;
+ break;
+ }
+ Native.AVPPlayerSetExternalPlaybackVideoGravity(_player, gravity);
+ }
+ }
+
+ // IMediaInfo
+ public sealed partial class PlatformMediaPlayer
+ {
+ public override double GetDuration()
+ {
+ return _assetInfo.duration;
+ }
+
+ public override int GetVideoWidth()
+ {
+ int width = 0;
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ {
+ width = (int)_videoTrackInfo[_state.selectedVideoTrack].dimensions.width;
+ }
+ return width;
+ }
+
+ public override int GetVideoHeight()
+ {
+ int height = 0;
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ {
+ height = (int)_videoTrackInfo[_state.selectedVideoTrack].dimensions.height;
+ }
+ return height;
+ }
+
+ public override float GetVideoFrameRate()
+ {
+ float framerate = 0.0f;
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ {
+ framerate = _videoTrackInfo[_state.selectedVideoTrack].frameRate;
+ }
+ return framerate;
+ }
+
+ public override bool HasVideo()
+ {
+ return _state.status.HasVideo();
+ }
+
+ public override bool HasAudio()
+ {
+ return _state.status.HasAudio();
+ }
+
+ public override bool PlayerSupportsLinearColorSpace()
+ {
+ return _playerTexture.flags.IsLinear();
+ }
+
+ public override bool IsPlaybackStalled()
+ {
+ return _state.status.IsStalled();
+ }
+
+ public override float[] GetAffineTransform()
+ {
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ {
+ Native.AVPPlayerVideoTrackInfo videoTrackInfo = _videoTrackInfo[_state.selectedVideoTrack];
+ Native.AVPAffineTransform transform = videoTrackInfo.transform;
+ return new float[] { transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty };
+ }
+ else
+ {
+ return new float[] { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f };
+ }
+ }
+
+ public override long GetEstimatedTotalBandwidthUsed()
+ {
+ return 0;
+ }
+
+ public override bool IsExternalPlaybackSupported()
+ {
+ return _assetInfo.flags.IsCompatibleWithAirPlay();
+ }
+ }
+
+ // IMediaProducer
+ public sealed partial class PlatformMediaPlayer
+ {
+ public override int GetTextureCount()
+ {
+ return _playerTexture.planeCount;
+ }
+
+ public override Texture GetTexture(int index)
+ {
+ return _texturePlanes[index];
+ }
+
+ public override int GetTextureFrameCount()
+ {
+ return _playerTexture.frameCount;
+ }
+
+ public override bool SupportsTextureFrameCount()
+ {
+ return true;
+ }
+
+ public override long GetTextureTimeStamp()
+ {
+ return _playerTexture.itemTime;
+ }
+
+ public override bool RequiresVerticalFlip()
+ {
+ return _playerTexture.flags.IsFlipped();
+ }
+
+ public override TransparencyMode GetTextureTransparency()
+ {
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ {
+ Native.AVPPlayerVideoTrackInfo info = _videoTrackInfo[_state.selectedVideoTrack];
+ if ((info.videoTrackFlags & Native.AVPPlayerVideoTrackFlags.HasAlpha) == Native.AVPPlayerVideoTrackFlags.HasAlpha)
+ {
+ return TransparencyMode.Transparent;
+ }
+ }
+ return base.GetTextureTransparency();
+ }
+
+ public override Matrix4x4 GetYpCbCrTransform()
+ {
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ return _videoTrackInfo[_state.selectedVideoTrack].yCbCrTransform;
+ else
+ return Matrix4x4.identity;
+ }
+
+ internal override StereoPacking InternalGetTextureStereoPacking()
+ {
+ if (_videoTrackInfo.Length > 0 && _state.selectedVideoTrack >= 0)
+ {
+ switch (_videoTrackInfo[_state.selectedVideoTrack].stereoMode)
+ {
+ case Native.AVPPlayerVideoTrackStereoMode.Unknown:
+ return StereoPacking.Unknown;
+ case Native.AVPPlayerVideoTrackStereoMode.Monoscopic:
+ return StereoPacking.None;
+ case Native.AVPPlayerVideoTrackStereoMode.StereoscopicLeftRight:
+ return StereoPacking.LeftRight;
+ case Native.AVPPlayerVideoTrackStereoMode.StereoscopicTopBottom:
+ return StereoPacking.TopBottom;
+ case Native.AVPPlayerVideoTrackStereoMode.StereoscopicRightLeft:
+ return StereoPacking.Unknown;
+ case Native.AVPPlayerVideoTrackStereoMode.StereoscopicCustom:
+ return StereoPacking.CustomUV;
+ }
+ }
+ return StereoPacking.Unknown;
+ }
+ }
+
+ // IDispose
+ public sealed partial class PlatformMediaPlayer
+ {
+ public override void Dispose()
+ {
+ Graphics.ExecuteCommandBuffer(_freeResourcesCommandBuffer);
+ Native.AVPPlayerRelease(_player);
+ _player = IntPtr.Zero;
+ }
+ }
+
+ // Version
+ public sealed partial class PlatformMediaPlayer
+ {
+ public override string GetVersion()
+ {
+ return Native.GetPluginVersion();
+ }
+
+ public override string GetExpectedVersion()
+ {
+#if !UNITY_EDITOR && UNITY_ANDROID
+ return Helper.ExpectedPluginVersion.Android;
+#else
+ return Helper.ExpectedPluginVersion.Apple;
+#endif
+ }
+ }
+
+ // Media selection
+ public sealed partial class PlatformMediaPlayer
+ {
+ internal override bool InternalIsChangedTracks(TrackType trackType)
+ {
+ return _state.status.HasUpdatedAssetInfo();
+ }
+
+ internal override int InternalGetTrackCount(TrackType trackType)
+ {
+ switch (trackType)
+ {
+ case TrackType.Video:
+ return _videoTrackInfo.Length;
+ case TrackType.Audio:
+ return _audioTrackInfo.Length;
+ case TrackType.Text:
+ return _textTrackInfo.Length;
+ default:
+ return 0;
+ }
+ }
+
+ internal override bool InternalSetActiveTrack(TrackType trackType, int index)
+ {
+ switch (trackType)
+ {
+ case TrackType.Video:
+ return Native.AVPPlayerSetTrack(_player, Native.AVPPlayerTrackType.Video, index);
+
+ case TrackType.Audio:
+ return Native.AVPPlayerSetTrack(_player, Native.AVPPlayerTrackType.Audio, index);
+
+ case TrackType.Text:
+ return Native.AVPPlayerSetTrack(_player, Native.AVPPlayerTrackType.Text, index);
+
+ default:
+ return false;
+ }
+ }
+
+ internal override TrackBase InternalGetTrackInfo(TrackType type, int index, ref bool isActiveTrack)
+ {
+ TrackBase track = null;
+ switch (type)
+ {
+ case TrackType.Video:
+ if (index >= 0 && index < _videoTrackInfo.Length)
+ {
+ Native.AVPPlayerVideoTrackInfo trackInfo = _videoTrackInfo[index];
+ track = new VideoTrack(index, trackInfo.name, trackInfo.language, trackInfo.flags.IsDefault());
+ isActiveTrack = _state.selectedVideoTrack == index;
+ }
+ break;
+
+ case TrackType.Audio:
+ if (index >= 0 && index < _audioTrackInfo.Length)
+ {
+ Native.AVPPlayerAudioTrackInfo trackInfo = _audioTrackInfo[index];
+ track = new AudioTrack(index, trackInfo.name, trackInfo.language, trackInfo.flags.IsDefault());
+ isActiveTrack = _state.selectedAudioTrack == index;
+ }
+ break;
+
+ case TrackType.Text:
+ if (index >= 0 && index < _textTrackInfo.Length)
+ {
+ Native.AVPPlayerTextTrackInfo trackInfo = _textTrackInfo[index];
+ track = new TextTrack(index, trackInfo.name, trackInfo.language, trackInfo.flags.IsDefault());
+ isActiveTrack = _state.selectedTextTrack == index;
+ }
+ break;
+
+ default:
+ break;
+ }
+ return track;
+ }
+
+ internal override bool InternalIsChangedTextCue()
+ {
+ return _state.status.HasUpdatedText();
+ }
+
+ internal override string InternalGetCurrentTextCue()
+ {
+ if (_playerText.buffer != IntPtr.Zero)
+ return Marshal.PtrToStringUni(_playerText.buffer, _playerText.length);
+ else
+ return null;
+ }
+ }
+
+#if !UNITY_EDITOR && ( UNITY_IOS || UNITY_ANDROID )
+ // Media Caching
+ public sealed partial class PlatformMediaPlayer
+ {
+ public override bool IsMediaCachingSupported()
+ {
+ return true;
+ }
+
+ public override void AddMediaToCache(string url, string headers, MediaCachingOptions options)
+ {
+ Native.MediaCachingOptions nativeOptions = new Native.MediaCachingOptions();
+ GCHandle artworkHandle = new GCHandle();
+
+ if (options != null)
+ {
+ nativeOptions.minimumRequiredBitRate = options.minimumRequiredBitRate;
+ nativeOptions.minimumRequiredResolution_width = options.minimumRequiredResolution.x;
+ nativeOptions.minimumRequiredResolution_height = options.minimumRequiredResolution.y;
+ nativeOptions.title = options.title;
+ if (options.artwork != null && options.artwork.Length > 0)
+ {
+ artworkHandle = GCHandle.Alloc(options.artwork, GCHandleType.Pinned);
+ nativeOptions.artwork = artworkHandle.AddrOfPinnedObject();
+ nativeOptions.artworkLength = options.artwork.Length;
+ }
+ }
+
+ Native.AVPPluginCacheMediaForURL(_player, url, headers, nativeOptions);
+
+ if (artworkHandle.IsAllocated)
+ {
+ artworkHandle.Free();
+ }
+ }
+
+ public override void CancelDownloadOfMediaToCache(string url)
+ {
+ Native.AVPPluginCancelDownloadOfMediaForURL(_player, url);
+ }
+
+ public override void RemoveMediaFromCache(string url)
+ {
+ Native.AVPPluginRemoveCachedMediaForURL(_player, url);
+ }
+
+ public override CachedMediaStatus GetCachedMediaStatus(string url, ref float progress)
+ {
+ return (CachedMediaStatus)Native.AVPPluginGetCachedMediaStatusForURL(_player, url, ref progress);
+ }
+ }
+#endif
+}
+
+#endif
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer.cs.meta
new file mode 100755
index 0000000..9f2bb8d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3f68628a1ef6349648e502d1c66b5114
+timeCreated: 1547113004
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayerExtensions.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayerExtensions.cs
new file mode 100755
index 0000000..e7256fb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayerExtensions.cs
@@ -0,0 +1,231 @@
+//-----------------------------------------------------------------------------
+// Copyright 2015-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+#if UNITY_2017_2_OR_NEWER && (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || (!UNITY_EDITOR && (UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID)))
+
+using System;
+using System.Runtime.InteropServices;
+using UnityEngine;
+
+namespace RenderHeads.Media.AVProVideo
+{
+ internal static class PlatformMediaPlayerExtensions
+ {
+ // AVPPlayerStatus
+
+ internal static bool IsReadyToPlay(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.ReadyToPlay) == PlatformMediaPlayer.Native.AVPPlayerStatus.ReadyToPlay;
+ }
+
+ internal static bool IsPlaying(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Playing) == PlatformMediaPlayer.Native.AVPPlayerStatus.Playing;
+ }
+
+ internal static bool IsPaused(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Paused) == PlatformMediaPlayer.Native.AVPPlayerStatus.Paused;
+ }
+
+ internal static bool IsFinished(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Finished) == PlatformMediaPlayer.Native.AVPPlayerStatus.Finished;
+ }
+
+ internal static bool IsSeeking(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Seeking) == PlatformMediaPlayer.Native.AVPPlayerStatus.Seeking;
+ }
+
+ internal static bool IsBuffering(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Buffering) == PlatformMediaPlayer.Native.AVPPlayerStatus.Buffering;
+ }
+
+ internal static bool IsStalled(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Stalled) == PlatformMediaPlayer.Native.AVPPlayerStatus.Stalled;
+ }
+
+ internal static bool IsExternalPlaybackActive(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.ExternalPlaybackActive) == PlatformMediaPlayer.Native.AVPPlayerStatus.ExternalPlaybackActive;
+ }
+
+ internal static bool IsCached(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Cached) == PlatformMediaPlayer.Native.AVPPlayerStatus.Cached;
+ }
+
+ internal static bool HasFinishedSeeking(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.FinishedSeeking) == PlatformMediaPlayer.Native.AVPPlayerStatus.FinishedSeeking;
+ }
+
+ internal static bool HasUpdatedAssetInfo(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedAssetInfo) == PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedAssetInfo;
+ }
+
+ internal static bool HasUpdatedTexture(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedTexture) == PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedTexture;
+ }
+
+ internal static bool HasUpdatedTextureTransform(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedTextureTransform) == PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedTextureTransform;
+ }
+
+ internal static bool HasUpdatedBufferedTimeRanges(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedBufferedTimeRanges) == PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedBufferedTimeRanges;
+ }
+
+ internal static bool HasUpdatedSeekableTimeRanges(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedSeekableTimeRanges) == PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedSeekableTimeRanges;
+ }
+
+ internal static bool HasUpdatedText(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedText) == PlatformMediaPlayer.Native.AVPPlayerStatus.UpdatedText;
+ }
+
+ internal static bool HasVideo(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.HasVideo) == PlatformMediaPlayer.Native.AVPPlayerStatus.HasVideo;
+ }
+
+ internal static bool HasAudio(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.HasAudio) == PlatformMediaPlayer.Native.AVPPlayerStatus.HasAudio;
+ }
+
+ internal static bool HasText(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.HasText) == PlatformMediaPlayer.Native.AVPPlayerStatus.HasText;
+ }
+
+ internal static bool HasMetadata(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.HasMetadata) == PlatformMediaPlayer.Native.AVPPlayerStatus.HasMetadata;
+ }
+
+ internal static bool HasFailed(this PlatformMediaPlayer.Native.AVPPlayerStatus status)
+ {
+ return (status & PlatformMediaPlayer.Native.AVPPlayerStatus.Failed) == PlatformMediaPlayer.Native.AVPPlayerStatus.Failed;
+ }
+
+ // AVPPlayerFlags
+
+ internal static bool IsLooping(this PlatformMediaPlayer.Native.AVPPlayerFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerFlags.Looping) == PlatformMediaPlayer.Native.AVPPlayerFlags.Looping;
+ }
+
+ internal static PlatformMediaPlayer.Native.AVPPlayerFlags SetLooping(this PlatformMediaPlayer.Native.AVPPlayerFlags flags, bool b)
+ {
+ if (flags.IsLooping() ^ b)
+ {
+ flags = (b ? flags | PlatformMediaPlayer.Native.AVPPlayerFlags.Looping
+ : flags & ~PlatformMediaPlayer.Native.AVPPlayerFlags.Looping) | PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty;
+ }
+ return flags;
+ }
+
+ internal static bool IsMuted(this PlatformMediaPlayer.Native.AVPPlayerFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerFlags.Muted) == PlatformMediaPlayer.Native.AVPPlayerFlags.Muted;
+ }
+
+ internal static PlatformMediaPlayer.Native.AVPPlayerFlags SetMuted(this PlatformMediaPlayer.Native.AVPPlayerFlags flags, bool b)
+ {
+ if (flags.IsMuted() ^ b)
+ {
+ flags = (b ? flags | PlatformMediaPlayer.Native.AVPPlayerFlags.Muted
+ : flags & ~PlatformMediaPlayer.Native.AVPPlayerFlags.Muted) | PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty;
+ }
+ return flags;
+ }
+
+ internal static bool IsExternalPlaybackAllowed(this PlatformMediaPlayer.Native.AVPPlayerFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerFlags.AllowExternalPlayback) == PlatformMediaPlayer.Native.AVPPlayerFlags.AllowExternalPlayback;
+ }
+
+ internal static PlatformMediaPlayer.Native.AVPPlayerFlags SetAllowExternalPlayback(this PlatformMediaPlayer.Native.AVPPlayerFlags flags, bool b)
+ {
+ if (flags.IsExternalPlaybackAllowed() ^ b)
+ {
+ flags = (b ? flags | PlatformMediaPlayer.Native.AVPPlayerFlags.AllowExternalPlayback
+ : flags & ~PlatformMediaPlayer.Native.AVPPlayerFlags.AllowExternalPlayback) | PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty;
+ }
+ return flags;
+ }
+
+ internal static bool ResumePlayback(this PlatformMediaPlayer.Native.AVPPlayerFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerFlags.ResumePlayback) == PlatformMediaPlayer.Native.AVPPlayerFlags.ResumePlayback;
+ }
+
+ internal static PlatformMediaPlayer.Native.AVPPlayerFlags SetResumePlayback(this PlatformMediaPlayer.Native.AVPPlayerFlags flags, bool b)
+ {
+ if (flags.ResumePlayback() ^ b)
+ {
+ flags = (b ? flags | PlatformMediaPlayer.Native.AVPPlayerFlags.ResumePlayback
+ : flags & ~PlatformMediaPlayer.Native.AVPPlayerFlags.ResumePlayback) | PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty;
+ }
+ return flags;
+ }
+
+ internal static bool IsDirty(this PlatformMediaPlayer.Native.AVPPlayerFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty) == PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty;
+ }
+
+ internal static PlatformMediaPlayer.Native.AVPPlayerFlags SetDirty(this PlatformMediaPlayer.Native.AVPPlayerFlags flags, bool b)
+ {
+ if (flags.IsDirty() ^ b)
+ {
+ flags = b ? flags | PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty : flags & ~PlatformMediaPlayer.Native.AVPPlayerFlags.Dirty;
+ }
+ return flags;
+ }
+
+ // MARK: AVPPlayerAssetFlags
+
+ internal static bool IsCompatibleWithAirPlay(this PlatformMediaPlayer.Native.AVPPlayerAssetFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerAssetFlags.CompatibleWithAirPlay) == PlatformMediaPlayer.Native.AVPPlayerAssetFlags.CompatibleWithAirPlay;
+ }
+
+ // MARK: AVPPlayerTrackFlags
+
+ internal static bool IsDefault(this PlatformMediaPlayer.Native.AVPPlayerTrackFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerTrackFlags.Default) == PlatformMediaPlayer.Native.AVPPlayerTrackFlags.Default;
+ }
+
+ // AVPPlayerTextureFlags
+
+ internal static bool IsFlipped(this PlatformMediaPlayer.Native.AVPPlayerTextureFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerTextureFlags.Flipped) == PlatformMediaPlayer.Native.AVPPlayerTextureFlags.Flipped;
+ }
+
+ internal static bool IsLinear(this PlatformMediaPlayer.Native.AVPPlayerTextureFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerTextureFlags.Linear) == PlatformMediaPlayer.Native.AVPPlayerTextureFlags.Linear;
+ }
+
+ internal static bool IsMipmapped(this PlatformMediaPlayer.Native.AVPPlayerTextureFlags flags)
+ {
+ return (flags & PlatformMediaPlayer.Native.AVPPlayerTextureFlags.Mipmapped) == PlatformMediaPlayer.Native.AVPPlayerTextureFlags.Mipmapped;
+ }
+ }
+}
+
+#endif
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayerExtensions.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayerExtensions.cs.meta
new file mode 100755
index 0000000..3e450bc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/PlatformMediaPlayerExtensions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e27ea5523e11f44c09e8d368eb1f2983
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WebGLMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WebGLMediaPlayer.cs
new file mode 100755
index 0000000..8a43aae
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WebGLMediaPlayer.cs
@@ -0,0 +1,926 @@
+//#define AVPRO_WEBGL_USE_RENDERTEXTURE
+// NOTE: We only allow this script to compile in editor so we can easily check for compilation issues
+#if (UNITY_EDITOR || UNITY_WEBGL)
+using UnityEngine;
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// WebGL implementation of BaseMediaPlayer
+ ///
+ public sealed class WebGLMediaPlayer : BaseMediaPlayer
+ {
+ //private enum AVPPlayerStatus
+ //{
+ // Unknown,
+ // ReadyToPlay,
+ // Playing,
+ // Finished,
+ // Seeking,
+ // Failed
+ //}
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerInsertVideoElement(string path, int[] idValues, int externalLibrary);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerWidth(int player);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerHeight(int player);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerGetLastError(int player);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerGetVideoTrackCount(int player);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerGetAudioTrackCount(int player);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerGetTextTrackCount(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerSetActiveVideoTrack(int player, int trackId);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerSetActiveAudioTrack(int player, int trackId);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerSetActiveTextTrack(int player, int trackId);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerClose(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerReady(int player);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerSetLooping(int player, bool loop);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsLooping(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsSeeking(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsPlaying(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsPaused(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsFinished(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsBuffering(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsPlaybackStalled(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerPlay(int player);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerPause(int player);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerSeekToTime(int player, double time, bool fast);
+
+ [DllImport("__Internal")]
+ private static extern double AVPPlayerGetCurrentTime(int player);
+
+ [DllImport("__Internal")]
+ private static extern float AVPPlayerGetDuration(int player);
+
+ [DllImport("__Internal")]
+ private static extern float AVPPlayerGetPlaybackRate(int player);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerSetPlaybackRate(int player, float rate);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerSetMuted(int player, bool muted);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsMuted(int player);
+
+ [DllImport("__Internal")]
+ private static extern float AVPPlayerGetVolume(int player);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerSetVolume(int player, float volume);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerHasVideo(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerHasAudio(int player);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerCreateVideoTexture(int textureId);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerDestroyVideoTexture(int textureId);
+
+ [DllImport("__Internal")]
+ private static extern void AVPPlayerFetchVideoTexture(int player, IntPtr texture, bool init);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerGetDecodedFrameCount(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerSupportedDecodedFrameCount(int player);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerHasMetadata(int player);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerUpdatePlayerIndex(int id);
+
+ [DllImport("__Internal")]
+ private static extern int AVPPlayerGetNumBufferedTimeRanges(int id);
+
+ [DllImport("__Internal")]
+ private static extern double AVPPlayerGetTimeRangeStart(int id, int timeRangeIndex);
+ [DllImport("__Internal")]
+ private static extern double AVPPlayerGetTimeRangeEnd(int id, int timeRangeIndex);
+
+ [DllImport("__Internal")]
+ private static extern string AVPPlayerGetVideoTrackName(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern string AVPPlayerGetAudioTrackName(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern string AVPPlayerGetTextTrackName(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern string AVPPlayerGetVideoTrackLanguage(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern string AVPPlayerGetAudioTrackLanguage(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern string AVPPlayerGetTextTrackLanguage(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsVideoTrackActive(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsAudioTrackActive(int player, int trackIndex);
+
+ [DllImport("__Internal")]
+ private static extern bool AVPPlayerIsTextTrackActive(int player, int trackIndex);
+
+ private WebGL.ExternalLibrary _externalLibrary = WebGL.ExternalLibrary.None;
+ private int _playerIndex = -1;
+ private int _playerID = -1;
+
+ #if AVPRO_WEBGL_USE_RENDERTEXTURE
+ private RenderTexture _texture = null;
+ #else
+ private Texture2D _texture = null;
+ #endif
+
+ private int _width = 0;
+ private int _height = 0;
+ private int _cachedVideoTrackCount = 0;
+ private int _cachedAudioTrackCount = 0;
+ private int _cachedTextTrackCount = 0;
+ private bool _isDirtyVideoTracks = false;
+ private bool _isDirtyAudioTracks = false;
+ private bool _isDirtyTextTracks = false;
+ private bool _useTextureMips = false;
+ private System.IntPtr _cachedTextureNativePtr = System.IntPtr.Zero;
+
+ private static bool _isWebGL1 = false;
+
+ public static bool InitialisePlatform()
+ {
+ _isWebGL1 = (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.OpenGLES2);
+ return true;
+ }
+
+ public WebGLMediaPlayer(MediaPlayer.OptionsWebGL options)
+ {
+ SetOptions(options);
+ }
+
+ public void SetOptions(MediaPlayer.OptionsWebGL options)
+ {
+ _externalLibrary = options.externalLibrary;
+ _useTextureMips = options.useTextureMips;
+ }
+
+ public override string GetVersion()
+ {
+ return "2.1.6";
+ }
+
+ public override string GetExpectedVersion()
+ {
+ return GetVersion();
+ }
+
+ public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
+ {
+ bool result = false;
+
+ if (path.StartsWith("http://") ||
+ path.StartsWith("https://") ||
+ path.StartsWith("file://") ||
+ path.StartsWith("blob:") ||
+ path.StartsWith("chrome-extension://"))
+ {
+ int[] idValues = new int[2];
+ idValues[0] = -1;
+ AVPPlayerInsertVideoElement(path, idValues, (int)_externalLibrary);
+ {
+ int playerIndex = idValues[0];
+ _playerID = idValues[1];
+
+ if (playerIndex > -1)
+ {
+ _playerIndex = playerIndex;
+ _mediaHints = mediaHints;
+ result = true;
+ }
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Unknown URL protocol");
+ }
+
+ return result;
+ }
+
+ public override void CloseMedia()
+ {
+ if (_playerIndex != -1)
+ {
+ Pause();
+
+ _width = 0;
+ _height = 0;
+ _cachedVideoTrackCount = 0;
+ _cachedAudioTrackCount = 0;
+ _cachedTextTrackCount = 0;
+ _isDirtyVideoTracks = false;
+ _isDirtyAudioTracks = false;
+ _isDirtyTextTracks = false;
+
+ AVPPlayerClose(_playerIndex);
+
+ if (_texture != null)
+ {
+ DestroyTexture();
+ }
+
+ _playerIndex = -1;
+ _playerID = -1;
+
+ base.CloseMedia();
+ }
+ }
+
+ public override bool IsLooping()
+ {
+ //Debug.Assert(_player != -1, "no player IsLooping");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsLooping(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override void SetLooping(bool looping)
+ {
+ //Debug.Assert(_playerIndex != -1, "no player SetLooping");
+
+ AVPPlayerSetLooping(_playerIndex, looping);
+ }
+
+ public override bool HasAudio()
+ {
+ //Debug.Assert(_player != -1, "no player HasAudio");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerHasAudio(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool HasVideo()
+ {
+ //Debug.Assert(_player != -1, "no player HasVideo");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerHasVideo(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool HasMetaData()
+ {
+ //Debug.Assert(_player != -1, "no player HasMetaData");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerHasMetadata(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool CanPlay()
+ {
+ //Debug.Assert(_player != -1, "no player CanPlay");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerReady(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override void Play()
+ {
+ Debug.Assert(_playerIndex != -1, "no player Play");
+
+ if (!AVPPlayerPlay(_playerIndex))
+ {
+ Debug.LogWarning("[AVProVideo] Browser permission prevented video playback");
+ }
+ }
+
+ public override void Pause()
+ {
+ Debug.Assert(_playerIndex != -1, "no player Pause");
+
+ AVPPlayerPause(_playerIndex);
+ }
+
+ public override void Stop()
+ {
+ Debug.Assert(_playerIndex != -1, "no player Stop");
+
+ AVPPlayerPause(_playerIndex);
+ }
+
+ public override void Seek(double time)
+ {
+ Debug.Assert(_playerIndex != -1, "no player Seek");
+ AVPPlayerSeekToTime(_playerIndex, time, false);
+ }
+
+ public override void SeekFast(double time)
+ {
+ Debug.Assert(_playerIndex != -1, "no player SeekFast");
+ AVPPlayerSeekToTime(_playerIndex, time, true);
+ }
+
+ public override double GetCurrentTime()
+ {
+ //Debug.Assert(_player != -1, "no player GetCurrentTime");
+ double result = 0.0;
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerGetCurrentTime(_playerIndex);
+ }
+ return result;
+ }
+
+ public override void SetPlaybackRate(float rate)
+ {
+ Debug.Assert(_playerIndex != -1, "no player SetPlaybackRate");
+
+ // No HTML implementations allow negative rate yet
+ rate = Mathf.Clamp(rate, 0.25f, 8f);
+
+ AVPPlayerSetPlaybackRate(_playerIndex, rate);
+ }
+
+ public override float GetPlaybackRate()
+ {
+ //Debug.Assert(_player != -1, "no player GetPlaybackRate");
+ float result = 0.0f;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerGetPlaybackRate(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override double GetDuration()
+ {
+ //Debug.Assert(_player != -1, "no player GetDuration");
+ double result = 0.0;
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerGetDuration(_playerIndex);
+ }
+ return result;
+ }
+
+ public override int GetVideoWidth()
+ {
+ if (_width == 0)
+ {
+ _width = AVPPlayerWidth(_playerIndex);
+ }
+ return _width;
+ }
+
+ public override int GetVideoHeight()
+ {
+ if (_height == 0)
+ {
+ _height = AVPPlayerHeight(_playerIndex);
+ }
+ return _height;
+ }
+
+ public override float GetVideoFrameRate()
+ {
+ // There is no way in HTML5 yet to get the frame rate of the video
+ return 0f;
+ }
+
+ public override bool IsSeeking()
+ {
+ //Debug.Assert(_player != -1, "no player IsSeeking");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsSeeking(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool IsPlaying()
+ {
+ //Debug.Assert(_player != -1, "no player IsPlaying");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsPlaying(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool IsPaused()
+ {
+ //Debug.Assert(_player != -1, "no player IsPaused");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsPaused(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool IsFinished()
+ {
+ //Debug.Assert(_player != -1, "no player IsFinished");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsFinished(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool IsBuffering()
+ {
+ //Debug.Assert(_player != -1, "no player IsBuffering");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsBuffering(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override Texture GetTexture( int index )
+ {
+ return _texture;
+ }
+
+ public override int GetTextureFrameCount()
+ {
+ //Debug.Assert(_player != -1, "no player GetTextureFrameCount");
+ int result = 0;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerGetDecodedFrameCount(_playerIndex);
+ }
+
+ return result;
+ }
+
+ internal override StereoPacking InternalGetTextureStereoPacking()
+ {
+ return StereoPacking.Unknown;
+ }
+
+ public override bool SupportsTextureFrameCount()
+ {
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerSupportedDecodedFrameCount(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override bool RequiresVerticalFlip()
+ {
+ return true;
+ }
+
+ public override bool IsMuted()
+ {
+ //Debug.Assert(_player != -1, "no player IsMuted");
+ bool result = false;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerIsMuted(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override void MuteAudio(bool bMute)
+ {
+ Debug.Assert(_playerIndex != -1, "no player MuteAudio");
+
+ AVPPlayerSetMuted(_playerIndex, bMute);
+ }
+
+ public override void SetVolume(float volume)
+ {
+ Debug.Assert(_playerIndex != -1, "no player SetVolume");
+
+ AVPPlayerSetVolume(_playerIndex, volume);
+ }
+
+ public override float GetVolume()
+ {
+ //Debug.Assert(_player != -1, "no player GetVolume");
+ float result = 0.0f;
+
+ if (_playerIndex != -1)
+ {
+ result = AVPPlayerGetVolume(_playerIndex);
+ }
+
+ return result;
+ }
+
+ public override void Render()
+ {
+
+ }
+
+ private void UpdateLastErrorCode()
+ {
+ var code = AVPPlayerGetLastError(_playerIndex);
+
+ switch(code){
+ case 0:
+ _lastError = ErrorCode.None;
+ break;
+ case 1:
+ _lastError = ErrorCode.LoadFailed;
+ break;
+ case 2:
+ _lastError = ErrorCode.LoadFailed;
+ break;
+ case 3:
+ _lastError = ErrorCode.DecodeFailed;
+ break;
+ case 4:
+ _lastError = ErrorCode.LoadFailed;
+ break;
+ default:
+ break;
+ }
+ }
+
+ private bool IsMipMapGenerationSupported(int videoWidth, int videoHeight)
+ {
+ if (!_isWebGL1 || (Mathf.IsPowerOfTwo(videoWidth) && Mathf.IsPowerOfTwo(videoHeight)))
+ {
+ // Mip generation only supported in WebGL 2.0, or WebGL 1.0 when using power-of-two textures
+ return true;
+ }
+ return false;
+ }
+
+ private void CreateTexture()
+ {
+ //Debug.Log("creating texture " + _width + " X " + _height);
+
+#if AVPRO_WEBGL_USE_RENDERTEXTURE
+ _texture = new RenderTexture(_width, _height, 0, RenderTextureFormat.Default);
+ _texture.autoGenerateMips = false;
+ _texture.useMipMap = (_useTextureMips && IsMipMapGenerationSupported(_width, _height));
+ _texture.Create();
+ _cachedTextureNativePtr = _texture.GetNativeTexturePtr();
+#else
+ int textureId = 80000 + _playerIndex;
+ _cachedTextureNativePtr = new System.IntPtr(textureId);
+ AVPPlayerCreateVideoTexture(textureId);
+ // TODO: add support for mip generation
+ _texture = Texture2D.CreateExternalTexture(_width, _height, TextureFormat.RGBA32, false, false, _cachedTextureNativePtr);
+ if (_useTextureMips)
+ {
+ Debug.LogWarning("[AVProVideo] Texture Mips not yet implemented in this WebGL rendering path");
+ }
+ //Debug.Log("created texture1 " + _texture);
+ //Debug.Log("created texture2 " + _texture.GetNativeTexturePtr().ToInt32());
+#endif
+
+ ApplyTextureProperties(_texture);
+
+ bool initTexture = true;
+ #if AVPRO_WEBGL_USE_RENDERTEXTURE
+ // Textures in WebGL 2.0 don't require texImage2D as they are already recreated with texStorage2D
+ initTexture = _isWebGL1;
+ #endif
+ AVPPlayerFetchVideoTexture(_playerIndex, _cachedTextureNativePtr, initTexture);
+ }
+
+ private void DestroyTexture()
+ {
+ // Have to update with zero to release Metal textures!
+ //_texture.UpdateExternalTexture(0);
+ if (_texture != null)
+ {
+ #if AVPRO_WEBGL_USE_RENDERTEXTURE
+ RenderTexture.Destroy(_texture);
+ #else
+ Texture2D.Destroy(_texture);
+ AVPPlayerDestroyVideoTexture(_cachedTextureNativePtr.ToInt32());
+ #endif
+ _texture = null;
+ }
+ _cachedTextureNativePtr = System.IntPtr.Zero;
+ }
+
+ public override void Update()
+ {
+ if(_playerID >= 0) // CheckPlayer's index and update it
+ {
+ _playerIndex = AVPPlayerUpdatePlayerIndex(_playerID);
+ }
+
+ if(_playerIndex >= 0)
+ {
+ CheckTracksDirty();
+ UpdateTracks();
+ UpdateTextCue();
+ UpdateSubtitles();
+ UpdateLastErrorCode();
+
+ if (AVPPlayerReady(_playerIndex))
+ {
+ UpdateTimeRanges();
+ if (AVPPlayerHasVideo(_playerIndex))
+ {
+ _width = AVPPlayerWidth(_playerIndex);
+ _height = AVPPlayerHeight(_playerIndex);
+
+ if (_texture != null && (_texture.width != _width || _texture.height != _height))
+ {
+ DestroyTexture();
+ }
+
+ if (_texture == null && _width > 0 && _height > 0)
+ {
+ CreateTexture();
+ }
+
+ // Update the texture
+ if (_cachedTextureNativePtr != System.IntPtr.Zero)
+ {
+ // TODO: only update the texture when the frame count changes
+ // (actually this will break the update for certain browsers such as edge and possibly safari - Sunrise)
+ AVPPlayerFetchVideoTexture(_playerIndex, _cachedTextureNativePtr, false);
+
+ #if AVPRO_WEBGL_USE_RENDERTEXTURE
+ if (_texture.useMipMap)
+ {
+ _texture.GenerateMips();
+ }
+ #endif
+ }
+
+ UpdateDisplayFrameRate();
+ }
+ }
+ }
+ }
+
+ private void CheckTracksDirty()
+ {
+ _isDirtyVideoTracks = false;
+ _isDirtyAudioTracks = false;
+ _isDirtyTextTracks = false;
+
+ // TODO: replace this crude polling check with events, or only do it once metadataReady
+ // Need to add event support as tracks can be added via HTML (especially text)
+ int videoTrackCount = AVPPlayerGetVideoTrackCount(_playerIndex);
+ int audioTrackCount = AVPPlayerGetAudioTrackCount(_playerIndex);
+ int textTrackCount = AVPPlayerGetTextTrackCount(_playerIndex);
+
+ _isDirtyVideoTracks = (_cachedVideoTrackCount != videoTrackCount);
+ _isDirtyAudioTracks = (_cachedAudioTrackCount != audioTrackCount);
+ _isDirtyTextTracks = ( _cachedTextTrackCount != textTrackCount);
+
+ _cachedVideoTrackCount = videoTrackCount;
+ _cachedAudioTrackCount = audioTrackCount;
+ _cachedTextTrackCount = textTrackCount;
+ }
+
+ private void UpdateTimeRanges()
+ {
+ {
+ int rangeCount = AVPPlayerGetNumBufferedTimeRanges(_playerIndex);
+ if (rangeCount != _bufferedTimes.Count)
+ {
+ _bufferedTimes._ranges = new TimeRange[rangeCount];
+ }
+ for (int i = 0; i < rangeCount; i++)
+ {
+ double startTime = AVPPlayerGetTimeRangeStart(_playerIndex, i);
+ double endTime = AVPPlayerGetTimeRangeEnd(_playerIndex, i);
+ _bufferedTimes._ranges[i] = new TimeRange(startTime, endTime - startTime);
+ }
+ _bufferedTimes.CalculateRange();
+ }
+
+ {
+ double duration = GetDuration();
+ if (duration > 0.0)
+ {
+ _seekableTimes._ranges = new TimeRange[1];
+ _seekableTimes._ranges[0] = new TimeRange(0.0, duration);
+ }
+ else
+ {
+ _seekableTimes._ranges = new TimeRange[0];
+ }
+ _seekableTimes.CalculateRange();
+ }
+ }
+
+ public override void Dispose()
+ {
+ CloseMedia();
+ }
+
+ public override bool IsPlaybackStalled()
+ {
+ bool result = false;
+ if (_playerIndex > -1)
+ {
+ result = AVPPlayerIsPlaybackStalled(_playerIndex) && IsPlaying();
+ }
+ return result;
+ }
+
+ // Tracks
+ internal override int InternalGetTrackCount(TrackType trackType)
+ {
+ int result = 0;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ result = AVPPlayerGetVideoTrackCount(_playerIndex);
+ break;
+ case TrackType.Audio:
+ result = AVPPlayerGetAudioTrackCount(_playerIndex);
+ break;
+ case TrackType.Text:
+ result = AVPPlayerGetTextTrackCount(_playerIndex);
+ break;
+ }
+ return result;
+ }
+
+ internal override bool InternalIsChangedTracks(TrackType trackType)
+ {
+ bool result = false;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ result = _isDirtyVideoTracks;
+ break;
+ case TrackType.Audio:
+ result = _isDirtyAudioTracks;
+ break;
+ case TrackType.Text:
+ result = _isDirtyTextTracks;
+ break;
+ }
+ return result;
+ }
+
+ internal override bool InternalSetActiveTrack(TrackType trackType, int trackId)
+ {
+ bool result = false;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ result = AVPPlayerSetActiveVideoTrack(_playerIndex, trackId);
+ break;
+ case TrackType.Audio:
+ result = AVPPlayerSetActiveAudioTrack(_playerIndex, trackId);
+ break;
+ case TrackType.Text:
+ result = AVPPlayerSetActiveTextTrack(_playerIndex, trackId);
+ break;
+ }
+ return result;
+ }
+
+ internal override TrackBase InternalGetTrackInfo(TrackType trackType, int trackIndex, ref bool isActiveTrack)
+ {
+ TrackBase result = null;
+
+ switch (trackType)
+ {
+ case TrackType.Video:
+ {
+ string trackName = AVPPlayerGetVideoTrackName(_playerIndex, trackIndex);
+ string trackLanguage = AVPPlayerGetVideoTrackLanguage(_playerIndex, trackIndex);
+ bool isActive = AVPPlayerIsVideoTrackActive(_playerIndex, trackIndex);
+ result = new VideoTrack(trackIndex, trackName, trackLanguage, isActive);
+ break;
+ }
+ case TrackType.Audio:
+ {
+ string trackName = AVPPlayerGetAudioTrackName(_playerIndex, trackIndex);
+ string trackLanguage = AVPPlayerGetAudioTrackLanguage(_playerIndex, trackIndex);
+ bool isActive = AVPPlayerIsAudioTrackActive(_playerIndex, trackIndex);
+ result = new AudioTrack(trackIndex, trackName, trackLanguage, isActive);
+ break;
+ }
+ case TrackType.Text:
+ {
+ string trackName = AVPPlayerGetTextTrackName(_playerIndex, trackIndex);
+ string trackLanguage = AVPPlayerGetTextTrackLanguage(_playerIndex, trackIndex);
+ bool isActive = AVPPlayerIsTextTrackActive(_playerIndex, trackIndex);
+ result = new TextTrack(trackIndex, trackName, trackLanguage, isActive);
+ break;
+ }
+ }
+ return result;
+ }
+
+ // Text Cue stub methods
+ internal override bool InternalIsChangedTextCue() { return false; }
+ internal override string InternalGetCurrentTextCue() { return string.Empty; }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WebGLMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WebGLMediaPlayer.cs.meta
new file mode 100755
index 0000000..ec77bd6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WebGLMediaPlayer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c044ff13d5570e64a8156bc718b3cfec
+timeCreated: 1468230219
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer.cs
new file mode 100755
index 0000000..847453b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer.cs
@@ -0,0 +1,1745 @@
+// NOTE: We only allow this script to compile in editor so we can easily check for compilation issues
+#if (UNITY_EDITOR || (UNITY_STANDALONE_WIN || UNITY_WSA_10_0))
+
+#if UNITY_WSA_10 || ENABLE_IL2CPP
+ #define AVPROVIDEO_MARSHAL_RETURN_BOOL
+#endif
+#if UNITY_5_4_OR_NEWER && !UNITY_2019_3_OR_NEWER
+ #define AVPROVIDEO_FIXREGRESSION_TEXTUREQUALITY_UNITY542
+#endif
+#if UNITY_2019_3_OR_NEWER && !UNITY_2020_1_OR_NEWER
+ #define AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+#endif
+
+using UnityEngine;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using System;
+using System.Text;
+
+#if NETFX_CORE
+using Windows.Storage.Streams;
+#endif
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Windows desktop and UWP implementation of BaseMediaPlayer
+ ///
+ public /*sealed*/ partial class WindowsMediaPlayer : BaseMediaPlayer
+ {
+ private Windows.AudioOutput _audioOutput = Windows.AudioOutput.System;
+ private string _audioDeviceOutputName = string.Empty;
+ private List _preferredFilters = new List();
+ private Audio360ChannelMode _audio360ChannelMode = Audio360ChannelMode.TBE_8_2;
+ private bool _useCustomMovParser = false;
+ private bool _useStereoDetection = true;
+ private bool _useHapNotchLC = true;
+ private bool _useTextTrackSupport = true;
+ private bool _useFacebookAudio360Support = true;
+ private bool _useAudioDelay = false;
+ private int _decoderParallelFrameCount = 3;
+ private int _decodePrerollFrameCount = 5;
+ private bool _isPlaying = false;
+ private bool _isPaused = false;
+ private bool _audioMuted = false;
+ private float _volume = 1.0f;
+ private float _balance = 0.0f;
+ private bool _isLooping = false;
+ private bool _canPlay = false;
+ private bool _hasMetaData = false;
+ private int _width = 0;
+ private int _height = 0;
+ private float _frameRate = 0f;
+ private bool _hasAudio = false;
+ private bool _hasVideo = false;
+ private bool _isTextureTopDown = true;
+ private System.IntPtr _nativeTexture = System.IntPtr.Zero;
+ private Texture2D _texture;
+ private RenderTexture _resolvedTexture;
+ private System.IntPtr _instance = System.IntPtr.Zero;
+ private Windows.VideoApi _videoApi = Windows.VideoApi.MediaFoundation;
+ private bool _useHardwareDecoding = true;
+ private bool _useRendererSync = true;
+ private bool _useTextureMips = false;
+ private bool _use10BitTextures = false;
+ private bool _hintAlphaChannel = false;
+ private bool _useLowLatency = false;
+ private bool _supportsLinearColorSpace = true;
+ private TextureFrame _textureFrame;
+#if AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+ private TextureFrame _textureFramePrev;
+#endif
+ private static bool _isInitialised = false;
+ private static string _version = "Plug-in not yet initialised";
+ private static System.IntPtr _nativeFunction_UnityRenderEvent;
+
+#if AVPROVIDEO_FIXREGRESSION_TEXTUREQUALITY_UNITY542
+ private int _textureQuality = QualitySettings.masterTextureLimit;
+#endif
+
+ public static bool InitialisePlatform()
+ {
+ if (!_isInitialised)
+ {
+ try
+ {
+#if !UNITY_2019_3_OR_NEWER
+ if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12)
+ {
+ Debug.LogError("[AVProVideo] Direct3D 12 is not supported until Unity 2019.3");
+ return false;
+ }
+#endif
+
+ if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Null ||
+ SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.OpenGLCore ||
+#if !UNITY_2017_2_OR_NEWER
+ SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D9 ||
+#endif
+ SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D11 ||
+ SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12)
+ {
+ if (!Native.Init(QualitySettings.activeColorSpace == ColorSpace.Linear/*, true*/))
+ {
+ Debug.LogError("[AVProVideo] Failing to initialise platform");
+ }
+ else
+ {
+ _isInitialised = true;
+ _version = GetPluginVersion();
+ _nativeFunction_UnityRenderEvent = Native.GetRenderEventFunc();
+ if (_nativeFunction_UnityRenderEvent != IntPtr.Zero)
+ {
+ _isInitialised = true;
+ }
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] graphicsDeviceType not supported: " + SystemInfo.graphicsDeviceType);
+ }
+ }
+ catch (System.DllNotFoundException e)
+ {
+ Debug.LogError("[AVProVideo] Failed to load DLL. " + e.Message);
+ }
+ }
+
+ return _isInitialised;
+ }
+
+ public static void DeinitPlatform()
+ {
+ Native.Deinit();
+ _isInitialised = false;
+ }
+
+ public override int GetAudioChannelCount()
+ {
+ return Native.GetAudioChannelCount(_instance);
+ }
+
+ public override AudioChannelMaskFlags GetAudioChannelMask()
+ {
+ return (AudioChannelMaskFlags)Native.GetAudioChannelMask(_instance);
+ }
+
+ public WindowsMediaPlayer(MediaPlayer.OptionsWindows options) : base()
+ {
+ SetOptions(
+ options.videoApi,
+ options._audioMode,
+ options.useHardwareDecoding,
+ options.useRendererSync,
+ options.useTextureMips,
+ options.use10BitTextures,
+ options.hintAlphaChannel,
+ options.useLowLatency,
+ options.forceAudioOutputDeviceName,
+ options.preferredFilters,
+ options.useCustomMovParser,
+ options.parallelFrameCount,
+ options.prerollFrameCount,
+ options.useHapNotchLC,
+ options.useStereoDetection,
+ options.useTextTrackSupport,
+ options.useFacebookAudio360Support,
+ options.bufferedFrameSelection,
+ options.pauseOnPrerollComplete,
+ options.useAudioDelay
+ );
+ }
+
+ public WindowsMediaPlayer(MediaPlayer.OptionsWindowsUWP options) : base()
+ {
+ Windows.VideoApi api = (options.videoApi == WindowsUWP.VideoApi.MediaFoundation)?Windows.VideoApi.MediaFoundation:Windows.VideoApi.WinRT;
+ Windows.AudioOutput audioOutput = (Windows.AudioOutput)(int)options._audioMode;
+ SetOptions(
+ api,
+ audioOutput,
+ options.useHardwareDecoding,
+ options.useRendererSync,
+ options.useTextureMips,
+ options.use10BitTextures,
+ false,
+ options.useLowLatency,
+ string.Empty,
+ null,
+ false,
+ 1,
+ 0,
+ false,
+ true,
+ false,
+ true,
+ BufferedFrameSelectionMode.None,
+ false,
+ false
+ );
+ }
+
+ public void SetOptions(Windows.VideoApi videoApi, Windows.AudioOutput audioOutput, bool useHardwareDecoding, bool useRendererSync, bool useTextureMips, bool use10BitTextures,
+ bool hintAlphaChannel, bool useLowLatency, string audioDeviceOutputName, List preferredFilters, bool useCustomMovParser, int parallelFrameCount,
+ int prerollFrameCount, bool useHapNotchLC, bool useStereoDetection, bool useTextTrackSupport, bool useFacebookAudio360Support,
+ BufferedFrameSelectionMode bufferedFrameSelection, bool pauseOnPrerollComplete, bool useAudioDelay)
+ {
+ _videoApi = videoApi;
+ _audioOutput = audioOutput;
+ _useHardwareDecoding = useHardwareDecoding;
+ _useRendererSync = useRendererSync;
+ _useTextureMips = useTextureMips;
+ _use10BitTextures = use10BitTextures;
+ _hintAlphaChannel = hintAlphaChannel;
+ _useLowLatency = useLowLatency;
+ _useStereoDetection = useStereoDetection;
+ _useTextTrackSupport = useTextTrackSupport;
+ _useFacebookAudio360Support = useFacebookAudio360Support;
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ _frameSelectionMode = bufferedFrameSelection;
+ _pauseOnPrerollComplete = pauseOnPrerollComplete;
+#endif
+ _useHapNotchLC = useHapNotchLC;
+ _useCustomMovParser = useCustomMovParser;
+ _decoderParallelFrameCount = parallelFrameCount;
+ _decodePrerollFrameCount = prerollFrameCount;
+ _useAudioDelay = useAudioDelay;
+ _audioDeviceOutputName = audioDeviceOutputName;
+ if (!string.IsNullOrEmpty(_audioDeviceOutputName))
+ {
+ _audioDeviceOutputName = _audioDeviceOutputName.Trim();
+ }
+ _preferredFilters = preferredFilters;
+ if (_preferredFilters != null)
+ {
+ for (int i = 0; i < _preferredFilters.Count; ++i)
+ {
+ if (!string.IsNullOrEmpty(_preferredFilters[i]))
+ {
+ _preferredFilters[i] = _preferredFilters[i].Trim();
+ }
+ }
+ }
+ }
+
+ public override string GetVersion()
+ {
+ return _version;
+ }
+
+ public override string GetExpectedVersion()
+ {
+ return Helper.ExpectedPluginVersion.Windows;
+ }
+
+ private bool UseNativeMips()
+ {
+ // RJT TODO: Heuristic(s) to decide whether mipping should be performed at native level or here
+ // - Query native first to see whether it can handle?
+ // - E.g. D3D11/12 hardware path should be able to handle but software not
+ // - May become moot if we're going to create a resolved texture at this level anyhow (makes sense to generate mips as final step?)
+ return _useTextureMips;//true;// false;// _useTextureMips;
+ }
+
+ public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
+ {
+ // RJT NOTE: Commented out as already called by 'InternalOpenMedia()' which calls this function
+// CloseMedia();
+
+ uint filterCount = 0U;
+ IntPtr[] filters = null;
+
+ if (_preferredFilters != null && _preferredFilters.Count > 0)
+ {
+ filterCount = (uint)_preferredFilters.Count;
+ filters = new IntPtr[_preferredFilters.Count];
+
+ for (int i = 0; i < filters.Length; ++i)
+ {
+ filters[i] = Marshal.StringToHGlobalUni(_preferredFilters[i]);
+ }
+ }
+
+ _instance = Native.BeginOpenSource(
+ _instance,
+ _videoApi,
+ _audioOutput,
+ _useHardwareDecoding,
+ _useRendererSync,
+ UseNativeMips(),
+ (mediaHints.transparency == TransparencyMode.Transparent),
+ _useLowLatency,
+ _use10BitTextures,
+ _audioDeviceOutputName,
+ ((_audioOutput == Windows.AudioOutput.Unity) ? Helper.GetUnityAudioSampleRate() : 0),
+ filters,
+ filterCount,
+ (int)_audio360ChannelMode
+ );
+
+ if (_instance != System.IntPtr.Zero)
+ {
+ Native.SetCustomMovParserEnabled(_instance, _useCustomMovParser);
+ Native.SetHapNotchLCEnabled(_instance, _useHapNotchLC);
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ Native.SetFrameBufferingEnabled(_instance, (_frameSelectionMode != BufferedFrameSelectionMode.None), _pauseOnPrerollComplete);
+#endif
+ Native.SetStereoDetectEnabled(_instance, _useStereoDetection);
+ Native.SetTextTrackSupportEnabled(_instance, _useTextTrackSupport);
+ Native.SetAudioDelayEnabled(_instance, _useAudioDelay, true, 0.0);
+ Native.SetFacebookAudio360SupportEnabled(_instance, _useFacebookAudio360Support);
+ Native.SetDecoderHints(_instance, _decoderParallelFrameCount, _decodePrerollFrameCount);
+ _instance = Native.EndOpenSource(_instance, path);
+
+ // RJT NOTE: Other platforms create their native instances earlier than 'OpenMedia()' and set looping at that
+ // point which Windows misses, so make sure once we have an instance we pass the looping flag down retrospectively
+ // - https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1852
+ // - Same now with volume: https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1916
+ Native.SetLooping(_instance, _isLooping);
+ Native.SetVolume(_instance, _volume);
+ }
+
+ if (filters != null)
+ {
+ for (int i = 0; i < filters.Length; ++i)
+ {
+ Marshal.FreeHGlobal(filters[i]);
+ }
+ }
+
+ if (_instance == System.IntPtr.Zero)
+ {
+ DisplayLoadFailureSuggestion(path);
+ return false;
+ }
+
+ _mediaHints = mediaHints;
+
+ return true;
+ }
+
+ public override bool OpenMediaFromBuffer(byte[] buffer)
+ {
+ CloseMedia();
+
+ IntPtr[] filters;
+ if (_preferredFilters.Count == 0)
+ {
+ filters = null;
+ }
+ else
+ {
+ filters = new IntPtr[_preferredFilters.Count];
+
+ for (int i = 0; i < filters.Length; ++i)
+ {
+ filters[i] = Marshal.StringToHGlobalUni(_preferredFilters[i]);
+ }
+ }
+
+ _instance = Native.OpenSourceFromBuffer(
+ _instance,
+ buffer,
+ (ulong)buffer.Length,
+ _videoApi,
+ _audioOutput,
+ _useHardwareDecoding,
+ _useRendererSync,
+ UseNativeMips(),
+ (_mediaHints.transparency == TransparencyMode.Transparent),
+ _useLowLatency,
+ _use10BitTextures,
+ _audioDeviceOutputName,
+ ((_audioOutput == Windows.AudioOutput.Unity) ? Helper.GetUnityAudioSampleRate() : 0 ),
+ filters,
+ (uint)_preferredFilters.Count
+ );
+
+ if (filters != null)
+ {
+ for (int i = 0; i < filters.Length; ++i)
+ {
+ Marshal.FreeHGlobal(filters[i]);
+ }
+ }
+
+ if (_instance == System.IntPtr.Zero)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public override bool StartOpenMediaFromBuffer(ulong length)
+ {
+ CloseMedia();
+
+ _instance = Native.StartOpenSourceFromBuffer(_instance, _videoApi, length);
+
+ return _instance != IntPtr.Zero;
+ }
+
+ public override bool AddChunkToMediaBuffer(byte[] chunk, ulong offset, ulong length)
+ {
+ return Native.AddChunkToSourceBuffer(_instance, chunk, offset, length);
+ }
+
+ public override bool EndOpenMediaFromBuffer()
+ {
+ IntPtr[] filters;
+ if (_preferredFilters.Count == 0)
+ {
+ filters = null;
+ }
+ else
+ {
+ filters = new IntPtr[_preferredFilters.Count];
+
+ for (int i = 0; i < filters.Length; ++i)
+ {
+ filters[i] = Marshal.StringToHGlobalUni(_preferredFilters[i]);
+ }
+ }
+
+ _instance = Native.EndOpenSourceFromBuffer(
+ _instance,
+ _audioOutput,
+ _useHardwareDecoding,
+ _useRendererSync,
+ UseNativeMips(),
+ _hintAlphaChannel,
+ _useLowLatency,
+ _use10BitTextures,
+ _audioDeviceOutputName,
+ ((_audioOutput == Windows.AudioOutput.Unity) ? Helper.GetUnityAudioSampleRate() : 0),
+ filters,
+ (uint)_preferredFilters.Count
+ );
+
+ if (filters != null)
+ {
+ for (int i = 0; i < filters.Length; ++i)
+ {
+ Marshal.FreeHGlobal(filters[i]);
+ }
+ }
+
+ if (_instance == System.IntPtr.Zero)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+#if NETFX_CORE
+ public override bool OpenMedia(IRandomAccessStream ras, string path, long offset, string httpHeader)
+ {
+ CloseMedia();
+
+ _instance = Native.OpenSourceFromStream(
+ _instance,
+ ras,
+ path,
+ _videoApi,
+ _audioOutput,
+ _useHardwareDecoding,
+ _useRendererSync,
+ UseNativeMips(),
+ _hintAlphaChannel,
+ _useLowLatency,
+ _use10BitTextures,
+ _audioDeviceOutputName,
+ ((_audioOutput == Windows.AudioOutput.Unity) ? Helper.GetUnityAudioSampleRate() : 0)
+ );
+
+ if (_instance == System.IntPtr.Zero)
+ {
+ DisplayLoadFailureSuggestion(path);
+ return false;
+ }
+
+ return true;
+ }
+#endif
+
+ private void DisplayLoadFailureSuggestion(string path)
+ {
+ bool usingDirectShow = (_videoApi == Windows.VideoApi.DirectShow) || SystemInfo.operatingSystem.Contains("Windows 7") || SystemInfo.operatingSystem.Contains("Windows Vista") || SystemInfo.operatingSystem.Contains("Windows XP");
+ if (usingDirectShow && path.Contains(".mp4"))
+ {
+ Debug.LogWarning("[AVProVideo] The native Windows DirectShow H.264 decoder doesn't support videos with resolution above 1920x1080. You may need to reduce your video resolution, switch to another codec (such as DivX or Hap), or install 3rd party DirectShow codec (eg LAV Filters). This shouldn't be a problem for Windows 8 and above as it has a native limitation of 3840x2160.");
+ }
+ }
+
+ public override void CloseMedia()
+ {
+ _width = 0;
+ _height = 0;
+ _frameRate = 0f;
+ _hasAudio = _hasVideo = false;
+ _hasMetaData = false;
+ _canPlay = false;
+ _isPaused = true;
+ _isPlaying = false;
+ _isLooping = false;
+ _audioMuted = false;
+ _volume = 1f;
+ _balance = 0f;
+ _supportsLinearColorSpace = true;
+ _displayClockTime = 0.0;
+ _timeAccumulation = 0.0;
+ FlushFrameBuffering(true);
+ ReleaseTexture();
+
+ if (_instance != System.IntPtr.Zero)
+ {
+ Native.CloseSource(_instance);
+ _instance = System.IntPtr.Zero;
+ }
+
+ // Issue thread event to free the texture on the GPU
+ IssueRenderThreadEvent(Native.RenderThreadEvent.FreeTextures);
+
+ base.CloseMedia();
+ }
+
+ public override void SetLooping(bool looping)
+ {
+ _isLooping = looping;
+ Native.SetLooping(_instance, looping);
+ }
+
+ public override bool IsLooping()
+ {
+ return _isLooping;
+ }
+
+ public override bool HasMetaData()
+ {
+ return _hasMetaData;
+ }
+
+ public override bool HasAudio()
+ {
+ return _hasAudio;
+ }
+
+ public override bool HasVideo()
+ {
+ return _hasVideo;
+ }
+
+ public override bool CanPlay()
+ {
+ return _canPlay;
+ }
+
+ public override void Play()
+ {
+ _isPlaying = true;
+ _isPaused = false;
+ Native.Play(_instance);
+ }
+
+ public override void Pause()
+ {
+ _isPlaying = false;
+ _isPaused = true;
+ Native.Pause(_instance);
+ }
+
+ public override void Stop()
+ {
+/* _isPlaying = false;
+ _isPaused = true;
+ Native.Pause(_instance);*/
+
+ Pause();
+ }
+
+ public override bool IsSeeking()
+ {
+ return Native.IsSeeking(_instance);
+ }
+ public override bool IsPlaying()
+ {
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ if (_isPlaying && _frameSelectionMode != BufferedFrameSelectionMode.None)
+ {
+ // In case we're still playing the buffered frames at the end of the video
+ // We want to return true, even though internally it has stopping playing
+ if (Native.IsFinished(_instance) && !IsFinished())
+ {
+ return true;
+ }
+ // In this case internal state can change so we need to check that too
+ if (_pauseOnPrerollComplete)
+ {
+ return Native.IsPlaying(_instance);
+ }
+ }
+#endif
+ return Native.IsPlaying(_instance);//_isPlaying;
+ }
+ public override bool IsPaused()
+ {
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ if (_pauseOnPrerollComplete)
+ {
+ // In this case internal state can change so we need to check that too
+ return _isPaused || !Native.IsPlaying(_instance);
+ }
+#endif
+ // RJT TODO: 'Native.IsPaused()'?
+ return (_isPaused || (_isPlaying && !Native.IsPlaying(_instance)));//_isPaused;
+ }
+ public override bool IsFinished()
+ {
+ bool result = false;
+
+ if (!IsLooping())
+ {
+ result = Native.IsFinished(_instance);
+// RJT NOTE: Commented out for now as seems over-aggressive and can lead to freeze conditions as seen in: https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1692
+// - If we need to reinstate then we'd likely need considerably more tolerance, especially on slower machines
+#if false
+ if (!result)
+ {
+ // This fixes a bug in Media Foundation where in some rare cases Native.IsFinished() returns false
+ result = (GetCurrentTime() > GetDuration());
+ }
+#endif
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ // During buffered playback we need to wait until all frames have been displayed
+ if (result && _frameSelectionMode != BufferedFrameSelectionMode.None)
+ {
+ BufferedFramesState state = GetBufferedFramesState();
+ if (state.bufferedFrameCount != 0)
+ {
+ result = false;
+ }
+ }
+#endif
+ }
+
+ return result;
+ }
+
+ public override bool IsBuffering()
+ {
+ return Native.IsBuffering(_instance);
+ }
+
+ public override double GetDuration()
+ {
+ return Native.GetDuration(_instance);
+ }
+
+ public override int GetVideoWidth()
+ {
+ return _width;
+ }
+
+ public override int GetVideoHeight()
+ {
+ return _height;
+ }
+
+ public override float GetVideoFrameRate()
+ {
+ return _frameRate;
+ }
+
+ public override Texture GetTexture(int index)
+ {
+ Texture result = null;
+ if (GetTextureFrameCount() > 0)
+ {
+ if (_resolvedTexture) { result = _resolvedTexture; }
+ else { result = _texture; }
+ }
+ return result;
+ }
+
+ public override int GetTextureFrameCount()
+ {
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ if (_frameSelectionMode != BufferedFrameSelectionMode.None)
+ {
+ return (int)_textureFrame.frameCounter;
+ }
+#endif
+ return Native.GetTextureFrameCount(_instance);
+ }
+
+ public override long GetTextureTimeStamp()
+ {
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ if (_frameSelectionMode != BufferedFrameSelectionMode.None)
+ {
+ return _textureFrame.timeStamp;
+ }
+#endif
+ return Native.GetTextureTimeStamp(_instance);
+ }
+
+ // This is DAR/SAR ratio
+ public override float GetTexturePixelAspectRatio()
+ {
+ // Only DirectShow supports this currently as the other APIs create textures already in the final DAR size
+ // RJT NOTE: Expanded check to include MF as our HAP implementation also returns a PAR
+ if ((_videoApi == Windows.VideoApi.DirectShow) || (_videoApi == Windows.VideoApi.MediaFoundation))
+ {
+ return Native.GetTexturePixelAspectRatio(_instance);
+ }
+ return 1f;
+ }
+
+ public override bool RequiresVerticalFlip()
+ {
+ return _isTextureTopDown;
+ }
+
+ internal override StereoPacking InternalGetTextureStereoPacking()
+ {
+ return Native.GetStereoPacking(_instance);
+ }
+
+ public override void Seek(double time)
+ {
+ Native.SetCurrentTime(_instance, time, false);
+ FlushFrameBuffering(false);
+ }
+
+ public override void SeekFast(double time)
+ {
+ Native.SetCurrentTime(_instance, time, true);
+ FlushFrameBuffering(false);
+ }
+
+ public override double GetCurrentTime()
+ {
+ return Native.GetCurrentTime(_instance);
+ }
+
+ public override void SetPlaybackRate(float rate)
+ {
+ Native.SetPlaybackRate(_instance, rate);
+ }
+
+ public override float GetPlaybackRate()
+ {
+ return Native.GetPlaybackRate(_instance);
+ }
+
+ public override void MuteAudio(bool bMuted)
+ {
+ _audioMuted = bMuted;
+ Native.SetMuted(_instance, _audioMuted);
+ }
+
+ public override bool IsMuted()
+ {
+ return _audioMuted;
+ }
+
+ public override void SetVolume(float volume)
+ {
+ _volume = volume;
+ Native.SetVolume(_instance, volume);
+ }
+
+ public override float GetVolume()
+ {
+ return _volume;
+ }
+
+ public override void SetBalance(float balance)
+ {
+ _balance = balance;
+ Native.SetBalance(_instance, balance);
+ }
+
+ public override float GetBalance()
+ {
+ return _balance;
+ }
+
+ public override bool IsPlaybackStalled()
+ {
+ bool result = Native.IsPlaybackStalled(_instance);
+ if (!result)
+ {
+ result = base.IsPlaybackStalled();
+ }
+ return result;
+ }
+
+ public override bool WaitForNextFrame(Camera dummyCamera, int previousFrameCount)
+ {
+ // Mark as extracting
+ Native.StartExtractFrame(_instance);
+
+ // Queue up render thread event to wait for the new frame
+ IssueRenderThreadEvent(Native.RenderThreadEvent.WaitForNewFrame);
+
+ // Force render thread to run
+ dummyCamera.Render();
+
+ // Wait for the frame to change
+ Native.WaitForExtract(_instance);
+
+ // Return whether the frame changed
+ return (previousFrameCount != Native.GetTextureFrameCount(_instance));
+ }
+
+ public override void SetAudioChannelMode(Audio360ChannelMode channelMode)
+ {
+ _audio360ChannelMode = channelMode;
+ Native.SetAudioChannelMode(_instance, (int)channelMode);
+ }
+
+ public override void SetAudioHeadRotation(Quaternion q)
+ {
+ Native.SetHeadOrientation(_instance, q.x, q.y, q.z, q.w);
+ }
+
+ public override void ResetAudioHeadRotation()
+ {
+ Native.SetHeadOrientation(_instance, Quaternion.identity.x, Quaternion.identity.y, Quaternion.identity.z, Quaternion.identity.w);
+ }
+
+ public override void SetAudioFocusEnabled(bool enabled)
+ {
+ Native.SetAudioFocusEnabled(_instance, enabled);
+ }
+
+ public override void SetAudioFocusProperties(float offFocusLevel, float widthDegrees)
+ {
+ Native.SetAudioFocusProps(_instance, offFocusLevel, widthDegrees);
+ }
+
+ public override void SetAudioFocusRotation(Quaternion q)
+ {
+ Native.SetAudioFocusRotation(_instance, q.x, q.y, q.z, q.w);
+ }
+
+ public override void ResetAudioFocus()
+ {
+ Native.SetAudioFocusEnabled(_instance, false);
+ Native.SetAudioFocusProps(_instance, 0f, 90f);
+ Native.SetAudioFocusRotation(_instance, 0f, 0f, 0f, 1f);
+ }
+
+ //public override void SetAudioDeviceName(string name)
+ //{
+ //}
+
+ //double timeOfDesiredFrameToDisplay = 0.0;
+ //int frameFrames = 0;
+
+ public override void Update()
+ {
+ Native.Update(_instance);
+ /*Native.GetPlayerState(_instance, ref _playerState);
+ if (_playerState.status.HasFlag(Native.Status.UpdatedAssetInfo))
+ {
+ Native.GetAssetInfo(_instance, ref _assetInfo);
+ }*/
+
+ UpdateTracks();
+ UpdateTextCue();
+
+ _lastError = (ErrorCode)Native.GetLastErrorCode(_instance);
+
+ UpdateTimeRanges();
+ UpdateSubtitles();
+
+ if (!_canPlay)
+ {
+ if (!_hasMetaData)
+ {
+ if (Native.HasMetaData(_instance))
+ {
+ if (Native.HasVideo(_instance))
+ {
+ _width = Native.GetWidth(_instance);
+ _height = Native.GetHeight(_instance);
+ _frameRate = Native.GetFrameRate(_instance);
+
+ // Sometimes the dimensions aren't available yet, in which case fail and poll them again next loop
+ if (_width > 0 && _height > 0)
+ {
+ _hasVideo = true;
+
+ // Note: If the Unity editor Build platform isn't set to Windows then maxTextureSize will not be correct
+ if (Mathf.Max(_width, _height) > SystemInfo.maxTextureSize
+
+ // If we're running in the editor it may be emulating another platform
+ // in which case maxTextureSize won't be correct, so ignore it.
+#if UNITY_EDITOR
+ && !SystemInfo.graphicsDeviceName.ToLower().Contains("emulated")
+#endif
+ )
+ {
+ Debug.LogError(string.Format("[AVProVideo] Video dimensions ({0}x{1}) larger than maxTextureSize ({2} for current build target)", _width, _height, SystemInfo.maxTextureSize));
+ _width = _height = 0;
+ _hasVideo = false;
+ }
+ }
+
+ if (_hasVideo)
+ {
+ if (Native.HasAudio(_instance))
+ {
+ _hasAudio = true;
+ }
+ }
+ }
+ else
+ {
+ if (Native.HasAudio(_instance))
+ {
+ _hasAudio = true;
+ }
+ }
+
+ if (_hasVideo || _hasAudio)
+ {
+ _hasMetaData = true;
+ }
+
+ _playerDescription = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Native.GetPlayerDescription(_instance));
+ _supportsLinearColorSpace = Native.IsTextureSampleLinear(_instance);
+ Helper.LogInfo("Using playback path: " + _playerDescription + " (" + _width + "x" + _height + "@" + GetVideoFrameRate().ToString("F2") + ")");
+ if (_hasVideo)
+ {
+ OnTextureSizeChanged();
+ }
+ }
+ }
+ if (_hasMetaData)
+ {
+ _canPlay = Native.CanPlay(_instance);
+ }
+ }
+
+#if UNITY_WSA
+ // NOTE: I think this issue has been resolved now as of version 1.5.24.
+ // The issue was caused by functions returning booleans incorrectly (4 bytes vs 1)
+ // and as been resolved by specifying the return type during marshalling..
+ // Still we'll keep this code here until after more testing.
+
+ // WSA has an issue where it can load the audio track first and the video track later
+ // Here we try to handle this case and get the video track information when it arrives
+ if (_hasAudio && !_hasVideo)
+ {
+ _width = Native.GetWidth(_instance);
+ _height = Native.GetHeight(_instance);
+ _frameRate = Native.GetFrameRate(_instance);
+
+ if (_width > 0 && _height > 0)
+ {
+ _hasVideo = true;
+ OnTextureSizeChanged();
+ }
+ }
+#endif
+
+ // Handle texture creation, resizing, selection
+ if (_hasVideo)
+ {
+ System.IntPtr newTexturePtr = System.IntPtr.Zero;
+#if AVPROVIDEO_SUPPORT_BUFFERED_DISPLAY
+ if (_frameSelectionMode != BufferedFrameSelectionMode.None)
+ {
+ UpdateBufferedDisplay();
+ newTexturePtr = _textureFrame.texturePointer;
+ }
+ else
+#endif
+ {
+ newTexturePtr = Native.GetTexturePointer(_instance);
+ }
+
+ UpdateTexture(newTexturePtr);
+ }
+
+ _playbackQualityStats.Update();
+ }
+
+ private void ReleaseTexture()
+ {
+ _nativeTexture = System.IntPtr.Zero;
+#if UNITY_EDITOR
+ if (!Application.isPlaying)
+ {
+ if (_resolvedTexture) RenderTexture.DestroyImmediate(_resolvedTexture);
+ if (_texture) Texture2D.DestroyImmediate(_texture);
+ }
+ else
+#endif
+ {
+ if (_resolvedTexture) RenderTexture.Destroy(_resolvedTexture);
+ if (_texture) Texture2D.Destroy(_texture);
+ }
+ _resolvedTexture = null;
+ _texture = null;
+ _textureFrame = new TextureFrame();
+#if AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+ _textureFramePrev = new TextureFrame();
+#endif
+ }
+
+ private void UpdateTexture(System.IntPtr newPtr)
+ {
+ // Check for texture recreation (due to device loss or change in texture size)
+ if (_texture != null && _nativeTexture != System.IntPtr.Zero && _nativeTexture != newPtr)
+ {
+ _width = Native.GetWidth(_instance);
+ _height = Native.GetHeight(_instance);
+
+ if (newPtr == System.IntPtr.Zero)
+ {
+ ReleaseTexture();
+ }
+ else if (_width != _texture.width || _height != _texture.height)
+ {
+ Helper.LogInfo("Texture size changed: " + _width + " X " + _height);
+ OnTextureSizeChanged();
+ ReleaseTexture();
+ }
+ else if (_nativeTexture != newPtr)
+ {
+ if (newPtr != System.IntPtr.Zero)
+ {
+#if AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+ Native.ReleaseTextureFrame(_instance, ref _textureFramePrev);
+#endif
+ _texture.UpdateExternalTexture(newPtr);
+#if AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+ _textureFramePrev = _textureFrame;
+#endif
+ }
+ _nativeTexture = newPtr;
+ }
+ }
+
+#if AVPROVIDEO_FIXREGRESSION_TEXTUREQUALITY_UNITY542
+ // In Unity 5.4.2 and above the video texture turns black when changing the TextureQuality in the Quality Settings
+ // The code below gets around this issue. A bug report has been sent to Unity. So far we have tested and replicated the
+ // "bug" in Windows only, but a user has reported it in Android too.
+ // Texture.GetNativeTexturePtr() must sync with the rendering thread, so this is a large performance hit!
+ if(_textureQuality != QualitySettings.masterTextureLimit)
+ {
+ ApplyTextureQualityChangeFix();
+ }
+#endif
+
+ // Check if a new texture has to be created
+ if (_texture == null && _width > 0 && _height > 0 && newPtr != System.IntPtr.Zero)
+ {
+ _isTextureTopDown = Native.IsTextureTopDown(_instance);
+
+ // Texture format
+ // RJT NOTE: It seems Unity 2022/D3D12 now honours texture format here (internally creating
+ // an SRV) so 'BGRA32' is no longer valid for some of our native formats (e.g. HAP, NotchLC)
+ // - Unfortunately, there doesn't appear to be a Unity 'TextureFormat' analog for 'DXGI_FORMAT_R10G10B10A2_UNORM'
+ // so we're currently working around this by using a format it seems to deem compatible instead
+ // - Originally used 'ETC_RGB4' on the assumption an invalid format would bypass SRV creation but that
+ // only worked in editor, so replaced with 'RGB24' which appears to work in builds too
+ // - https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1286
+ // RJT TODO: Once AVPC is fully integrated and texture formats addressed, move to an (ideally shared!) enum rather than DXGI indices! (WIP)
+ // - Also expand to full range of supported formats at that point too
+ TextureFormat textureFormat = TextureFormat.BGRA32;
+ int dxgiTextureFormat = Native.GetTextureFormat(_instance);
+ switch (dxgiTextureFormat)
+ {
+ default:
+// case 2: // 'R8G8B8A8_UNORM' (Default, but actually 'BGRA8'/'BGRA32')
+ break;
+ case 11: // 'R10G10B10A2_UNORM'
+ textureFormat = TextureFormat.RGB24;//ETC_RGB4;
+ break;
+ case 6: // 'DXT1'
+ textureFormat = TextureFormat.DXT1;
+ break;
+ case 7: // 'DXT5'
+ textureFormat = TextureFormat.DXT5;
+ break;
+ }
+
+ // RJT NOTE: This flag is a bit confusing but ultimately if our incoming texture is NOT sRGB and Unity is in linear space then it should be true, else false
+ bool isLinear = (!_supportsLinearColorSpace && (QualitySettings.activeColorSpace == ColorSpace.Linear));
+ _texture = Texture2D.CreateExternalTexture(_width, _height, textureFormat, UseNativeMips(), isLinear, newPtr);
+ if (_texture != null)
+ {
+#if AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+ _textureFramePrev = _textureFrame;
+#endif
+ _texture.name = "AVProVideo";
+ _nativeTexture = newPtr;
+ _playbackQualityStats.Start(this);
+ ApplyTextureProperties(_texture);
+
+ // Use an intermediate resolved texture?
+ // RJT NOTE: Currently based on if/how mips are generated but may evolve (see 'Blit()' notes below)
+ // RJT TODO: Appears support for '_useTextureMips' is not dynamic during a single run? Would be nice to address..
+ if (_useTextureMips && !UseNativeMips())
+ {
+ // RJT TODO: Support 'isLinear'?
+ _resolvedTexture = new RenderTexture(_width, _height, 0);// RenderTextureFormat.ARGB32);
+ _resolvedTexture.useMipMap = _resolvedTexture.autoGenerateMips = false;
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to create texture");
+ }
+ }
+
+ // RJT TODO: If we have a resolved texture (Render Target) then blit into it, which will also generate mips if necessary
+ // - 1. For certain paths (i.e. D3D11/12 hardware) our 'Native.GetTexturePointer()' texture is already an RT
+ // so is it possible to directly wrap that instead of creating a duplicate RT at this level?
+ // - 2. There's probably a Unity version regression point at which this fails?
+ // - I.e. do we still need lower level support? (Ignoring standalone version of AVP etc..)
+ // - 3. Possible to move this to a higher level for full cross-platform support?
+ // - This could also become the start of the resolved render discussed, where as well as mip generation we also resolve to a final output texture?
+ // - I.e. move into caller of above 'GetTexture()' function?
+ // - 'ApplyMapping()' functions could apply to an internal intermediate texture (/material?) that _then_ gets applied as if it were the
+ // original texture making sure that rendering performance isn't unecessarily comprimised (i.e. may have to defer/change location)
+ // - Also, better location than 'Update()'? (I.e. 'Render()'?)
+ if (_texture && _resolvedTexture)
+ {
+ _resolvedTexture.useMipMap = _resolvedTexture.autoGenerateMips = _useTextureMips;
+ Graphics.Blit(_texture, _resolvedTexture);
+ }
+ }
+
+ public override void EndUpdate()
+ {
+ Native.EndUpdate(_instance);
+ }
+
+ public override long GetLastExtendedErrorCode()
+ {
+ return Native.GetLastExtendedErrorCode(_instance);
+ }
+
+ private void OnTextureSizeChanged()
+ {
+ }
+
+ public override void BeginRender()
+ {
+ IssueRenderThreadEvent(Native.RenderThreadEvent.BeginRender);
+ }
+
+ public override void Render()
+ {
+ UpdateDisplayFrameRate();
+
+ IssueRenderThreadEvent(Native.RenderThreadEvent.UpdateAllTextures);
+ }
+
+ public override void Dispose()
+ {
+ // RJT NOTE: Commented out as already called by 'MediaPlayer::OnDestroy()' which calls this function
+// CloseMedia();
+ }
+
+ public override int GrabAudio(float[] buffer, int sampleCount, int channelCount)
+ {
+ return Native.GrabAudio(_instance, buffer, sampleCount, channelCount);
+ }
+
+ public override int GetAudioBufferedSampleCount()
+ {
+ return Native.GetAudioBufferedSampleCount(_instance);
+ }
+
+ public override bool PlayerSupportsLinearColorSpace()
+ {
+ return _supportsLinearColorSpace;
+ }
+
+ public override bool GetDecoderPerformance(ref int activeDecodeThreadCount, ref int decodedFrameCount, ref int droppedFrameCount)
+ {
+ return Native.GetDecoderPerformance(_instance, ref activeDecodeThreadCount, ref decodedFrameCount, ref droppedFrameCount);
+ }
+
+ private static int _lastUpdateAllTexturesFrame = -1;
+ private static void IssueRenderThreadEvent(Native.RenderThreadEvent renderEvent)
+ {
+ // We only want to update all textures once per Unity frame
+ if ((renderEvent == Native.RenderThreadEvent.BeginRender) || (renderEvent == Native.RenderThreadEvent.UpdateAllTextures))
+ {
+ #if UNITY_EDITOR
+ // In the editor Time.frameCount is not updated when not in play mode, in which case skip this check and always allow rendering
+ if (Application.isPlaying)
+ #endif
+ if (_lastUpdateAllTexturesFrame == Time.frameCount)
+ {
+ return;
+ }
+
+ if (renderEvent == Native.RenderThreadEvent.UpdateAllTextures)
+ {
+ _lastUpdateAllTexturesFrame = Time.frameCount;
+ }
+ }
+
+ GL.IssuePluginEvent(_nativeFunction_UnityRenderEvent, (int)renderEvent);
+ }
+
+ private static string GetPluginVersion()
+ {
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Native.GetPluginVersion());
+ }
+
+#if AVPROVIDEO_FIXREGRESSION_TEXTUREQUALITY_UNITY542
+ private void ApplyTextureQualityChangeFix()
+ {
+ if (_texture != null && _nativeTexture != System.IntPtr.Zero && _texture.GetNativeTexturePtr() == System.IntPtr.Zero)
+ {
+ Debug.LogWarning("[AVProVideo] Applying Texture Quality/Lost Fix");
+ _texture.UpdateExternalTexture(_nativeTexture);
+ }
+ _textureQuality = QualitySettings.masterTextureLimit;
+ }
+
+ public override void OnEnable()
+ {
+ base.OnEnable();
+ ApplyTextureQualityChangeFix();
+ }
+#endif
+
+ internal override bool InternalSetActiveTrack(TrackType trackType, int trackUid)
+ {
+ bool result = false;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ case TrackType.Audio:
+ case TrackType.Text:
+ {
+ result = Native.SetActiveTrack(_instance, trackType, trackUid);
+ break;
+ }
+ }
+ return result;
+ }
+
+ // Has it changed since the last frame 'tick'
+ internal override bool InternalIsChangedTextCue()
+ {
+ return Native.IsChangedTextCue(_instance);
+ }
+
+ internal override string InternalGetCurrentTextCue()
+ {
+ string result = null;
+ System.IntPtr ptr = Native.GetCurrentTextCue(_instance);
+ if (ptr != System.IntPtr.Zero)
+ {
+ result = System.Runtime.InteropServices.Marshal.PtrToStringUni(ptr);
+ }
+ return result;
+ }
+
+ // Has it changed since the last frame 'tick'
+ internal override bool InternalIsChangedTracks(TrackType trackType)
+ {
+ bool result = false;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ case TrackType.Audio:
+ case TrackType.Text:
+ {
+ result = Native.IsChangedTracks(_instance, trackType);
+ break;
+ }
+ }
+ return result;
+ }
+
+ internal override int InternalGetTrackCount(TrackType trackType)
+ {
+ int result = 0;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ case TrackType.Audio:
+ case TrackType.Text:
+ {
+ result = Native.GetTrackCount(_instance, trackType);
+ break;
+ }
+ }
+ return result;
+ }
+
+ internal override TrackBase InternalGetTrackInfo(TrackType trackType, int trackIndex, ref bool isActiveTrack)
+ {
+ TrackBase result = null;
+ switch (trackType)
+ {
+ case TrackType.Video:
+ case TrackType.Audio:
+ case TrackType.Text:
+ {
+ StringBuilder name = new StringBuilder(128);
+ StringBuilder language = new StringBuilder(16);
+ int uid = -1;
+ if (Native.GetTrackInfo(_instance, trackType, trackIndex, ref uid, ref isActiveTrack, name, name.Capacity, language, language.Capacity))
+ {
+ if (trackType == TrackType.Video)
+ {
+ result = new VideoTrack(uid, name.ToString(), language.ToString(), false);
+ }
+ else if (trackType == TrackType.Audio)
+ {
+ result = new AudioTrack(uid, name.ToString(), language.ToString(), false);
+ }
+ else if (trackType == TrackType.Text)
+ {
+ result = new TextTrack(uid, name.ToString(), language.ToString(), false);
+ }
+ }
+ break;
+ }
+ }
+ return result;
+ }
+
+ /*private Native.PlayerState _playerState = new Native.PlayerState();
+ private Native.AssetInfo _assetInfo = new Native.AssetInfo();*/
+
+ private partial struct Native
+ {
+ /*[Flags]
+ internal enum Status : long
+ {
+ Unknown = 0,
+ UpdatedAssetInfo = 1 << 8,
+ UpdatedBufferedTimeRanges = 1 << 10,
+ UpdatedSeekableTimeRanges = 1 << 11,
+ UpdatedTextCue = 1 << 12,
+ UpdatedVideoTracks = 1 << 16,
+ UpdatedAudioTracks = 1 << 17,
+ UpdatedTextTracks = 1 << 18,
+ Failed = 1 << 63
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct PlayerState
+ {
+ internal Status status;
+ internal double currentTime;
+ internal double currentDate;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AssetInfo
+ {
+ internal double duration;
+ internal int width; // current video track
+ internal int height; // current video track
+ internal float frameRate; // current video track
+ internal int videoTrackCount;
+ internal int audioTrackCount;
+ internal int textTrackCount;
+ internal int metadataTrackCount;
+ internal int bufferedTimeRangesCount;
+ internal int seekableTimeRangesCount;
+ }
+
+ [DllImport("AVProVideo")]
+ public static extern void GetPlayerState(System.IntPtr instance, ref PlayerState playerState);
+
+ [DllImport("AVProVideo")]
+ public static extern void GetAssetInfo(System.IntPtr instance, ref AssetInfo assetInfo);*/
+
+ [DllImport("AVProVideo")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool IsChangedTracks(System.IntPtr instance, TrackType trackType);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetTrackCount(System.IntPtr instance, TrackType trackType);
+
+ [DllImport("AVProVideo")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool GetTrackInfo(System.IntPtr instance, TrackType trackType, int index, ref int uid,
+ ref bool isActive,
+ [MarshalAs(UnmanagedType.LPWStr)] StringBuilder name, int maxNameLength,
+ [MarshalAs(UnmanagedType.LPWStr)] StringBuilder language, int maxLanguageLength);
+
+ [DllImport("AVProVideo")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool SetActiveTrack(System.IntPtr instance, TrackType trackType, int trackUid);
+
+ [DllImport("AVProVideo")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool IsChangedTextCue(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr GetCurrentTextCue(System.IntPtr instance);
+ }
+
+ private void UpdateTimeRanges()
+ {
+ UpdateTimeRange(ref _seekableTimes._ranges, Native.TimeRangeTypes.Seekable);
+ UpdateTimeRange(ref _bufferedTimes._ranges, Native.TimeRangeTypes.Buffered);
+ _seekableTimes.CalculateRange();
+ _bufferedTimes.CalculateRange();
+ }
+
+ private void UpdateTimeRange(ref TimeRange[] range, Native.TimeRangeTypes timeRangeType)
+ {
+ int newCount = Native.GetTimeRanges(_instance, range, range.Length, timeRangeType);
+ if (newCount != range.Length)
+ {
+ range = new TimeRange[newCount];
+ Native.GetTimeRanges(_instance, range, range.Length, timeRangeType);
+ }
+ }
+
+ private partial struct Native
+ {
+ internal enum TimeRangeTypes
+ {
+ Seekable = 0,
+ Buffered = 1,
+ }
+
+ [DllImport("AVProVideo")]
+ public static extern int GetTimeRanges(System.IntPtr playerInstance, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)] TimeRange[] ranges, int rangeCount, TimeRangeTypes timeRangeType);
+ }
+
+ private partial struct Native
+ {
+ public enum RenderThreadEvent
+ {
+ BeginRender = 0,
+ UpdateAllTextures,
+ FreeTextures,
+ WaitForNewFrame,
+ }
+
+ // Global
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool Init(bool linearColorSpace);
+
+ [DllImport("AVProVideo")]
+ public static extern void Deinit();
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr GetPluginVersion();
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsTrialVersion();
+
+ // Open and Close
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr BeginOpenSource(System.IntPtr instance, Windows.VideoApi videoApi, Windows.AudioOutput audioOutput, bool useHardwareDecoding, bool useRendererSync,
+ bool generateTextureMips, bool hintAlphaChannel, bool useLowLatency, bool use10BitTextures, [MarshalAs(UnmanagedType.LPWStr)]string forceAudioOutputDeviceName,
+ int unitySampleRate, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)]IntPtr[] preferredFilter, uint numFilters,
+ int audio360ChannelMode);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr EndOpenSource(System.IntPtr instance, [MarshalAs(UnmanagedType.LPWStr)]string path);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr OpenSourceFromBuffer(System.IntPtr instance, byte[] buffer, ulong bufferLength, Windows.VideoApi videoApi, Windows.AudioOutput audioOutput,
+ bool useHardwareDecoding, bool useRendererSync, bool generateTextureMips, bool hintAlphaChannel, bool useLowLatency, bool use10BitTextures,
+ [MarshalAs(UnmanagedType.LPWStr)]string forceAudioOutputDeviceName, int unitySampleRate, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)]IntPtr[] preferredFilter,
+ uint numFilters);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr StartOpenSourceFromBuffer(System.IntPtr instance, Windows.VideoApi videoApi, ulong bufferLength);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool AddChunkToSourceBuffer(System.IntPtr instance, byte[] buffer, ulong offset, ulong chunkLength);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr EndOpenSourceFromBuffer(System.IntPtr instance, Windows.AudioOutput audioOutput, bool useHardwareDecoding, bool useRendererSync,
+ bool generateTextureMips, bool hintAlphaChannel, bool useLowLatency, bool use10BitTextures, [MarshalAs(UnmanagedType.LPWStr)]string forceAudioOutputDeviceName,
+ int unitySampleRate, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)]IntPtr[] preferredFilter, uint numFilters);
+
+#if NETFX_CORE
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr OpenSourceFromStream(System.IntPtr instance, IRandomAccessStream ras, [MarshalAs(UnmanagedType.LPWStr)]string path, Windows.VideoApi videoApi,
+ Windows.AudioOutput audioOutput, bool useHardwareDecoding, bool useRendererSync, bool generateTextureMips, bool hintAlphaChannel, bool useLowLatency, bool use10BitTextures,
+ [MarshalAs(UnmanagedType.LPWStr)]string forceAudioOutputDeviceName, int unitySampleRate);
+#endif
+
+ [DllImport("AVProVideo")]
+ public static extern void CloseSource(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr GetPlayerDescription(System.IntPtr instance);
+
+ // Custom Filters
+
+ [DllImport("AVProVideo")]
+ public static extern void SetCustomMovParserEnabled(System.IntPtr instance, bool enabled);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetHapNotchLCEnabled(System.IntPtr instance, bool enabled);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetFrameBufferingEnabled(System.IntPtr instance, bool enabled, bool pauseOnPrerollComplete);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetStereoDetectEnabled(System.IntPtr instance, bool enabled);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetTextTrackSupportEnabled(System.IntPtr instance, bool enabled);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetAudioDelayEnabled(System.IntPtr instance, bool enabled, bool isAutomatic, double timeSeconds);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetFacebookAudio360SupportEnabled(System.IntPtr instance, bool enabled);
+
+ // Hap & NotchLC Decoder
+
+ [DllImport("AVProVideo")]
+ public static extern void SetDecoderHints(System.IntPtr instance, int parallelFrameCount, int prerollFrameCount);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool GetDecoderPerformance(System.IntPtr instance, ref int activeDecodeThreadCount, ref int decodedFrameCount, ref int droppedFrameCount);
+
+ // Errors
+
+ [DllImport("AVProVideo")]
+ public static extern int GetLastErrorCode(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern long GetLastExtendedErrorCode(System.IntPtr instance);
+
+ // Controls
+
+ [DllImport("AVProVideo")]
+ public static extern void Play(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern void Pause(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetMuted(System.IntPtr instance, bool muted);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetVolume(System.IntPtr instance, float volume);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetBalance(System.IntPtr instance, float volume);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetLooping(System.IntPtr instance, bool looping);
+
+ // Properties
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool HasVideo(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool HasAudio(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetWidth(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetHeight(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern float GetFrameRate(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern StereoPacking GetStereoPacking(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern double GetDuration(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsPlaybackStalled(System.IntPtr instance);
+
+ // State
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool HasMetaData(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool CanPlay(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsSeeking(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsPlaying(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsFinished(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsBuffering(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern double GetCurrentTime(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetCurrentTime(System.IntPtr instance, double time, bool fast);
+
+ [DllImport("AVProVideo")]
+ public static extern float GetPlaybackRate(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetPlaybackRate(System.IntPtr instance, float rate);
+
+ [DllImport("AVProVideo")]
+ public static extern void StartExtractFrame(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern void WaitForExtract(System.IntPtr instance);
+
+ // Update and Rendering
+
+ [DllImport("AVProVideo")]
+ public static extern void Update(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern void EndUpdate(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr GetTexturePointer(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetTextureFormat(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsTextureTopDown(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsTextureSampleLinear(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetTextureFrameCount(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern long GetTextureTimeStamp(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern float GetTexturePixelAspectRatio(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern System.IntPtr GetRenderEventFunc();
+
+ // Audio Grabbing
+
+ [DllImport("AVProVideo")]
+ public static extern int GrabAudio(System.IntPtr instance, float[] buffer, int sampleCount, int channelCount);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetAudioBufferedSampleCount(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetAudioChannelCount(System.IntPtr instance);
+
+ [DllImport("AVProVideo")]
+ public static extern int GetAudioChannelMask(System.IntPtr instance);
+
+ // Audio 360
+
+ [DllImport("AVProVideo")]
+ public static extern int SetAudioChannelMode(System.IntPtr instance, int audio360ChannelMode);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetHeadOrientation(System.IntPtr instance, float x, float y, float z, float w);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetAudioFocusEnabled(System.IntPtr instance, bool enabled);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetAudioFocusProps(System.IntPtr instance, float offFocusLevel, float widthDegrees);
+
+ [DllImport("AVProVideo")]
+ public static extern void SetAudioFocusRotation(System.IntPtr instance, float x, float y, float z, float w);
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer.cs.meta
new file mode 100755
index 0000000..07f1f07
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6f3c954eb61392a4193295a8376bd8db
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer_BufferedFrames.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer_BufferedFrames.cs
new file mode 100755
index 0000000..998ecfc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer_BufferedFrames.cs
@@ -0,0 +1,322 @@
+// NOTE: We only allow this script to compile in editor so we can easily check for compilation issues
+#if (UNITY_EDITOR || (UNITY_STANDALONE_WIN || UNITY_WSA_10_0))
+
+#define AVPROVIDEO_FIXREGRESSION_TEXTUREQUALITY_UNITY542
+#if UNITY_WSA_10 || ENABLE_IL2CPP
+ #define AVPROVIDEO_MARSHAL_RETURN_BOOL
+#endif
+#if UNITY_2019_3_OR_NEWER && !UNITY_2020_1_OR_NEWER
+ #define AVPROVIDEO_FIX_UPDATEEXTERNALTEXTURE_LEAK
+#endif
+
+using UnityEngine;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using System;
+using System.Text;
+
+#if NETFX_CORE
+using Windows.Storage.Streams;
+#endif
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Windows desktop and UWP implementation of BaseMediaPlayer
+ ///
+ public /*sealed*/ partial class WindowsMediaPlayer : BaseMediaPlayer
+ {
+
+#region IBufferedDisplay Implementation
+
+ private BufferedFrameSelectionMode _frameSelectionMode = BufferedFrameSelectionMode.None;
+ private bool _pauseOnPrerollComplete = false;
+ private IBufferedDisplay _masterDisplay;
+ private IBufferedDisplay[] _slaveDisplays;
+ private double _displayClockTime = 0.0;
+ private double _timeAccumulation = 0.0;
+ private bool _needsInitialFrame = true;
+
+ private void FlushFrameBuffering(bool releaseTexture)
+ {
+ if (_frameSelectionMode == BufferedFrameSelectionMode.None) return;
+
+ if (releaseTexture && _textureFrame.internalNativePointer != System.IntPtr.Zero)
+ {
+ Native.UnlockTextureFrame(_instance, ref _textureFrame);
+ _textureFrame.internalNativePointer = System.IntPtr.Zero;
+ _textureFrame.texturePointer = System.IntPtr.Zero;
+ }
+
+ Native.FlushFrameBuffering(_instance);
+
+ // Native _pauseOnPrerollComplete needs to be reset
+ //Native.SetFrameBufferingEnabled(_instance, (_frameSelectionMode != BufferedFrameSelectionMode.None), _pauseOnPrerollComplete);
+
+ _needsInitialFrame = true;
+ _timeAccumulation = 0.0;
+ }
+
+ internal override long InternalUpdateBufferedDisplay()
+ {
+ BufferedFramesState state = GetBufferedFramesState();
+ if (state.bufferedFrameCount > 0)
+ {
+ if (_frameSelectionMode == BufferedFrameSelectionMode.NewestFrame)
+ {
+ SetBufferedDisplayTime(_frameSelectionMode, -1, false);
+ }
+ else if (_frameSelectionMode == BufferedFrameSelectionMode.OldestFrame)
+ {
+ SetBufferedDisplayTime(_frameSelectionMode, -1, false);
+ }
+ else if (_frameSelectionMode == BufferedFrameSelectionMode.ElapsedTime ||
+ _frameSelectionMode == BufferedFrameSelectionMode.ElapsedTimeVsynced)
+ {
+ // Only start consuming frames on these conditions
+ bool needsInitialFrame = (_textureFrame.texturePointer == System.IntPtr.Zero || _needsInitialFrame);
+ bool playingBufferedFrames = (IsPrerollComplete() && (IsPlaying() || (!IsPlaying() && IsFinished())));
+ if (needsInitialFrame || playingBufferedFrames)
+ {
+ if (needsInitialFrame)
+ {
+ if (SetBufferedDisplayTime(BufferedFrameSelectionMode.OldestFrame, -1, true))
+ {
+ _displayClockTime = _textureFrame.timeStamp;
+ _needsInitialFrame = false;
+ }
+ }
+ else
+ {
+ // TODO: run without vsync, just show next frame (use media clock for present?)
+ // use our own clock...
+ const double SecondsToHNS = 10000000.0;
+ double videoFrameDuration = SecondsToHNS / (double)GetVideoFrameRate();
+ long videoDuration = (long)Math.Floor(SecondsToHNS * GetDuration());
+ long lastFrameTime = Math.Max(videoDuration, state.maxTimeStamp);
+ double delta = SecondsToHNS * Time.deltaTime;
+
+ if (_frameSelectionMode == BufferedFrameSelectionMode.ElapsedTimeVsynced && QualitySettings.vSyncCount > 0)
+ {
+#if UNITY_2022_2_OR_NEWER
+ double refreshRate = Screen.currentResolution.refreshRateRatio.value;
+#else
+ double refreshRate = (double)( Screen.currentResolution.refreshRate );
+#endif
+
+ // Since we're running with vsync enabled, the MINIMUM elapsed time will be 1 monitor refresh (multiplied by QualitySettings.vSyncCount)
+ double monitorDuration = (QualitySettings.vSyncCount * SecondsToHNS) / refreshRate;
+
+ int wholeFrames = (int)System.Math.Floor(_timeAccumulation / monitorDuration);
+ wholeFrames = System.Math.Max(1, wholeFrames);
+ delta = monitorDuration * wholeFrames;
+
+ //LogBufferState();
+ if (wholeFrames > 1)
+ {
+ //Debug.Log(Time.frameCount + "] " + Time.deltaTime + " " + wholeFrames + " " + _timeAccumulation + " " + _timeAccumulation / SecondsToHNS);
+ //LogBufferState();
+ }
+
+ _timeAccumulation += (Time.deltaTime * SecondsToHNS) - delta;
+
+ //delta = monitorDuration;
+
+ /*double actualFrameDuration = Time.deltaTime * SecondsToHNS;
+ double idealFrameTimeDifference = (actualFrameDuration);// - minMonitorDuration);
+ if (idealFrameTimeDifference > (minMonitorDuration / 2))
+ {
+ int droppedFrames = (int)Math.Round(idealFrameTimeDifference / minMonitorDuration);
+ //Debug.Log(Time.maximumDeltaTime + " " + Time.deltaTime + " " + actualFrameDuration + " " + idealFrameTimeDifference + " = " + droppedFrames);
+ delta += minMonitorDuration * droppedFrames;
+
+ //LogBufferState();
+ }
+ else
+ {
+ //Debug.Log(Time.deltaTime);
+ }
+ // If we're running slower than this or there is a frame drop, the elapsed time will be a multiple
+ // of the monitor refresh rate
+ */
+ }
+
+ _displayClockTime += delta;
+
+ int multiple = (int)videoFrameDuration;
+ long snappedFrameTime = (long)Math.Floor(_displayClockTime / multiple) * multiple;
+ if (_isLooping && snappedFrameTime > lastFrameTime)
+ {
+ snappedFrameTime %= lastFrameTime;
+ _needsInitialFrame = true;
+ }
+ else
+ {
+ snappedFrameTime = Math.Min(snappedFrameTime, lastFrameTime);
+ }
+
+ if (System.Math.Abs(snappedFrameTime - _textureFrame.timeStamp) > 1000)
+ {
+ //Debug.Log("1 " + _displayClockTime + " > " + snappedFrameTime + " d:" + delta);
+ //LogBufferState();
+
+ if (_needsInitialFrame)
+ {
+ if (SetBufferedDisplayTime(BufferedFrameSelectionMode.OldestFrame, -1, true))
+ {
+ _displayClockTime = _textureFrame.timeStamp;
+ //Debug.Log("initial: " + _displayClockTime);
+ _needsInitialFrame = false;
+ }
+ }
+ else if (!SetBufferedDisplayTime(_frameSelectionMode, snappedFrameTime, false))
+ {
+ //Debug.LogWarning("[AVProVideo] failed to set time at " + snappedFrameTime);
+ //LogBufferState();
+
+ // Try to snap to oldest buffered time
+ _displayClockTime = (state.minTimeStamp + state.maxTimeStamp) / 2.0;
+ snappedFrameTime = (long)Math.Floor(_displayClockTime / multiple) * multiple;
+ if (_isLooping && snappedFrameTime > lastFrameTime)
+ {
+ snappedFrameTime %= lastFrameTime;
+ }
+ else
+ {
+ snappedFrameTime = Math.Min(snappedFrameTime, lastFrameTime);
+ }
+
+ if (SetBufferedDisplayTime(BufferedFrameSelectionMode.FromExternalTimeClosest, snappedFrameTime, false))
+ {
+ _displayClockTime = _textureFrame.timeStamp;
+ //Debug.LogWarning("[AVProVideo] Good set: " + _displayClockTime);
+ }
+ else
+ {
+ //Debug.LogWarning("[AVProVideo] Failed to display frame time " + snappedFrameTime);
+ //LogBufferState();
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (_frameSelectionMode == BufferedFrameSelectionMode.FromExternalTime)
+ {
+ if (_masterDisplay != null)
+ {
+ // Use the time from the master
+ long timeStamp = _masterDisplay.UpdateBufferedDisplay();
+ if (timeStamp != GetTextureTimeStamp())
+ {
+ if (!SetBufferedDisplayTime(BufferedFrameSelectionMode.FromExternalTimeClosest, timeStamp, false))
+ {
+ Debug.LogWarning("[AVProVideo] Failed to display frame using external clock at time " + timeStamp);
+ }
+ }
+ }
+ }
+ }
+
+ return GetTextureTimeStamp();
+ }
+
+ private void LogBufferState()
+ {
+ BufferedFramesState state = GetBufferedFramesState();
+ long timeStamp = GetTextureTimeStamp();
+ string result = string.Format("[AVProVideo] {4} - {2},{3}\t\t{0}-{1} ({5})", state.minTimeStamp, state.maxTimeStamp, state.bufferedFrameCount, state.freeFrameCount, timeStamp, Time.deltaTime);
+ Debug.Log(result);
+ }
+
+ private bool SetBufferedDisplayTime(BufferedFrameSelectionMode mode, long timeOfDesiredFrameToDisplay, bool ignorePreroll)
+ {
+ bool result = false;
+ //if (!_isPaused)
+ {
+ result = Native.LockTextureFrame(_instance, mode, timeOfDesiredFrameToDisplay, ref _textureFrame, ignorePreroll);
+ }
+ return result;
+ }
+
+ public override BufferedFramesState GetBufferedFramesState()
+ {
+ BufferedFramesState state = new BufferedFramesState();
+ Native.GetBufferedFramesState(_instance, ref state);
+ return state;
+ }
+
+ public override void SetBufferedDisplayMode(BufferedFrameSelectionMode mode, IBufferedDisplay master = null)
+ {
+ _frameSelectionMode = mode;
+ _masterDisplay = master;
+ UpdateBufferedDisplay();
+ }
+
+ public override void SetBufferedDisplayOptions(bool pauseOnPrerollComplete)
+ {
+ _pauseOnPrerollComplete = pauseOnPrerollComplete;
+ Native.SetFrameBufferingEnabled(_instance, (_frameSelectionMode != BufferedFrameSelectionMode.None), _pauseOnPrerollComplete);
+ }
+
+ public override void SetSlaves(IBufferedDisplay[] slaves)
+ {
+ foreach (IBufferedDisplay slave in slaves)
+ {
+ slave.SetBufferedDisplayMode(BufferedFrameSelectionMode.FromExternalTime, this);
+ }
+ _slaveDisplays = slaves;
+ }
+
+ private bool IsPrerollComplete()
+ {
+ bool result = true;
+
+ if (GetBufferedFramesState().prerolledCount <= 0)
+ {
+ result = false;
+ }
+ if (_slaveDisplays != null && result)
+ {
+ foreach (IBufferedDisplay slave in _slaveDisplays)
+ {
+ if (slave.GetBufferedFramesState().prerolledCount <= 0)
+ {
+ result = false;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ private partial struct Native
+ {
+ [DllImport("AVProVideo")]
+ public static extern bool GetBufferedFramesState(System.IntPtr playerInstance, ref BufferedFramesState state);
+
+ [DllImport("AVProVideo")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool LockTextureFrame(System.IntPtr instance, BufferedFrameSelectionMode mode, long time, ref TextureFrame textureFrame, bool ignorePreroll);
+
+ [DllImport("AVProVideo")]
+ public static extern void UnlockTextureFrame(System.IntPtr instance, ref TextureFrame textureFrame);
+
+ [DllImport("AVProVideo")]
+ public static extern void ReleaseTextureFrame(System.IntPtr instance, ref TextureFrame textureFrame);
+
+ [DllImport("AVProVideo")]
+ public static extern void FlushFrameBuffering(System.IntPtr instance);
+ }
+
+#endregion // IBufferedDisplay Implementation
+
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer_BufferedFrames.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer_BufferedFrames.cs.meta
new file mode 100755
index 0000000..1832904
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsMediaPlayer_BufferedFrames.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2b36cc2d6962ce34e86c5a83a0de6d4a
+timeCreated: 1630292296
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsRtMediaPlayer.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsRtMediaPlayer.cs
new file mode 100755
index 0000000..6a482dc
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsRtMediaPlayer.cs
@@ -0,0 +1,977 @@
+// NOTE: We only allow this script to compile in editor so we can easily check for compilation issues
+#if (UNITY_EDITOR || (UNITY_STANDALONE_WIN || UNITY_WSA_10_0))
+
+#if UNITY_WSA_10 || ENABLE_IL2CPP
+ #define AVPROVIDEO_MARSHAL_RETURN_BOOL
+#endif
+
+using UnityEngine;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using System;
+using System.Text;
+
+//-----------------------------------------------------------------------------
+// Copyright 2018-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public enum PlaybackState
+ {
+ None = 0,
+ Opening = 1,
+ Buffering = 2, // Replace with Stalled and add Buffering as State 64??
+ Playing = 3,
+ Paused = 4,
+ StateMask = 7,
+
+ Seeking = 32,
+ }
+
+ public class AuthData
+ {
+ public string URL { get; set; }
+ public string Token { get; set; }
+ public byte[] KeyBytes { get; set; }
+
+ public AuthData()
+ {
+ Clear();
+ }
+
+ public void Clear()
+ {
+ URL = string.Empty;
+ Token = string.Empty;
+ KeyBytes = null;
+ }
+
+ public string KeyBase64
+ {
+ get
+ {
+ if (KeyBytes != null)
+ {
+ return System.Convert.ToBase64String(KeyBytes);
+ }
+ else
+ {
+ return string.Empty;
+ }
+ }
+ set
+ {
+ if (value != null)
+ {
+ KeyBytes = System.Convert.FromBase64String(value);
+ }
+ else
+ {
+ KeyBytes = null;
+ }
+ }
+ }
+ };
+
+ public partial class WindowsRtMediaPlayer : BaseMediaPlayer
+ {
+ private bool _isMediaLoaded = false;
+ private bool _isLooping = false;
+ private float _volume = 1.0f;
+ private bool _use10BitTextures = false;
+ private bool _useLowLiveLatency = false;
+
+ public WindowsRtMediaPlayer(MediaPlayer.OptionsWindows options) : base()
+ {
+ _playerDescription = "WinRT";
+ _use10BitTextures = options.use10BitTextures;
+ _useLowLiveLatency = options.useLowLiveLatency;
+ for (int i = 0; i < _eyeTextures.Length; i++)
+ {
+ _eyeTextures[i] = new EyeTexture();
+ }
+ }
+
+ public WindowsRtMediaPlayer(MediaPlayer.OptionsWindowsUWP options) : base()
+ {
+ _playerDescription = "WinRT";
+ _use10BitTextures = options.use10BitTextures;
+ _useLowLiveLatency = options.useLowLiveLatency;
+ for (int i = 0; i < _eyeTextures.Length; i++)
+ {
+ _eyeTextures[i] = new EyeTexture();
+ }
+ }
+
+ public override bool CanPlay()
+ {
+ return HasMetaData();
+ }
+
+ public override void Dispose()
+ {
+ CloseMedia();
+ if (_playerInstance != System.IntPtr.Zero)
+ {
+ Native.DestroyPlayer(_playerInstance); _playerInstance = System.IntPtr.Zero;
+ Native.IssueRenderThreadEvent_FreeAllTextures();
+ }
+ for (int i = 0; i < _eyeTextures.Length; i++)
+ {
+ _eyeTextures[i].Dispose();
+ }
+ }
+
+ public override bool PlayerSupportsLinearColorSpace()
+ {
+ // The current player doesn't support rendering to SRGB textures
+ return false;
+ }
+
+ public override double GetCurrentTime()
+ {
+ return Native.GetCurrentPosition(_playerInstance);
+ }
+
+ public override double GetDuration()
+ {
+ return Native.GetDuration(_playerInstance);
+ }
+
+ public override float GetPlaybackRate()
+ {
+ return Native.GetPlaybackRate(_playerInstance);
+ }
+
+ public override Texture GetTexture(int index = 0)
+ {
+ Texture result = null;
+ if (_frameTimeStamp > 0 && index < _eyeTextures.Length)
+ {
+ result = _eyeTextures[index].texture;
+ }
+ return result;
+ }
+
+ public override int GetTextureCount()
+ {
+ if (_eyeTextures[1].texture != null)
+ {
+ return 2;
+ }
+ return 1;
+ }
+
+ public override int GetTextureFrameCount()
+ {
+ return (int)_frameTimeStamp;
+ }
+
+ internal override StereoPacking InternalGetTextureStereoPacking()
+ {
+ return Native.GetStereoPacking(_playerInstance);
+ }
+
+ public override string GetVersion()
+ {
+ return _version;
+ }
+
+ public override string GetExpectedVersion()
+ {
+ return Helper.ExpectedPluginVersion.WinRT;
+ }
+
+ public override float GetVideoFrameRate()
+ {
+ float result = 0f;
+ Native.VideoTrack videoTrack;
+ if (Native.GetActiveVideoTrackInfo(_playerInstance, out videoTrack))
+ {
+ result = videoTrack.frameRate;
+ }
+ return result;
+ }
+
+ public override int GetVideoWidth()
+ {
+ int result = 0;
+ if (_eyeTextures[0].texture)
+ {
+ result = _eyeTextures[0].texture.width;
+ }
+ return result;
+ }
+
+ public override int GetVideoHeight()
+ {
+ int result = 0;
+ if (_eyeTextures[0].texture)
+ {
+ result = _eyeTextures[0].texture.height;
+ }
+ return result;
+ }
+
+ public override float GetVolume()
+ {
+ return _volume;//Native.GetAudioVolume(_playerInstance);
+ }
+
+ public override void SetBalance(float balance)
+ {
+ Native.SetAudioBalance(_playerInstance, balance);
+ }
+
+ public override float GetBalance()
+ {
+ return Native.GetAudioBalance(_playerInstance);
+ }
+
+ public override bool HasAudio()
+ {
+ return _audioTracks.Count > 0;
+ }
+
+ public override bool HasMetaData()
+ {
+ return Native.GetDuration(_playerInstance) > 0f;
+ }
+
+ public override bool HasVideo()
+ {
+ return _videoTracks.Count > 0;
+ }
+
+ public override bool IsBuffering()
+ {
+ return ((Native.GetPlaybackState(_playerInstance) & PlaybackState.StateMask) == PlaybackState.Buffering);
+ }
+
+ public override bool IsFinished()
+ {
+ bool result = false;
+ if (IsPaused() && !IsSeeking() && GetCurrentTime() >= GetDuration())
+ {
+ result = true;
+ }
+ return result;
+ }
+
+ public override bool IsLooping()
+ {
+ return _isLooping;//Native.IsLooping(_playerInstance);
+ }
+
+ public override bool IsMuted()
+ {
+ return Native.IsAudioMuted(_playerInstance);
+ }
+
+ public override bool IsPaused()
+ {
+ return ((Native.GetPlaybackState(_playerInstance) & PlaybackState.StateMask) == PlaybackState.Paused);
+ }
+
+ public override bool IsPlaying()
+ {
+ return ((Native.GetPlaybackState(_playerInstance) & PlaybackState.StateMask) == PlaybackState.Playing);
+ }
+
+ public override bool IsSeeking()
+ {
+ return ((Native.GetPlaybackState(_playerInstance) & PlaybackState.Seeking) != 0);
+ }
+
+ public override void MuteAudio(bool bMuted)
+ {
+ Native.SetAudioMuted(_playerInstance, bMuted);
+ }
+
+ // TODO: replace all these options with a structure
+ public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
+ {
+ bool result = false;
+
+ // RJT NOTE: Commented out as already called by 'InternalOpenMedia()' which calls this function
+// CloseMedia();
+
+ if (_playerInstance == System.IntPtr.Zero)
+ {
+ _playerInstance = Native.CreatePlayer();
+
+ // Force setting any auth data as it wouldn't have been set without a _playerInstance
+ AuthenticationData = _nextAuthData;
+ }
+ if (_playerInstance != System.IntPtr.Zero)
+ {
+ result = Native.OpenMedia(_playerInstance, path, httpHeader, (FileFormat)forceFileFormat, startWithHighestBitrate, _use10BitTextures);
+ if (result)
+ {
+ if (_useLowLiveLatency)
+ {
+ Native.SetLiveOffset(_playerInstance, 0.0);
+ }
+
+ // RJT NOTE: Other platforms create their native instances earlier than 'OpenMedia()' and set looping at that
+ // point which Windows misses, so make sure once we have an instance we pass the looping flag down retrospectively
+ // - https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1913
+ // - Same now with volume: https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1916
+ Native.SetLooping(_playerInstance, _isLooping);
+ Native.SetAudioVolume(_playerInstance, _volume);
+ }
+ _mediaHints = mediaHints;
+ }
+
+ return result;
+ }
+
+ public override void CloseMedia()
+ {
+ // NOTE: This unloads the current video, but the texture should remain
+ _isMediaLoaded = false;
+ _isLooping = false;
+ _volume = 1.0f;
+ Native.CloseMedia(_playerInstance);
+
+ base.CloseMedia();
+ }
+
+ public override void Pause()
+ {
+ Native.Pause(_playerInstance);
+ }
+
+ public override void Play()
+ {
+ Native.Play(_playerInstance);
+ }
+
+ public override void Render()
+ {
+ Native.IssueRenderThreadEvent_UpdateAllTextures();
+ }
+
+ private void Update_Textures()
+ {
+ // See if there is a new frame ready
+ {
+ System.IntPtr texturePointerLeft = System.IntPtr.Zero;
+ System.IntPtr texturePointerRight = System.IntPtr.Zero;
+ ulong frameTimeStamp = 0;
+ int width, height;
+ if (Native.GetLatestFrame(_playerInstance, out texturePointerLeft, out texturePointerRight, out frameTimeStamp, out width, out height))
+ {
+ bool isFrameUpdated = false;
+ bool isNewFrameTime = (frameTimeStamp > _frameTimeStamp) || (_frameTimeStamp == 0 && frameTimeStamp == 0);
+ for (int i = 0; i < _eyeTextures.Length; i++)
+ {
+ EyeTexture eyeTexture = _eyeTextures[i];
+ System.IntPtr texturePointer = texturePointerLeft;
+ if (i == 1)
+ {
+ texturePointer = texturePointerRight;
+ }
+
+ bool isNewFrameSpecs = (eyeTexture.texture != null && (texturePointer == IntPtr.Zero || eyeTexture.texture.width != width || eyeTexture.texture.height != height));
+ //Debug.Log("tex? " + i + " " + width + " " + height + " " + (eyeTexture.texture != null) + " " + texturePointer.ToString() + " " + frameTimeStamp);
+
+ // Check whether the latest frame is newer than the one we got last time
+ if (isNewFrameTime || isNewFrameSpecs)
+ {
+ if (isNewFrameSpecs)
+ {
+ eyeTexture.Dispose();
+ // TODO: blit from the old texture to the new texture before destroying?
+ }
+
+ /// Switch to the latest texture pointer
+ if (eyeTexture.texture != null)
+ {
+ // TODO: check whether UpdateExternalTexture resets the sampling filter to POINT - it seems to in Unity 5.6.6
+ if (eyeTexture.nativePointer != texturePointer)
+ {
+ eyeTexture.texture.UpdateExternalTexture(texturePointer);
+ eyeTexture.nativePointer = texturePointer;
+ }
+ }
+ else
+ {
+ if (texturePointer != IntPtr.Zero)
+ {
+ // RJT NOTE: See notes in 'WindowsMediaPlayer::UpdateTexture()' re: 'isLinear'
+ bool isLinear = (/*!_supportsLinearColorSpace*/true && (QualitySettings.activeColorSpace == ColorSpace.Linear));
+ eyeTexture.texture = Texture2D.CreateExternalTexture(width, height, TextureFormat.BGRA32, false, isLinear, texturePointer);
+ if (eyeTexture.texture != null)
+ {
+ eyeTexture.texture.name = "AVProVideo";
+ eyeTexture.nativePointer = texturePointer;
+ ApplyTextureProperties(eyeTexture.texture);
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to create texture");
+ }
+ }
+ }
+
+ isFrameUpdated = true;
+ }
+ }
+ if (isFrameUpdated)
+ {
+ _frameTimeStamp = frameTimeStamp;
+ }
+ }
+ }
+ }
+
+ private AuthData _nextAuthData = new AuthData();
+
+ public AuthData AuthenticationData
+ {
+ get
+ {
+ return _nextAuthData;
+ }
+ set
+ {
+ _nextAuthData = value;
+ Native.SetNextAuthData(_playerInstance, _nextAuthData);
+ }
+ }
+
+ public override bool RequiresVerticalFlip()
+ {
+ return true;
+ }
+
+ public override void Seek(double time)
+ {
+ Native.SeekParams seekParams = new Native.SeekParams();
+ seekParams.timeSeconds = time;
+ seekParams.mode = Native.SeekMode.Accurate;
+ Native.Seek(_playerInstance, ref seekParams);
+ }
+
+ public override void SeekFast(double time)
+ {
+ // Keyframe seeking is not supported on this platform
+ Seek(time);
+ }
+
+ public override void SetLooping(bool bLooping)
+ {
+ _isLooping = bLooping;
+ Native.SetLooping(_playerInstance, _isLooping);
+ }
+
+ public override void SetPlaybackRate(float rate)
+ {
+ // Clamp rate as WinRT doesn't seem to be able to handle negative rate
+ rate = Mathf.Max(0f, rate);
+ Native.SetPlaybackRate(_playerInstance, rate);
+ }
+
+ public override void SetVolume(float volume)
+ {
+ _volume = volume;
+ Native.SetAudioVolume(_playerInstance, _volume);
+ }
+
+ public override void Stop()
+ {
+ Pause();
+ }
+
+ private void UpdateTimeRanges()
+ {
+ UpdateTimeRange(ref _seekableTimes._ranges, Native.TimeRangeTypes.Seekable);
+ UpdateTimeRange(ref _bufferedTimes._ranges, Native.TimeRangeTypes.Buffered);
+ _seekableTimes.CalculateRange();
+ _bufferedTimes.CalculateRange();
+ }
+
+ private void UpdateTimeRange(ref TimeRange[] range, Native.TimeRangeTypes timeRangeType)
+ {
+ int newCount = Native.GetTimeRanges(_playerInstance, range, range.Length, timeRangeType);
+ if (newCount != range.Length)
+ {
+ range = new TimeRange[newCount];
+ Native.GetTimeRanges(_playerInstance, range, range.Length, timeRangeType);
+ }
+ }
+
+ public override System.DateTime GetProgramDateTime()
+ {
+ double seconds = Native.GetCurrentDateTimeSecondsSince1970(_playerInstance);
+ return Helper.ConvertSecondsSince1970ToDateTime(seconds);
+ }
+
+ public override void Update()
+ {
+ Native.Update(_playerInstance);
+ UpdateTracks();
+ UpdateTextCue();
+
+ _lastError = (ErrorCode)Native.GetLastErrorCode(_playerInstance);
+
+ UpdateTimeRanges();
+ UpdateSubtitles();
+ Update_Textures();
+ UpdateDisplayFrameRate();
+
+ if (!_isMediaLoaded)
+ {
+ if (HasVideo() && _eyeTextures[0].texture != null)
+ {
+ Native.VideoTrack videoTrack;
+ if (Native.GetActiveVideoTrackInfo(_playerInstance, out videoTrack))
+ {
+ Helper.LogInfo("Using playback path: " + _playerDescription + " (" + videoTrack.frameWidth + "x" + videoTrack.frameHeight + "@" + videoTrack.frameRate.ToString("F2") + ")");
+ _isMediaLoaded = true;
+ }
+ }
+ else if (HasAudio() && !HasVideo())
+ {
+ Helper.LogInfo("Using playback path: " + _playerDescription);
+ _isMediaLoaded = true;
+ }
+ }
+ }
+
+ /*public override void SetKeyServerURL(string url)
+ {
+ _nextAuthData.URL = url;
+ AuthenticationData = _nextAuthData;
+ }*/
+
+ public override void SetKeyServerAuthToken(string token)
+ {
+ _nextAuthData.Token = token;
+ AuthenticationData = _nextAuthData;
+ }
+
+ public override void SetOverrideDecryptionKey(byte[] key)
+ {
+ _nextAuthData.KeyBytes = key;
+ AuthenticationData = _nextAuthData;
+ }
+ }
+
+ // Tracks
+ public sealed partial class WindowsRtMediaPlayer
+ {
+ internal override bool InternalSetActiveTrack(TrackType trackType, int trackUid)
+ {
+ return Native.SetActiveTrack(_playerInstance, trackType, trackUid);
+ }
+
+ // Has it changed since the last frame 'tick'
+ internal override bool InternalIsChangedTracks(TrackType trackType)
+ {
+ return Native.IsChangedTracks(_playerInstance, trackType);
+ }
+
+ internal override int InternalGetTrackCount(TrackType trackType)
+ {
+ return Native.GetTrackCount(_playerInstance, trackType);
+ }
+
+ internal override TrackBase InternalGetTrackInfo(TrackType trackType, int trackIndex, ref bool isActiveTrack)
+ {
+ TrackBase result = null;
+ StringBuilder name = new StringBuilder(128);
+ StringBuilder language = new StringBuilder(16);
+ int uid = -1;
+ if (Native.GetTrackInfo(_playerInstance, trackType, trackIndex, ref uid, ref isActiveTrack, name, name.Capacity, language, language.Capacity))
+ {
+ if (trackType == TrackType.Video)
+ {
+ result = new VideoTrack(uid, name.ToString(), language.ToString(), false);
+ }
+ else if (trackType == TrackType.Audio)
+ {
+ result = new AudioTrack(uid, name.ToString(), language.ToString(), false);
+ }
+ else if (trackType == TrackType.Text)
+ {
+ result = new TextTrack(uid, name.ToString(), language.ToString(), false);
+ }
+ }
+ return result;
+ }
+
+ private partial struct Native
+ {
+ [DllImport("AVProVideoWinRT")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool IsChangedTracks(System.IntPtr instance, TrackType trackType);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern int GetTrackCount(System.IntPtr instance, TrackType trackType);
+
+ [DllImport("AVProVideoWinRT")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool GetTrackInfo(System.IntPtr instance, TrackType trackType, int index, ref int uid,
+ ref bool isActive,
+ [MarshalAs(UnmanagedType.LPWStr)] StringBuilder name, int maxNameLength,
+ [MarshalAs(UnmanagedType.LPWStr)] StringBuilder language, int maxLanguageLength);
+
+ [DllImport("AVProVideoWinRT")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool SetActiveTrack(System.IntPtr instance, TrackType trackType, int trackUid);
+ }
+ }
+
+ // Text Cue
+ public sealed partial class WindowsRtMediaPlayer
+ {
+ // Has it changed since the last frame 'tick'
+ internal override bool InternalIsChangedTextCue()
+ {
+ return Native.IsChangedTextCue(_playerInstance);
+ }
+
+ internal override string InternalGetCurrentTextCue()
+ {
+ string result = null;
+ System.IntPtr ptr = Native.GetCurrentTextCue(_playerInstance);
+ if (ptr != System.IntPtr.Zero)
+ {
+ result = System.Runtime.InteropServices.Marshal.PtrToStringUni(ptr);
+ }
+ return result;
+ }
+
+ private partial struct Native
+ {
+ [DllImport("AVProVideoWinRT")]
+ [return: MarshalAs(UnmanagedType.I1)]
+ public static extern bool IsChangedTextCue(System.IntPtr instance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern System.IntPtr GetCurrentTextCue(System.IntPtr instance);
+ }
+ }
+
+ public sealed partial class WindowsRtMediaPlayer
+ {
+ private partial struct Native
+ {
+ [DllImport("AVProVideoWinRT", EntryPoint = "GetPluginVersion")]
+ private static extern System.IntPtr GetPluginVersionStringPointer();
+
+ public static string GetPluginVersion()
+ {
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(GetPluginVersionStringPointer());
+ }
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern System.IntPtr CreatePlayer();
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void DestroyPlayer(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool OpenMedia(System.IntPtr playerInstance, [MarshalAs(UnmanagedType.LPWStr)] string filePath,
+ [MarshalAs(UnmanagedType.LPWStr)] string httpHeader, FileFormat overrideFileFormat,
+ bool startWithHighestBitrate, bool use10BitTextures);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void CloseMedia(System.IntPtr playerInstance);
+
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void Pause(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void Play(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void SetAudioVolume(System.IntPtr playerInstance, float volume);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void SetAudioBalance(System.IntPtr playerInstance, float balance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void SetPlaybackRate(System.IntPtr playerInstance, float rate);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void SetAudioMuted(System.IntPtr playerInstance, bool muted);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern float GetAudioVolume(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsAudioMuted(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern float GetAudioBalance(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern float GetPlaybackRate(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void SetLooping(System.IntPtr playerInstance, bool looping);
+
+ [DllImport("AVProVideoWinRT")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool IsLooping(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern int GetLastErrorCode(System.IntPtr playerInstance);
+
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void Update(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern double GetDuration(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern StereoPacking GetStereoPacking(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern double GetCurrentPosition(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool GetLatestFrame(System.IntPtr playerInstance, out System.IntPtr leftEyeTexturePointer, out System.IntPtr rightEyeTexturePointer, out ulong frameTimeStamp, out int width, out int height);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern PlaybackState GetPlaybackState(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool GetActiveVideoTrackInfo(System.IntPtr playerInstance, out VideoTrack videoTrack);
+
+ [DllImport("AVProVideoWinRT")]
+#if AVPROVIDEO_MARSHAL_RETURN_BOOL
+ [return: MarshalAs(UnmanagedType.I1)]
+#endif
+ public static extern bool GetActiveAudioTrackInfo(System.IntPtr playerInstance, out AudioTrack audioTrack);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern double GetCurrentDateTimeSecondsSince1970(System.IntPtr playerInstance);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void SetLiveOffset(System.IntPtr playerInstance, double seconds);
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void DebugValues(System.IntPtr playerInstance, out int isD3D, out int isUnityD3D, out int isTexture, out int isSharedTexture, out int isSurface);
+
+ public enum SeekMode
+ {
+ Fast = 0,
+ Accurate = 1,
+ // TODO: Add Fast_Before and Fast_After
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct VideoTrack
+ {
+ public int trackIndex;
+ public int frameWidth;
+ public int frameHeight;
+ public float frameRate;
+ public uint averageBitRate;
+ //public string trackName;
+ // TODO: add index, language, name, bitrate, codec etc
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct AudioTrack
+ {
+ public int trackIndex;
+ public uint channelCount;
+ public uint sampleRate;
+ public uint bitsPerSample;
+ public uint averageBitRate;
+ //public string trackName;
+ // TODO: add index, language, name, bitrate, codec etc
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct SeekParams
+ {
+ public double timeSeconds;
+ public SeekMode mode;
+ // TODO: add min-max thresholds
+ }
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern void Seek(System.IntPtr playerInstance, ref SeekParams seekParams);
+
+ public static void SetNextAuthData(System.IntPtr playerInstance, RenderHeads.Media.AVProVideo.AuthData srcAuthData)
+ {
+ Native.AuthData ad = new Native.AuthData();
+ ad.url = string.IsNullOrEmpty(srcAuthData.URL) ? null : srcAuthData.URL;
+ ad.token = string.IsNullOrEmpty(srcAuthData.Token) ? null : srcAuthData.Token;
+ if (srcAuthData.KeyBytes != null && srcAuthData.KeyBytes.Length > 0)
+ {
+ ad.keyBytes = Marshal.AllocHGlobal(srcAuthData.KeyBytes.Length);
+ Marshal.Copy(srcAuthData.KeyBytes, 0, ad.keyBytes, srcAuthData.KeyBytes.Length);
+ ad.keyBytesLength = srcAuthData.KeyBytes.Length;
+ }
+ else
+ {
+ ad.keyBytes = System.IntPtr.Zero;
+ ad.keyBytesLength = 0;
+ }
+
+ SetNextAuthData(playerInstance, ref ad);
+
+ if (ad.keyBytes != System.IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ad.keyBytes);
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct AuthData
+ {
+ [MarshalAs(UnmanagedType.LPWStr)]
+ public string url;
+
+ [MarshalAs(UnmanagedType.LPWStr)]
+ public string token;
+
+ public System.IntPtr keyBytes;
+ public int keyBytesLength;
+ };
+
+ [DllImport("AVProVideoWinRT")]
+ private static extern void SetNextAuthData(System.IntPtr playerInstance, ref AuthData authData);
+
+ internal enum TimeRangeTypes
+ {
+ Seekable = 0,
+ Buffered = 1,
+ }
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern int GetTimeRanges(System.IntPtr playerInstance, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)] TimeRange[] ranges, int rangeCount, TimeRangeTypes timeRangeType);
+
+ // RJT TODO: Clean this up to better match non-WinRT
+
+ [DllImport("AVProVideoWinRT")]
+ public static extern System.IntPtr GetRenderEventFunc();
+
+ private static System.IntPtr _nativeFunction_UnityRenderEvent;
+ public static void IssueRenderThreadEvent_UpdateAllTextures()
+ {
+ if (_nativeFunction_UnityRenderEvent == System.IntPtr.Zero)
+ {
+ _nativeFunction_UnityRenderEvent = Native.GetRenderEventFunc();
+ }
+ if (_nativeFunction_UnityRenderEvent != System.IntPtr.Zero)
+ {
+ GL.IssuePluginEvent(_nativeFunction_UnityRenderEvent, /*(int)Native.RenderThreadEvent.UpdateAllTextures*/1);
+ }
+ }
+
+ public static void IssueRenderThreadEvent_FreeAllTextures()
+ {
+ if (_nativeFunction_UnityRenderEvent == System.IntPtr.Zero)
+ {
+ _nativeFunction_UnityRenderEvent = Native.GetRenderEventFunc();
+ }
+ if (_nativeFunction_UnityRenderEvent != System.IntPtr.Zero)
+ {
+ GL.IssuePluginEvent(_nativeFunction_UnityRenderEvent, /*(int)Native.RenderThreadEvent.FreeTextures*/2);
+ }
+ }
+ }
+ }
+
+ public sealed partial class WindowsRtMediaPlayer
+ {
+ private static bool _isInitialised = false;
+ private static string _version = "Plug-in not yet initialised";
+
+ private ulong _frameTimeStamp;
+ private System.IntPtr _playerInstance;
+
+ class EyeTexture
+ {
+ public Texture2D texture = null;
+ public System.IntPtr nativePointer = System.IntPtr.Zero;
+
+ public void Dispose()
+ {
+ if (texture)
+ {
+ if (Application.isPlaying) { Texture2D.Destroy(texture); }
+ else { Texture2D.DestroyImmediate(texture); }
+ texture = null;
+ }
+ nativePointer = System.IntPtr.Zero;
+ }
+ }
+
+ private EyeTexture[] _eyeTextures = new EyeTexture[2];
+
+ public static bool InitialisePlatform()
+ {
+ if (!_isInitialised)
+ {
+ try
+ {
+#if !UNITY_2019_3_OR_NEWER
+ if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12)
+ {
+ Debug.LogError("[AVProVideo] Direct3D 12 is not supported until Unity 2019.3");
+ return false;
+ }
+#endif
+ if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Null ||
+ SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D11 ||
+ SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12)
+ {
+ /*if (!Native.Init(QualitySettings.activeColorSpace == ColorSpace.Linear))
+ {
+ Debug.LogError("[AVProVideo] Failing to initialise platform");
+ }
+ else*/
+ {
+ _isInitialised = true;
+ _version = Native.GetPluginVersion();
+ }
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Only Direct3D 11 and 12 are supported, graphicsDeviceType not supported: " + SystemInfo.graphicsDeviceType);
+ }
+ }
+ catch (System.DllNotFoundException e)
+ {
+ Debug.LogError("[AVProVideo] Failed to load DLL. " + e.Message);
+ }
+ }
+
+ return _isInitialised;
+ }
+
+ public static void DeinitPlatform()
+ {
+ //Native.Deinit();
+ _isInitialised = false;
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsRtMediaPlayer.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsRtMediaPlayer.cs.meta
new file mode 100755
index 0000000..d75a8b0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Players/WindowsRtMediaPlayer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7b04c4ad4a3b8c44a98a08ea2ae71a6d
+timeCreated: 1541807235
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/TextTrack.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/TextTrack.cs
new file mode 100755
index 0000000..80562d5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/TextTrack.cs
@@ -0,0 +1,48 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public class TextCue
+ {
+ private TextCue() { }
+
+ internal TextCue(string text)
+ {
+ Text = text;
+ }
+
+ public string Text { get; private set; }
+ }
+
+ public partial class BaseMediaPlayer : ITextTracks
+ {
+ protected TextCue _currentTextCue = null;
+ public TextCue GetCurrentTextCue() { return _currentTextCue; } // Returns null when there is no active text
+
+ protected bool UpdateTextCue(bool force = false)
+ {
+ bool result = false;
+ // Has it changed since the last 'tick'
+ if (force || InternalIsChangedTextCue())
+ {
+ _currentTextCue = null;
+ string text = InternalGetCurrentTextCue();
+ if (!string.IsNullOrEmpty(text))
+ {
+ _currentTextCue = new TextCue(text);
+ }
+ result = true;
+ }
+ return result;
+ }
+
+ internal abstract bool InternalIsChangedTextCue();
+ internal abstract string InternalGetCurrentTextCue();
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/TextTrack.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/TextTrack.cs.meta
new file mode 100755
index 0000000..678611a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/TextTrack.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 70b7a3055e537f74cb49d2fc4e6989e6
+timeCreated: 1438695622
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Tracks.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Tracks.cs
new file mode 100755
index 0000000..85cdacd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Tracks.cs
@@ -0,0 +1,292 @@
+using System.Collections;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public enum TrackType
+ {
+ Video,
+ Audio,
+ Text,
+ }
+
+ public class TrackBase
+ {
+ protected TrackBase() { }
+
+ internal TrackBase(TrackType trackType, int uid, string name, string language, bool isDefault)
+ {
+ TrackType = trackType;
+ Uid = uid;
+ Name = name;
+ Language = language;
+ IsDefault = isDefault;
+ DisplayName = CreateDisplayName();
+ }
+
+ // The UID is unique to the media
+ internal int Uid { get; private set; }
+
+ public TrackType TrackType { get; private set; }
+
+ public string DisplayName { get; private set; }
+
+ // Optional
+ public string Name { get; private set; }
+
+ // Optional
+ public string Language { get; private set; }
+
+ // Optional
+ public bool IsDefault { get; private set; }
+
+ protected string CreateDisplayName()
+ {
+ string result;
+ if (!string.IsNullOrEmpty(Name))
+ {
+ result = Name;
+ }
+ else
+ {
+ result = "Track " + Uid.ToString();
+ }
+ if (!string.IsNullOrEmpty(Language))
+ {
+ result = string.Format("{0} ({1})", result, Language);
+ }
+ return result;
+ }
+ }
+
+ public abstract class TrackCollection : IEnumerable
+ {
+ public virtual TrackType TrackType { get; private set; }
+ public abstract int Count { get; }
+ public abstract IEnumerator GetEnumerator();
+
+ internal abstract void Clear();
+ internal abstract void Add(TrackBase track);
+ internal abstract bool HasActiveTrack();
+ internal abstract bool IsActiveTrack(TrackBase track);
+ internal abstract void SetActiveTrack(TrackBase track);
+ internal abstract void SetFirstTrackActive();
+ }
+
+ public class TrackCollection : TrackCollection where T : TrackBase
+ {
+ internal TrackCollection() {}
+
+ public override IEnumerator GetEnumerator()
+ {
+ return _tracks.GetEnumerator();
+ }
+
+ public T this[int index]
+ {
+ get
+ {
+ return _tracks[index];
+ }
+ }
+
+ internal T ActiveTrack { get; set; }
+
+ internal override bool HasActiveTrack() { return ActiveTrack != null; }
+
+ internal override bool IsActiveTrack(TrackBase track)
+ {
+ return (ActiveTrack == track);
+ }
+
+ internal override void Clear()
+ {
+ _tracks.Clear();
+ ActiveTrack = null;
+ }
+
+ internal override void Add(TrackBase track)
+ {
+ _tracks.Add(track as T);
+ }
+
+ internal override void SetActiveTrack(TrackBase track)
+ {
+ ActiveTrack = track as T;
+ }
+
+ internal override void SetFirstTrackActive()
+ {
+ if (_tracks.Count > 0)
+ {
+ ActiveTrack = _tracks[0];
+ }
+ }
+
+ public override int Count { get{ return _tracks.Count; } }
+
+ internal List _tracks = new List(4);
+ }
+
+ public class VideoTracks : TrackCollection
+ {
+ public override TrackType TrackType { get { return TrackType.Video; } }
+ }
+
+ public class AudioTracks : TrackCollection
+ {
+ public override TrackType TrackType { get { return TrackType.Audio; } }
+ }
+
+ public class TextTracks : TrackCollection
+ {
+ public override TrackType TrackType { get { return TrackType.Text; } }
+ }
+
+ public class VideoTrack : TrackBase
+ {
+ private VideoTrack() { }
+
+ internal VideoTrack(int uid, string name, string language, bool isDefault)
+ : base(TrackType.Video, uid, name, language, isDefault) { }
+
+ // Optional
+ public int Bitrate { get; set; }
+ }
+
+ public class AudioTrack : TrackBase
+ {
+ private AudioTrack() { }
+
+ internal AudioTrack(int uid, string name, string language, bool isDefault)
+ : base(TrackType.Audio, uid, name, language, isDefault) { }
+
+ // Optional
+ public int Bitrate { get; private set; }
+
+ // Optional
+ public int ChannelCount { get; private set; }
+ }
+
+ public class TextTrack : TrackBase
+ {
+ private TextTrack() { }
+
+ internal TextTrack(int uid, string name, string language, bool isDefault)
+ : base(TrackType.Text, uid, name, language, isDefault) { }
+ }
+
+ public interface IVideoTracks
+ {
+ VideoTracks GetVideoTracks();
+ VideoTrack GetActiveVideoTrack();
+ void SetActiveVideoTrack(VideoTrack track);
+ }
+
+ public interface IAudioTracks
+ {
+ AudioTracks GetAudioTracks();
+ AudioTrack GetActiveAudioTrack();
+ void SetActiveAudioTrack(AudioTrack track);
+ }
+
+ public interface ITextTracks
+ {
+ TextTracks GetTextTracks();
+ TextTrack GetActiveTextTrack();
+ void SetActiveTextTrack(TextTrack track);
+ TextCue GetCurrentTextCue();
+ }
+
+ public partial class BaseMediaPlayer : IVideoTracks, IAudioTracks, ITextTracks
+ {
+ protected VideoTracks _videoTracks = new VideoTracks();
+ protected AudioTracks _audioTracks = new AudioTracks();
+ protected TextTracks _textTracks = new TextTracks();
+ protected TrackCollection[] _trackCollections;
+
+ public VideoTracks GetVideoTracks() { return _videoTracks; }
+ public AudioTracks GetAudioTracks() { return _audioTracks; }
+ public TextTracks GetTextTracks() { return _textTracks; }
+ public VideoTrack GetActiveVideoTrack() { return _videoTracks.ActiveTrack; }
+ public AudioTrack GetActiveAudioTrack() { return _audioTracks.ActiveTrack; }
+ public TextTrack GetActiveTextTrack() { return _textTracks.ActiveTrack; }
+ public void SetActiveVideoTrack(VideoTrack track) { if (track != null) SetActiveTrack(_videoTracks, track); }
+ public void SetActiveAudioTrack(AudioTrack track) { if (track != null) SetActiveTrack(_audioTracks, track); }
+ public void SetActiveTextTrack(TextTrack track) { SetActiveTrack(_textTracks, track); }
+
+ internal abstract bool InternalIsChangedTracks(TrackType trackType);
+ internal abstract int InternalGetTrackCount(TrackType trackType);
+ internal abstract bool InternalSetActiveTrack(TrackType trackType, int trackUid);
+ internal abstract TrackBase InternalGetTrackInfo(TrackType trackType, int trackIndex, ref bool isActiveTrack);
+
+ private void InitTracks()
+ {
+ _trackCollections = new TrackCollection[3] { _videoTracks, _audioTracks, _textTracks };
+ }
+
+ protected void UpdateTracks()
+ {
+ foreach (TrackCollection trackCollection in _trackCollections)
+ {
+ if (InternalIsChangedTracks(trackCollection.TrackType))
+ {
+ PopulateTrackCollection(trackCollection);
+ }
+ }
+ }
+
+ private void PopulateTrackCollection(TrackCollection collection)
+ {
+ collection.Clear();
+ int trackCount = InternalGetTrackCount(collection.TrackType);
+ for (int i = 0; i < trackCount; i++)
+ {
+ bool isActiveTrack = false;
+ TrackBase track = InternalGetTrackInfo(collection.TrackType, i, ref isActiveTrack);
+ if (track != null)
+ {
+ collection.Add(track);
+ if (isActiveTrack)
+ {
+ collection.SetActiveTrack(track);
+ }
+ }
+ else
+ {
+ UnityEngine.Debug.LogWarning(string.Format("[AVProVideo] Failed to enumerate {0} track {1} ", collection.TrackType, i));
+ }
+ }
+ }
+
+ private void SetActiveTrack(TrackCollection collection, TrackBase track)
+ {
+ // Check if this is already the active track
+ if (collection.IsActiveTrack(track)) return;
+
+ // Convert from TextTrack to uid
+ int trackUid = -1;
+ if (track != null)
+ {
+ trackUid = track.Uid;
+ }
+
+ // Set track based on uid (-1 is no active track)
+ // NOTE: TrackType is pulled from collection as track may be null
+ if (InternalSetActiveTrack(collection.TrackType, trackUid))
+ {
+ collection.SetActiveTrack(track);
+ switch (collection.TrackType)
+ {
+ case TrackType.Text:
+ UpdateTextCue(force:true);
+ break;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Tracks.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Tracks.cs.meta
new file mode 100755
index 0000000..2638501
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Tracks.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 087e0a6fc1bd92e4bbd96796ec593162
+timeCreated: 1596803411
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils.meta
new file mode 100755
index 0000000..a9cb4d5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c6f0eb1069a1ccc4b94ebe97c97b9cd1
+folderAsset: yes
+timeCreated: 1551721729
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs
new file mode 100755
index 0000000..576fa96
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs
@@ -0,0 +1,127 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ [System.Serializable]
+ public struct HttpHeader
+ {
+ public string name;
+ public string value;
+
+ public HttpHeader(string name, string value) { this.name = name; this.value = value; }
+
+ public bool IsComplete()
+ {
+ return (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value));
+ }
+
+ public string ToValidatedString()
+ {
+ string result = null;
+ if (IsComplete())
+ {
+ if (IsValid())
+ {
+ result = string.Format("{0}:{1}\r\n", name, value);
+ }
+ }
+ return result;
+ }
+
+ public static bool IsValid(string text)
+ {
+ if (!string.IsNullOrEmpty(text))
+ {
+ if (!IsAscii(text)) return false;
+ if (text.Contains("\r") || text.Contains("\n")) return false;
+ }
+ return true;
+ }
+
+ private static bool IsAscii(string text)
+ {
+ foreach (char c in text)
+ {
+ if (c >= 128) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private bool IsValid()
+ {
+ if (!IsValid(name) || !IsValid(value))
+ {
+ return false;
+ }
+ // TODO: check via regular expression
+ return true;
+ }
+ }
+
+ ///
+ /// Data for handling custom HTTP header fields
+ ///
+ [System.Serializable]
+ public class HttpHeaderData : IEnumerable
+ {
+ [SerializeField]
+ private List httpHeaders = new List();
+
+ public IEnumerator GetEnumerator()
+ {
+ return httpHeaders.GetEnumerator();
+ }
+
+ public HttpHeader this[int index]
+ {
+ get
+ {
+ return httpHeaders[index];
+ }
+ }
+
+ public void Clear()
+ {
+ httpHeaders.Clear();
+ }
+
+ public void Add(string name, string value)
+ {
+ httpHeaders.Add(new HttpHeader(name, value));
+ }
+
+ public bool IsModified()
+ {
+ return (httpHeaders != null && httpHeaders.Count > 0);
+ }
+
+ public string ToValidatedString()
+ {
+ string result = string.Empty;
+ foreach (HttpHeader header in httpHeaders)
+ {
+ if (header.IsComplete())
+ {
+ string line = header.ToValidatedString();
+ if (!string.IsNullOrEmpty(line))
+ {
+ result += line;
+ }
+ else
+ {
+ Debug.LogWarning("[AVProVideo] Custom HTTP header field ignored due to invalid format");
+ }
+ }
+ }
+ return result;
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs.meta
new file mode 100755
index 0000000..dfb21f3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2cfc6f8c038acdf4a9b384e8cb5e9cb2
+timeCreated: 1588604301
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/KeyAuthData.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/KeyAuthData.cs
new file mode 100755
index 0000000..d5a8cbf
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/KeyAuthData.cs
@@ -0,0 +1,72 @@
+using System;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Data for handling authentication of encrypted AES-128 HLS streams
+ ///
+ ///
+ [Serializable]
+ public class KeyAuthData : ISerializationCallbackReceiver
+ {
+ [SerializeField]
+ public string keyServerToken;
+
+ [SerializeField, Multiline]
+ public string overrideDecryptionKeyBase64;
+
+ public bool IsModified()
+ {
+ return !String.IsNullOrEmpty(keyServerToken) || !String.IsNullOrEmpty(overrideDecryptionKeyBase64);
+ }
+
+ private byte[] _overrideDecryptionKey;
+ public byte[] overrideDecryptionKey
+ {
+ get
+ {
+ return _overrideDecryptionKey;
+ }
+ set
+ {
+ _overrideDecryptionKey = value;
+ if (value == null)
+ overrideDecryptionKeyBase64 = "";
+ else
+ overrideDecryptionKeyBase64 = Convert.ToBase64String(_overrideDecryptionKey);
+ }
+ }
+
+ // ISerializationCallbackReceiver
+
+ public void OnBeforeSerialize()
+ {
+ // Nothing to do here
+ }
+
+ public void OnAfterDeserialize()
+ {
+ if (!string.IsNullOrEmpty(overrideDecryptionKeyBase64))
+ {
+ try
+ {
+ // Regenerate the byte[]
+ _overrideDecryptionKey = Convert.FromBase64String(overrideDecryptionKeyBase64);
+ }
+ catch (Exception e)
+ {
+ Debug.LogWarning($"Failed to decode overrideDecryptionKeyBase64, error: {e}");
+ }
+ }
+ else
+ {
+ _overrideDecryptionKey = null;
+ }
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/KeyAuthData.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/KeyAuthData.cs.meta
new file mode 100755
index 0000000..e95502a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/KeyAuthData.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0e784fab214313d44aaa5906743860fa
+timeCreated: 1588604301
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Resampler.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Resampler.cs
new file mode 100755
index 0000000..c190739
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Resampler.cs
@@ -0,0 +1,594 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ ///
+ /// Utility class to resample MediaPlayer video frames to allow for smoother playback
+ /// Keeps a buffer of frames with timestamps and presents them using its own clock
+ ///
+ public class Resampler
+ {
+ private class TimestampedRenderTexture
+ {
+ public RenderTexture texture = null;
+ public long timestamp = 0;
+ public bool used = false;
+ }
+
+ public enum ResampleMode
+ {
+ POINT, LINEAR
+ }
+
+ private List _buffer = new List();
+ private MediaPlayer _mediaPlayer;
+ private RenderTexture[] _outputTexture = null;
+
+ private int _start = 0;
+ private int _end = 0;
+ private int _bufferSize = 0;
+
+ private long _baseTimestamp = 0;
+ private float _elapsedTimeSinceBase = 0f;
+
+ private Material _blendMat;
+
+ private ResampleMode _resampleMode;
+ private string _name = "";
+
+ private long _lastTimeStamp = -1;
+
+ private int _droppedFrames = 0;
+
+ private long _lastDisplayedTimestamp = 0;
+ private int _frameDisplayedTimer = 0;
+ private long _currentDisplayedTimestamp = 0;
+
+ public int DroppedFrames
+ {
+ get { return _droppedFrames; }
+ }
+
+ public int FrameDisplayedTimer
+ {
+ get { return _frameDisplayedTimer; }
+ }
+
+ public long BaseTimestamp
+ {
+ get { return _baseTimestamp; }
+ set { _baseTimestamp = value; }
+ }
+
+ public float ElapsedTimeSinceBase
+ {
+ get { return _elapsedTimeSinceBase; }
+ set { _elapsedTimeSinceBase = value; }
+ }
+
+ public float LastT
+ {
+ get; private set;
+ }
+
+ public long TextureTimeStamp
+ {
+ get; private set;
+ }
+
+ private const string ShaderPropT = "_t";
+ private const string ShaderPropAftertex = "_AfterTex";
+ private int _propAfterTex;
+ private int _propT;
+ private float _videoFrameRate;
+
+ public void OnVideoEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
+ {
+ switch (et)
+ {
+ case MediaPlayerEvent.EventType.MetaDataReady:
+ _videoFrameRate = mp.Info.GetVideoFrameRate();
+ _elapsedTimeSinceBase = 0f;
+ if (_videoFrameRate > 0f)
+ {
+ _elapsedTimeSinceBase = _bufferSize / _videoFrameRate;
+ }
+ break;
+ case MediaPlayerEvent.EventType.Closing:
+ Reset();
+ break;
+ default:
+ break;
+ }
+ }
+
+ public Resampler(MediaPlayer player, string name, int bufferSize = 2, ResampleMode resampleMode = ResampleMode.LINEAR)
+ {
+ _bufferSize = Mathf.Max(2, bufferSize);
+
+ player.Events.AddListener(OnVideoEvent);
+
+ _mediaPlayer = player;
+
+ Shader blendShader = Shader.Find("AVProVideo/Internal/BlendFrames");
+ if (blendShader != null)
+ {
+ _blendMat = new Material(blendShader);
+ _propT = Shader.PropertyToID(ShaderPropT);
+ _propAfterTex = Shader.PropertyToID(ShaderPropAftertex);
+ }
+ else
+ {
+ Debug.LogError("[AVProVideo] Failed to find BlendFrames shader");
+ }
+
+ _resampleMode = resampleMode;
+ _name = name;
+
+ Debug.Log("[AVProVideo] Resampler " + _name + " started");
+ }
+
+ public Texture[] OutputTexture
+ {
+ get { return _outputTexture; }
+ }
+
+ public void Reset()
+ {
+ _lastTimeStamp = -1;
+ _baseTimestamp = 0;
+ InvalidateBuffer();
+ }
+
+ public void Release()
+ {
+ ReleaseRenderTextures();
+ if (_blendMat != null)
+ {
+ if (Application.isPlaying)
+ {
+ Material.Destroy(_blendMat);
+ }
+ else
+ {
+ Material.DestroyImmediate(_blendMat);
+ }
+ }
+ }
+
+ private void ReleaseRenderTextures()
+ {
+ for (int i = 0; i < _buffer.Count; ++i)
+ {
+ for (int j = 0; j < _buffer[i].Length; ++j)
+ {
+ if (_buffer[i][j].texture != null)
+ {
+ RenderTexture.ReleaseTemporary(_buffer[i][j].texture);
+ _buffer[i][j].texture = null;
+ }
+ }
+
+ if (_outputTexture != null && _outputTexture[i] != null)
+ {
+ RenderTexture.ReleaseTemporary(_outputTexture[i]);
+ }
+ }
+
+ _outputTexture = null;
+ }
+
+ private void ConstructRenderTextures()
+ {
+ ReleaseRenderTextures();
+ _buffer.Clear();
+
+ _outputTexture = new RenderTexture[_mediaPlayer.TextureProducer.GetTextureCount()];
+
+ for (int i = 0; i < _mediaPlayer.TextureProducer.GetTextureCount(); ++i)
+ {
+ Texture tex = _mediaPlayer.TextureProducer.GetTexture(i);
+ _buffer.Add(new TimestampedRenderTexture[_bufferSize]);
+ for (int j = 0; j < _bufferSize; ++j)
+ {
+ _buffer[i][j] = new TimestampedRenderTexture();
+ }
+
+ for (int j = 0; j < _buffer[i].Length; ++j)
+ {
+ _buffer[i][j].texture = RenderTexture.GetTemporary(tex.width, tex.height, 0);
+ _buffer[i][j].timestamp = 0;
+ _buffer[i][j].used = false;
+ }
+
+ _outputTexture[i] = RenderTexture.GetTemporary(tex.width, tex.height, 0);
+ _outputTexture[i].filterMode = tex.filterMode;
+ _outputTexture[i].wrapMode = tex.wrapMode;
+ _outputTexture[i].anisoLevel = tex.anisoLevel;
+ // TODO: set up the mips level too?
+ }
+ }
+
+ private bool CheckRenderTexturesValid()
+ {
+ for (int i = 0; i < _mediaPlayer.TextureProducer.GetTextureCount(); ++i)
+ {
+ Texture tex = _mediaPlayer.TextureProducer.GetTexture(i);
+ for (int j = 0; j < _buffer.Count; ++j)
+ {
+ if (_buffer[i][j].texture == null || _buffer[i][j].texture.width != tex.width || _buffer[i][j].texture.height != tex.height)
+ {
+ return false;
+ }
+ }
+
+ if (_outputTexture == null || _outputTexture[i] == null || _outputTexture[i].width != tex.width || _outputTexture[i].height != tex.height)
+ {
+ return false;
+ }
+
+ }
+
+ return true;
+ }
+
+ //finds closest frame that occurs before given index
+ private int FindBeforeFrameIndex(int frameIdx)
+ {
+ if (frameIdx >= _buffer.Count)
+ {
+ return -1;
+ }
+
+ int foundFrame = -1;
+ float smallestDif = float.MaxValue;
+ int closest = -1;
+ float smallestElapsed = float.MaxValue;
+
+ for (int i = 0; i < _buffer[frameIdx].Length; ++i)
+ {
+ if (_buffer[frameIdx][i].used)
+ {
+ float elapsed = (_buffer[frameIdx][i].timestamp - _baseTimestamp) / 10000000f;
+
+ //keep track of closest after frame, just in case no before frame was found
+ if (elapsed < smallestElapsed)
+ {
+ closest = i;
+ smallestElapsed = elapsed;
+ }
+
+ float dif = _elapsedTimeSinceBase - elapsed;
+
+ if (dif >= 0 && dif < smallestDif)
+ {
+ smallestDif = dif;
+ foundFrame = i;
+ }
+ }
+ }
+
+ if (foundFrame < 0)
+ {
+ if (closest < 0)
+ {
+ return -1;
+ }
+
+ return closest;
+ }
+
+ return foundFrame;
+ }
+
+ private int FindClosestFrame(int frameIdx)
+ {
+ if (frameIdx >= _buffer.Count)
+ {
+ return -1;
+ }
+
+ int foundPos = -1;
+ float smallestDif = float.MaxValue;
+
+ for (int i = 0; i < _buffer[frameIdx].Length; ++i)
+ {
+ if (_buffer[frameIdx][i].used)
+ {
+ float elapsed = (_buffer[frameIdx][i].timestamp - _baseTimestamp) / 10000000f;
+ float dif = Mathf.Abs(_elapsedTimeSinceBase - elapsed);
+ if (dif < smallestDif)
+ {
+ foundPos = i;
+ smallestDif = dif;
+ }
+ }
+ }
+
+ return foundPos;
+ }
+
+ //point update selects closest frame and uses that as output
+ private void PointUpdate()
+ {
+ for (int i = 0; i < _buffer.Count; ++i)
+ {
+ int frameIndex = FindClosestFrame(i);
+ if (frameIndex < 0)
+ {
+ continue;
+ }
+
+ _outputTexture[i].DiscardContents();
+ Graphics.Blit(_buffer[i][frameIndex].texture, _outputTexture[i]);
+ TextureTimeStamp = _currentDisplayedTimestamp = _buffer[i][frameIndex].timestamp;
+ }
+
+ }
+
+ //Updates currently displayed frame
+ private void SampleFrame(int frameIdx, int bufferIdx)
+ {
+ _outputTexture[bufferIdx].DiscardContents();
+ Graphics.Blit(_buffer[bufferIdx][frameIdx].texture, _outputTexture[bufferIdx]);
+ TextureTimeStamp = _currentDisplayedTimestamp = _buffer[bufferIdx][frameIdx].timestamp;
+ }
+
+ //Same as sample frame, but does a lerp of the two given frames and outputs that image instead
+ private void SampleFrames(int bufferIdx, int frameIdx1, int frameIdx2, float t)
+ {
+ _blendMat.SetFloat(_propT, t);
+ _blendMat.SetTexture(_propAfterTex, _buffer[bufferIdx][frameIdx2].texture);
+ _outputTexture[bufferIdx].DiscardContents();
+ Graphics.Blit(_buffer[bufferIdx][frameIdx1].texture, _outputTexture[bufferIdx], _blendMat);
+ TextureTimeStamp = (long)Mathf.Lerp(_buffer[bufferIdx][frameIdx1].timestamp, _buffer[bufferIdx][frameIdx2].timestamp, t);
+ _currentDisplayedTimestamp = _buffer[bufferIdx][frameIdx1].timestamp;
+ }
+
+ private void LinearUpdate()
+ {
+ for (int i = 0; i < _buffer.Count; ++i)
+ {
+ //find closest frame
+ int frameIndex = FindBeforeFrameIndex(i);
+
+ //no valid frame, this should never ever happen actually...
+ if (frameIndex < 0)
+ {
+ continue;
+ }
+
+ //resample or just use last frame and set current elapsed time to that frame
+ float frameElapsed = (_buffer[i][frameIndex].timestamp - _baseTimestamp) / 10000000f;
+ if (frameElapsed > _elapsedTimeSinceBase)
+ {
+ SampleFrame(frameIndex, i);
+ LastT = -1f;
+ }
+ else
+ {
+ int next = (frameIndex + 1) % _buffer[i].Length;
+ float nextElapsed = (_buffer[i][next].timestamp - _baseTimestamp) / 10000000f;
+
+ //no larger frame, move elapsed time back a bit since we cant predict the future
+ if (nextElapsed < frameElapsed)
+ {
+ SampleFrame(frameIndex, i);
+ LastT = 2f;
+ }
+ //have a before and after frame, interpolate
+ else
+ {
+
+ float range = nextElapsed - frameElapsed;
+ float t = (_elapsedTimeSinceBase - frameElapsed) / range;
+ SampleFrames(i, frameIndex, next, t);
+ LastT = t;
+ }
+ }
+ }
+ }
+
+ private void InvalidateBuffer()
+ {
+ _elapsedTimeSinceBase = (_bufferSize / 2) / _videoFrameRate;
+
+ for (int i = 0; i < _buffer.Count; ++i)
+ {
+ for (int j = 0; j < _buffer[i].Length; ++j)
+ {
+ _buffer[i][j].used = false;
+ }
+ }
+
+ _start = _end = 0;
+ }
+
+ private float GuessFrameRate()
+ {
+ int fpsCount = 0;
+ long fps = 0;
+
+ for (int k = 0; k < _buffer[0].Length; k++)
+ {
+ if (_buffer[0][k].used)
+ {
+ // Find the pair with the smallest difference
+ long smallestDiff = long.MaxValue;
+ for (int j = k + 1; j < _buffer[0].Length; j++)
+ {
+ if (_buffer[0][j].used)
+ {
+ long diff = System.Math.Abs(_buffer[0][k].timestamp - _buffer[0][j].timestamp);
+ if (diff < smallestDiff)
+ {
+ smallestDiff = diff;
+ }
+ }
+ }
+
+ if (smallestDiff != long.MaxValue)
+ {
+ fps += smallestDiff;
+ fpsCount++;
+ }
+ }
+ }
+ if (fpsCount > 1)
+ {
+ fps /= fpsCount;
+ }
+ return 10000000f / (float)fps;
+ }
+
+ public void Update()
+ {
+ if (_mediaPlayer.TextureProducer == null)
+ {
+ return;
+ }
+
+ //recreate textures if invalid
+ if (_mediaPlayer.TextureProducer == null || _mediaPlayer.TextureProducer.GetTexture() == null)
+ {
+ return;
+ }
+
+ if (!CheckRenderTexturesValid())
+ {
+ ConstructRenderTextures();
+ }
+
+ long currentTimestamp = _mediaPlayer.TextureProducer.GetTextureTimeStamp();
+
+ //if frame has been updated, do a calculation to estimate dropped frames
+ if (currentTimestamp != _lastTimeStamp)
+ {
+ float dif = Mathf.Abs(currentTimestamp - _lastTimeStamp);
+ float frameLength = (10000000f / _videoFrameRate);
+ if (dif > frameLength * 1.1f && dif < frameLength * 3.1f)
+ {
+ _droppedFrames += (int)((dif - frameLength) / frameLength + 0.5);
+ }
+ _lastTimeStamp = currentTimestamp;
+ }
+
+ //Adding texture to buffer logic
+ long timestamp = _mediaPlayer.TextureProducer.GetTextureTimeStamp();
+ bool insertNewFrame = !_mediaPlayer.Control.IsSeeking();
+ //if buffer is not empty, we need to check if we need to reject the new frame
+ if (_start != _end || _buffer[0][_end].used)
+ {
+ int lastFrame = (_end + _buffer[0].Length - 1) % _buffer[0].Length;
+ //frame is not new and thus we do not need to store it
+ if (timestamp == _buffer[0][lastFrame].timestamp)
+ {
+ insertNewFrame = false;
+ }
+ }
+
+ bool bufferWasNotFull = (_start != _end) || (!_buffer[0][_end].used);
+
+ if (insertNewFrame)
+ {
+ //buffer empty, reset base timestamp to current
+ if (_start == _end && !_buffer[0][_end].used)
+ {
+ _baseTimestamp = timestamp;
+ }
+
+ //update buffer counters, if buffer is full, we get rid of the earliest frame by incrementing the start counter
+ if (_end == _start && _buffer[0][_end].used)
+ {
+ _start = (_start + 1) % _buffer[0].Length;
+ }
+
+ for (int i = 0; i < _mediaPlayer.TextureProducer.GetTextureCount(); ++i)
+ {
+ Texture currentTexture = _mediaPlayer.TextureProducer.GetTexture(i);
+
+ //store frame info
+ _buffer[i][_end].texture.DiscardContents();
+ Graphics.Blit(currentTexture, _buffer[i][_end].texture);
+ _buffer[i][_end].timestamp = timestamp;
+ _buffer[i][_end].used = true;
+ }
+
+ _end = (_end + 1) % _buffer[0].Length;
+ }
+
+ bool bufferNotFull = (_start != _end) || (!_buffer[0][_end].used);
+
+ if (bufferNotFull)
+ {
+ for (int i = 0; i < _buffer.Count; ++i)
+ {
+ _outputTexture[i].DiscardContents();
+ Graphics.Blit(_buffer[i][_start].texture, _outputTexture[i]);
+ _currentDisplayedTimestamp = _buffer[i][_start].timestamp;
+ }
+ }
+ else
+ {
+ // If we don't have a valid frame rate and the buffer is now full, guess the frame rate by looking at the buffered timestamps
+ if (bufferWasNotFull && _videoFrameRate <= 0f)
+ {
+ _videoFrameRate = GuessFrameRate();
+ _elapsedTimeSinceBase = (_bufferSize / 2) / _videoFrameRate;
+ }
+ }
+
+ if (_mediaPlayer.Control.IsPaused())
+ {
+ InvalidateBuffer();
+ }
+
+ //we always wait until buffer is full before display things, just assign first frame in buffer to output so that the user can see something
+ if (bufferNotFull)
+ {
+ return;
+ }
+
+ if (_mediaPlayer.Control.IsPlaying() && !_mediaPlayer.Control.IsFinished())
+ {
+ //correct elapsed time if too far out
+ long ts = _buffer[0][(_start + _bufferSize / 2) % _bufferSize].timestamp - _baseTimestamp;
+ double dif = Mathf.Abs(((float)((double)_elapsedTimeSinceBase * 10000000) - ts));
+ double threshold = (_buffer[0].Length / 2) / _videoFrameRate * 10000000;
+
+ if (dif > threshold)
+ {
+ _elapsedTimeSinceBase = ts / 10000000f;
+ }
+
+ if (_resampleMode == ResampleMode.POINT)
+ {
+ PointUpdate();
+ }
+ else if (_resampleMode == ResampleMode.LINEAR)
+ {
+ LinearUpdate();
+ }
+
+ _elapsedTimeSinceBase += Time.unscaledDeltaTime;
+ }
+ }
+
+ public void UpdateTimestamp()
+ {
+ if (_lastDisplayedTimestamp != _currentDisplayedTimestamp)
+ {
+ _lastDisplayedTimestamp = _currentDisplayedTimestamp;
+ _frameDisplayedTimer = 0;
+ }
+ _frameDisplayedTimer++;
+ }
+ }
+}
+
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Resampler.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Resampler.cs.meta
new file mode 100755
index 0000000..bc1ec04
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Resampler.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8ac8dc09faa6b1d48bf6f490c9888550
+timeCreated: 1497356591
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Subtitles.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Subtitles.cs
new file mode 100755
index 0000000..3b64219
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Subtitles.cs
@@ -0,0 +1,144 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+ public class Subtitle
+ {
+ public int index;
+ // Rich string can contain etc
+ public string text;
+ public double timeStart, timeEnd;
+
+ public bool IsBefore(double time)
+ {
+ return (time > timeStart && time > timeEnd);
+ }
+
+ public bool IsTime(double time)
+ {
+ return (time >= timeStart && time < timeEnd);
+ }
+ }
+
+ public class SubtitlePlayer
+ {
+ // min time, max time
+ // set time
+ // event for change(subs added, subs removed)
+ // list of subs on
+ }
+
+ public class SubtitleUtils
+ {
+ ///
+ /// Parse time in format: 00:00:48,924 and convert to seconds
+ ///
+ private static double ParseTimeToSeconds(string text)
+ {
+ double result = 0.0;
+
+ string[] digits = text.Split(new char[] { ':', ',' });
+
+ if (digits.Length == 4)
+ {
+ int hours = int.Parse(digits[0]);
+ int minutes = int.Parse(digits[1]);
+ int seconds = int.Parse(digits[2]);
+ int milliseconds = int.Parse(digits[3]);
+
+ result = (milliseconds / 1000.0) + (seconds + (minutes + (hours * 60)) * 60);
+ }
+
+ return result;
+ }
+
+ ///
+ /// Parse subtitles in the SRT format and convert to a list of ordered Subtitle objects
+ ///
+ public static List ParseSubtitlesSRT(string data)
+ {
+ List result = null;
+
+ if (!string.IsNullOrEmpty(data))
+ {
+ data = data.Trim();
+ var rx = new System.Text.RegularExpressions.Regex("\n\r|\r\n|\n|\r");
+ string[] lines = rx.Split(data);
+
+ if (lines.Length >= 3)
+ {
+ result = new List(256);
+
+ int count = 0;
+ int index = 0;
+ Subtitle subtitle = null;
+ for (int i = 0; i < lines.Length; i++)
+ {
+ if (index == 0)
+ {
+ subtitle = new Subtitle();
+ subtitle.index = count;// int.Parse(lines[i]);
+ }
+ else if (index == 1)
+ {
+ string[] times = lines[i].Split(new string[] { " --> " }, System.StringSplitOptions.RemoveEmptyEntries);
+ if (times.Length == 2)
+ {
+ subtitle.timeStart = ParseTimeToSeconds(times[0]);
+ subtitle.timeEnd = ParseTimeToSeconds(times[1]);
+ }
+ else
+ {
+ throw new System.FormatException("SRT format doesn't appear to be valid");
+ }
+ }
+ else
+ {
+ if (!string.IsNullOrEmpty(lines[i]))
+ {
+ if (index == 2)
+ {
+ subtitle.text = lines[i];
+ }
+ else
+ {
+ subtitle.text += "\n" + lines[i];
+ }
+ }
+ }
+
+ if (string.IsNullOrEmpty(lines[i]) && index > 1)
+ {
+ result.Add(subtitle);
+ index = 0;
+ count++;
+ subtitle = null;
+ }
+ else
+ {
+ index++;
+ }
+ }
+
+ // Handle the last one
+ if (subtitle != null)
+ {
+ result.Add(subtitle);
+ subtitle = null;
+ }
+ }
+ else
+ {
+ Debug.LogWarning("[AVProVideo] SRT format doesn't appear to be valid");
+ }
+ }
+
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Subtitles.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Subtitles.cs.meta
new file mode 100755
index 0000000..f2e5d9e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/Subtitles.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c21f230642ee9284eb9726613241c7bd
+timeCreated: 1548861442
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/VideoRender.cs b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/VideoRender.cs
new file mode 100755
index 0000000..d38535d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/VideoRender.cs
@@ -0,0 +1,672 @@
+#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS
+ #define UNITY_PLATFORM_SUPPORTS_YPCBCR
+#endif
+
+#if UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_WSA_10_0 || UNITY_IOS || UNITY_TVOS || UNITY_VISIONOS || UNITY_ANDROID || (UNITY_WEBGL && UNITY_2017_2_OR_NEWER)
+ #define UNITY_PLATFORM_SUPPORTS_LINEAR
+#endif
+
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+//-----------------------------------------------------------------------------
+// Copyright 2015-2024 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+namespace RenderHeads.Media.AVProVideo
+{
+#if AVPRO_FEATURE_VIDEORESOLVE
+ [System.Serializable]
+ public class VideoResolve : ITextureProducer
+ {
+ [SerializeField] VideoResolveOptions _options = VideoResolveOptions.Create();
+ [SerializeField] RenderTexture _targetRenderTexture = null;
+ [SerializeField] ScaleMode _targetRenderTextureScale = ScaleMode.ScaleToFit;
+
+ void SetSource(ITextureProducer textureSource)
+ {
+ //_commandBuffer.IssuePluginEvent(blahCallback, 0);
+ //Graphics.ExecuteCommandBuffer(_commandBuffer);
+ }
+
+ // ITextureProducer implementation
+
+ ///
+ public int GetTextureCount() { return 1; }
+
+ ///
+ public Texture GetTexture(int index = 0) { return _texture; }
+
+ ///
+ public int GetTextureFrameCount() { return _textureSource.GetTextureFrameCount(); }
+
+ ///
+ public bool SupportsTextureFrameCount() { return _textureSource.SupportsTextureFrameCount(); }
+
+ ///
+ public long GetTextureTimeStamp() { return _textureSource.GetTextureTimeStamp(); }
+
+ ///
+ public bool RequiresVerticalFlip() { return false; }
+
+ ///
+ public StereoPacking GetTextureStereoPacking() { return StereoPacking.None; }
+
+ ///
+ public TransparencyMode GetTextureTransparency() { return TransparencyMode.Transparent; }
+
+ ///
+ public AlphaPacking GetTextureAlphaPacking() { return AlphaPacking.None; }
+
+ ///
+ public Matrix4x4 GetYpCbCrTransform() { return Matrix4x4.identity; }
+
+ private ITextureProducer _textureSource;
+ private Texture _texture;
+ private CommandBuffer _commandBuffer;
+ }
+#endif
+
+ public struct LazyShaderProperty
+ {
+ public LazyShaderProperty(string name)
+ {
+ _name = name;
+ _id = 0;
+ }
+
+ public string Name { get { return _name;} }
+ public int Id { get { if (_id == 0) { _id = Shader.PropertyToID(_name); } return _id; } }
+
+ private string _name;
+ private int _id;
+ }
+
+ /// Helper class for everything related to setting up materials for rendering/resolving videos
+ public class VideoRender
+ {
+ public const string Shader_IMGUI = "AVProVideo/Internal/IMGUI/Texture Transparent";
+ public const string Shader_Resolve = "AVProVideo/Internal/Resolve";
+ public const string Shader_ResolveOES = "AVProVideo/Internal/ResolveOES";
+ public const string Shader_Preview = "AVProVideo/Internal/Preview";
+
+ #if UNITY_PLATFORM_SUPPORTS_YPCBCR
+ public const string Keyword_UseYpCbCr = "USE_YPCBCR";
+ #endif
+ public const string Keyword_AlphaPackTopBottom = "ALPHAPACK_TOP_BOTTOM";
+ public const string Keyword_AlphaPackLeftRight = "ALPHAPACK_LEFT_RIGHT";
+ public const string Keyword_AlphaPackNone = "ALPHAPACK_NONE";
+ public const string Keyword_StereoTopBottom = "STEREO_TOP_BOTTOM";
+ public const string Keyword_StereoLeftRight = "STEREO_LEFT_RIGHT";
+ public const string Keyword_StereoCustomUV = "STEREO_CUSTOM_UV";
+ public const string Keyword_StereoTwoTextures = "STEREO_TWOTEXTURES";
+ public const string Keyword_StereoNone = "MONOSCOPIC";
+ public const string Keyword_StereoDebug = "STEREO_DEBUG";
+ public const string Keyword_LayoutEquirect180 = "LAYOUT_EQUIRECT180";
+ public const string Keyword_LayoutNone = "LAYOUT_NONE";
+ public const string Keyword_ForceEyeNone = "FORCEEYE_NONE";
+ public const string Keyword_ForceEyeLeft = "FORCEEYE_LEFT";
+ public const string Keyword_ForceEyeRight = "FORCEEYE_RIGHT";
+ public const string Keyword_ApplyGamma = "APPLY_GAMMA";
+
+ public static readonly LazyShaderProperty PropChromaTex = new LazyShaderProperty("_ChromaTex");
+
+ #if UNITY_PLATFORM_SUPPORTS_YPCBCR
+ public static readonly LazyShaderProperty PropYpCbCrTransform = new LazyShaderProperty("_YpCbCrTransform");
+ public static readonly LazyShaderProperty PropUseYpCbCr = new LazyShaderProperty("_UseYpCbCr");
+ #endif
+
+ public static readonly LazyShaderProperty PropVertScale = new LazyShaderProperty("_VertScale");
+ public static readonly LazyShaderProperty PropApplyGamma = new LazyShaderProperty("_ApplyGamma");
+ public static readonly LazyShaderProperty PropStereo = new LazyShaderProperty("Stereo");
+ public static readonly LazyShaderProperty PropAlphaPack = new LazyShaderProperty("AlphaPack");
+ public static readonly LazyShaderProperty PropLayout = new LazyShaderProperty("Layout");
+ public static readonly LazyShaderProperty PropViewMatrix = new LazyShaderProperty("_ViewMatrix");
+ public static readonly LazyShaderProperty PropTextureMatrix = new LazyShaderProperty("_MainTex_Xfrm");
+
+ public static string Keyword_UseHSBC = "USE_HSBC";
+ public static readonly LazyShaderProperty PropHue = new LazyShaderProperty("_Hue");
+ public static readonly LazyShaderProperty PropSaturation = new LazyShaderProperty("_Saturation");
+ public static readonly LazyShaderProperty PropContrast = new LazyShaderProperty("_Contrast");
+ public static readonly LazyShaderProperty PropBrightness = new LazyShaderProperty("_Brightness");
+ public static readonly LazyShaderProperty PropInvGamma = new LazyShaderProperty("_InvGamma");
+
+ public static Material CreateResolveMaterial(bool usingAndroidOES)
+ {
+ return new Material(Shader.Find( usingAndroidOES ? VideoRender.Shader_ResolveOES : VideoRender.Shader_Resolve ));
+ }
+
+ public static Material CreateIMGUIMaterial()
+ {
+ return new Material(Shader.Find(VideoRender.Shader_Preview));
+ }
+
+ public static void SetupLayoutMaterial(Material material, VideoMapping mapping)
+ {
+ switch (mapping)
+ {
+ default:
+ material.DisableKeyword(Keyword_LayoutEquirect180);
+ material.EnableKeyword(Keyword_LayoutNone);
+ break;
+ // Only EquiRectangular180 currently does anything in the shader
+ case VideoMapping.EquiRectangular180:
+ material.DisableKeyword(Keyword_LayoutNone);
+ material.EnableKeyword(Keyword_LayoutEquirect180);
+ break;
+ }
+ }
+
+ public static void SetupStereoEyeModeMaterial(Material material, StereoEye mode)
+ {
+ switch (mode)
+ {
+ case StereoEye.Both:
+ material.DisableKeyword(Keyword_ForceEyeLeft);
+ material.DisableKeyword(Keyword_ForceEyeRight);
+ material.EnableKeyword(Keyword_ForceEyeNone);
+ break;
+ case StereoEye.Left:
+ material.DisableKeyword(Keyword_ForceEyeNone);
+ material.DisableKeyword(Keyword_ForceEyeRight);
+ material.EnableKeyword(Keyword_ForceEyeLeft);
+ break;
+ case StereoEye.Right:
+ material.DisableKeyword(Keyword_ForceEyeNone);
+ material.DisableKeyword(Keyword_ForceEyeLeft);
+ material.EnableKeyword(Keyword_ForceEyeRight);
+ break;
+ }
+ }
+
+ public static void SetupStereoMaterial(Material material, StereoPacking packing)
+ {
+ switch (packing)
+ {
+ case StereoPacking.None:
+ material.DisableKeyword(Keyword_StereoTopBottom);
+ material.DisableKeyword(Keyword_StereoLeftRight);
+ material.DisableKeyword(Keyword_StereoCustomUV);
+ material.DisableKeyword(Keyword_StereoTwoTextures);
+ material.EnableKeyword(Keyword_StereoNone);
+ break;
+ case StereoPacking.TopBottom:
+ material.DisableKeyword(Keyword_StereoNone);
+ material.DisableKeyword(Keyword_StereoLeftRight);
+ material.DisableKeyword(Keyword_StereoCustomUV);
+ material.DisableKeyword(Keyword_StereoTwoTextures);
+ material.EnableKeyword(Keyword_StereoTopBottom);
+ break;
+ case StereoPacking.LeftRight:
+ material.DisableKeyword(Keyword_StereoNone);
+ material.DisableKeyword(Keyword_StereoTopBottom);
+ material.DisableKeyword(Keyword_StereoTwoTextures);
+ material.DisableKeyword(Keyword_StereoCustomUV);
+ material.EnableKeyword(Keyword_StereoLeftRight);
+ break;
+ case StereoPacking.CustomUV:
+ material.DisableKeyword(Keyword_StereoNone);
+ material.DisableKeyword(Keyword_StereoTopBottom);
+ material.DisableKeyword(Keyword_StereoLeftRight);
+ material.DisableKeyword(Keyword_StereoTwoTextures);
+ material.EnableKeyword(Keyword_StereoCustomUV);
+ break;
+ case StereoPacking.TwoTextures:
+ material.DisableKeyword(Keyword_StereoNone);
+ material.DisableKeyword(Keyword_StereoTopBottom);
+ material.DisableKeyword(Keyword_StereoLeftRight);
+ material.DisableKeyword(Keyword_StereoCustomUV);
+ material.EnableKeyword(Keyword_StereoTwoTextures);
+ break;
+ }
+ }
+
+ public static void SetupGlobalDebugStereoTinting(bool enabled)
+ {
+ if (enabled)
+ {
+ Shader.EnableKeyword(Keyword_StereoDebug);
+ }
+ else
+ {
+ Shader.DisableKeyword(Keyword_StereoDebug);
+ }
+ }
+
+ public static void SetupAlphaPackedMaterial(Material material, AlphaPacking packing)
+ {
+ switch (packing)
+ {
+ case AlphaPacking.None:
+ material.DisableKeyword(Keyword_AlphaPackTopBottom);
+ material.DisableKeyword(Keyword_AlphaPackLeftRight);
+ material.EnableKeyword(Keyword_AlphaPackNone);
+ break;
+ case AlphaPacking.TopBottom:
+ material.DisableKeyword(Keyword_AlphaPackNone);
+ material.DisableKeyword(Keyword_AlphaPackLeftRight);
+ material.EnableKeyword(Keyword_AlphaPackTopBottom);
+ break;
+ case AlphaPacking.LeftRight:
+ material.DisableKeyword(Keyword_AlphaPackNone);
+ material.DisableKeyword(Keyword_AlphaPackTopBottom);
+ material.EnableKeyword(Keyword_AlphaPackLeftRight);
+ break;
+ }
+ }
+
+ public static void SetupGammaMaterial(Material material, bool playerSupportsLinear)
+ {
+#if UNITY_PLATFORM_SUPPORTS_LINEAR
+ if (QualitySettings.activeColorSpace == ColorSpace.Linear && !playerSupportsLinear)
+ {
+ material.EnableKeyword(Keyword_ApplyGamma);
+ }
+ else
+ {
+ material.DisableKeyword(Keyword_ApplyGamma);
+ }
+#endif
+ }
+
+ public static void SetupTextureMatrix(Material material, float[] transform)
+ {
+ if (material == null)
+ return;
+
+ if (transform == null || transform.Length != 6)
+ transform = new float[6] { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f };
+
+ Vector4 v0 = new Vector4(transform[0], transform[1], 0, 0);
+ Vector4 v1 = new Vector4(transform[2], transform[3], 0, 0);
+ Vector4 v2 = new Vector4(0, 0, 1, 0);
+ Vector4 v3 = new Vector4(transform[4], transform[5], 0, 1);
+
+ material.SetMatrix(PropTextureMatrix.Id, new Matrix4x4(v0, v1, v2, v3));
+ }
+
+ public static void SetupTextureMatrix(Material material, Matrix4x4 transform)
+ {
+ if (material == null)
+ return;
+ material.SetMatrix(PropTextureMatrix.Id, transform);
+ }
+
+#if UNITY_PLATFORM_SUPPORTS_YPCBCR
+ public static void SetupYpCbCrMaterial(Material material, bool enable, Matrix4x4 transform, Texture texture)
+ {
+ if (material.HasProperty(VideoRender.PropUseYpCbCr.Id))
+ {
+ if (enable)
+ {
+ material.EnableKeyword(VideoRender.Keyword_UseYpCbCr);
+ material.SetMatrix(VideoRender.PropYpCbCrTransform.Id, transform);
+ material.SetTexture(VideoRender.PropChromaTex.Id, texture);
+ }
+ else
+ {
+ material.DisableKeyword(VideoRender.Keyword_UseYpCbCr);
+ }
+ }
+ }
+#endif
+
+ public static void SetupVerticalFlipMaterial(Material material, bool flip)
+ {
+ material.SetFloat(VideoRender.PropVertScale.Id, flip?-1f:1f);
+ }
+
+ public static Texture GetTexture(MediaPlayer mediaPlayer, int textureIndex)
+ {
+ Texture result = null;
+ if (mediaPlayer != null)
+ {
+ if (mediaPlayer.UseResampler && mediaPlayer.FrameResampler != null && mediaPlayer.FrameResampler.OutputTexture != null)
+ {
+ if ( mediaPlayer.FrameResampler.OutputTexture.Length > textureIndex)
+ {
+ result = mediaPlayer.FrameResampler.OutputTexture[textureIndex];
+ }
+ }
+ else if (mediaPlayer.TextureProducer != null)
+ {
+ if (mediaPlayer.TextureProducer.GetTextureCount() > textureIndex)
+ {
+ result = mediaPlayer.TextureProducer.GetTexture(textureIndex);
+ }
+ }
+ }
+ return result;
+ }
+
+ public static void SetupMaterialForMedia(Material material, MediaPlayer mediaPlayer, int texturePropId = -1, Texture fallbackTexture = null, bool forceFallbackTexture = false)
+ {
+ Debug.Assert(material != null);
+ if (mediaPlayer != null)
+ {
+ Texture mainTexture = GetTexture(mediaPlayer, 0);
+ Matrix4x4 textureTransform = Matrix4x4.identity;
+ Texture yCbCrTexture = GetTexture(mediaPlayer, 1);
+ Matrix4x4 yCbCrTransform = Matrix4x4.identity;
+ StereoPacking stereoPacking = StereoPacking.None;
+ AlphaPacking alphaPacking = AlphaPacking.None;
+ bool flipY = false;
+ bool isLinear = false;
+
+ if (texturePropId != -1)
+ {
+ if (mainTexture == null || forceFallbackTexture)
+ {
+ mainTexture = fallbackTexture;
+ }
+ material.SetTexture(texturePropId, mainTexture);
+ }
+
+ ITextureProducer textureProducer = mediaPlayer.TextureProducer;
+ if (textureProducer != null)
+ {
+ flipY = textureProducer.RequiresVerticalFlip();
+ yCbCrTransform = textureProducer.GetYpCbCrTransform();
+ stereoPacking = textureProducer.GetTextureStereoPacking();
+ alphaPacking = textureProducer.GetTextureAlphaPacking();
+ textureTransform = textureProducer.GetTextureMatrix();
+ }
+
+ if (mediaPlayer.Info != null)
+ {
+ isLinear = mediaPlayer.Info.PlayerSupportsLinearColorSpace();
+ }
+
+ SetupMaterial(material, flipY, isLinear, yCbCrTransform, yCbCrTexture, textureTransform, mediaPlayer.VideoLayoutMapping, stereoPacking, alphaPacking);
+ }
+ else
+ {
+ if (texturePropId != -1)
+ {
+ material.SetTexture(texturePropId, fallbackTexture);
+ }
+ SetupMaterial(material, false, true, Matrix4x4.identity, null, Matrix4x4.identity);
+ }
+ }
+
+ internal static void SetupMaterial(
+ Material material,
+ bool flipVertically,
+ bool playerSupportsLinear,
+ Matrix4x4 ycbcrTransform,
+ Texture ycbcrTexture,
+ Matrix4x4 textureTransform,
+ VideoMapping mapping = VideoMapping.Normal,
+ StereoPacking stereoPacking = StereoPacking.None,
+ AlphaPacking alphaPacking = AlphaPacking.None)
+ {
+ SetupVerticalFlipMaterial(material, flipVertically);
+
+ // Apply changes for layout
+ if (material.HasProperty(VideoRender.PropLayout.Id))
+ {
+ VideoRender.SetupLayoutMaterial(material, mapping);
+ }
+
+ // Apply changes for stereo videos
+ if (material.HasProperty(VideoRender.PropStereo.Id))
+ {
+ VideoRender.SetupStereoMaterial(material, stereoPacking);
+ }
+
+ // Apply changes for alpha videos
+ if (material.HasProperty(VideoRender.PropAlphaPack.Id))
+ {
+ VideoRender.SetupAlphaPackedMaterial(material, alphaPacking);
+ }
+
+ // Apply gamma correction
+#if UNITY_PLATFORM_SUPPORTS_LINEAR
+ if (material.HasProperty(VideoRender.PropApplyGamma.Id))
+ {
+ VideoRender.SetupGammaMaterial(material, playerSupportsLinear);
+ }
+#endif
+
+ // Adjust for cropping/orientation (when the decoder decodes in blocks that overrun the video frame size, it pads), OES only as we apply this lower down for none-OES
+ VideoRender.SetupTextureMatrix(material, textureTransform);
+
+#if UNITY_PLATFORM_SUPPORTS_YPCBCR
+ VideoRender.SetupYpCbCrMaterial(material, ycbcrTexture != null, ycbcrTransform, ycbcrTexture);
+#endif
+ }
+
+ [System.Flags]
+ public enum ResolveFlags : int
+ {
+ Mipmaps = 1 << 0,
+ PackedAlpha = 1 << 1,
+ StereoLeft = 1 << 2,
+ StereoRight = 1 << 3,
+ ColorspaceSRGB = 1 << 4,
+ }
+
+ public static void SetupResolveMaterial(Material material, VideoResolveOptions options)
+ {
+ if (options.IsColourAdjust())
+ {
+ material.EnableKeyword(VideoRender.Keyword_UseHSBC);
+ material.SetFloat(VideoRender.PropHue.Id, options.hue);
+ material.SetFloat(VideoRender.PropSaturation.Id, options.saturation);
+ material.SetFloat(VideoRender.PropBrightness.Id, options.brightness);
+ material.SetFloat(VideoRender.PropContrast.Id, options.contrast);
+ material.SetFloat(VideoRender.PropInvGamma.Id, 1f / options.gamma);
+ }
+ else
+ {
+ material.DisableKeyword(VideoRender.Keyword_UseHSBC);
+ }
+
+ material.color = options.tint;
+ }
+
+ public static RenderTexture ResolveVideoToRenderTexture(Material resolveMaterial, RenderTexture targetTexture, ITextureProducer texture, ResolveFlags flags, ScaleMode scaleMode = ScaleMode.StretchToFill)
+ {
+ int targetWidth = texture.GetTexture(0).width;
+ int targetHeight = texture.GetTexture(0).height;
+
+ StereoEye eyeMode = StereoEye.Both;
+ if (((flags & ResolveFlags.StereoLeft) == ResolveFlags.StereoLeft) &&
+ ((flags & ResolveFlags.StereoRight) != ResolveFlags.StereoRight))
+ {
+ eyeMode = StereoEye.Left;
+ }
+ else if (((flags & ResolveFlags.StereoLeft) != ResolveFlags.StereoLeft) &&
+ ((flags & ResolveFlags.StereoRight) == ResolveFlags.StereoRight))
+ {
+ eyeMode = StereoEye.Right;
+ }
+
+ // RJT NOTE: No longer passing in PAR as combined with larger videos (e.g. 8K+) it can lead to textures >16K which most platforms don't support
+ // - Instead, the PAR is accounted for during drawing (which is more efficient too)
+ // - https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1297
+ float pixelAspectRatio = 1.0f; // texture.GetTexturePixelAspectRatio();
+ GetResolveTextureSize(
+ texture.GetTextureAlphaPacking(),
+ texture.GetTextureStereoPacking(),
+ eyeMode,
+ pixelAspectRatio,
+ texture.GetTextureMatrix(),
+ ref targetWidth,
+ ref targetHeight);
+
+ if (targetTexture)
+ {
+ bool sizeChanged = (targetTexture.width != targetWidth) || (targetTexture.height != targetHeight);
+ if (sizeChanged)
+ {
+ RenderTexture.ReleaseTemporary(targetTexture);
+ targetTexture = null;
+ }
+ }
+
+ if (!targetTexture)
+ {
+ RenderTextureReadWrite readWrite = ((flags & ResolveFlags.ColorspaceSRGB) == ResolveFlags.ColorspaceSRGB) ? RenderTextureReadWrite.sRGB : RenderTextureReadWrite.Linear;
+ targetTexture = RenderTexture.GetTemporary(targetWidth, targetHeight, 0, RenderTextureFormat.ARGB32, readWrite);
+ }
+
+ // Set target mipmap generation support
+ {
+ bool requiresMipmap = (flags & ResolveFlags.Mipmaps) == ResolveFlags.Mipmaps;
+ bool requiresRecreate = (targetTexture.IsCreated() && targetTexture.useMipMap != requiresMipmap);
+ if (requiresRecreate)
+ {
+ targetTexture.Release();
+ }
+ if (!targetTexture.IsCreated())
+ {
+ targetTexture.useMipMap = targetTexture.autoGenerateMips = requiresMipmap;
+ targetTexture.Create();
+ }
+ }
+
+ // Render resolve blit
+ // TODO: combine these two paths into a single material blit
+ {
+ bool prevSRGB = GL.sRGBWrite;
+ GL.sRGBWrite = targetTexture.sRGB;
+ RenderTexture prev = RenderTexture.active;
+ if (scaleMode == ScaleMode.StretchToFill)
+ {
+ Graphics.Blit(texture.GetTexture(0), targetTexture, resolveMaterial);
+ }
+ else
+ {
+ RenderTexture.active = targetTexture;
+ bool partialAreaRender = (scaleMode == ScaleMode.ScaleToFit);
+ if (partialAreaRender)
+ {
+ GL.Clear(false, true, Color.black);
+ }
+ VideoRender.DrawTexture(new Rect(0f, 0f, targetTexture.width, targetTexture.height), texture.GetTexture(0), scaleMode, texture.GetTextureAlphaPacking(), texture.GetTexturePixelAspectRatio(), resolveMaterial);
+ }
+ RenderTexture.active = prev;
+ GL.sRGBWrite = prevSRGB;
+ }
+
+ return targetTexture;
+ }
+
+ public static void GetResolveTextureSize(AlphaPacking alphaPacking, StereoPacking stereoPacking, StereoEye eyeMode, float pixelAspectRatio, Matrix4x4 textureXfrm, ref int width, ref int height)
+ {
+ Vector4 size = new Vector4(width, height, 0, 0);
+ size = textureXfrm * size;
+ width = (int)Mathf.Abs(size.x);
+ height = (int)Mathf.Abs(size.y);
+
+ switch (alphaPacking)
+ {
+ case AlphaPacking.LeftRight:
+ width /= 2;
+ break;
+ case AlphaPacking.TopBottom:
+ height /= 2;
+ break;
+ }
+
+ if (eyeMode != StereoEye.Both)
+ {
+ switch (stereoPacking)
+ {
+ case StereoPacking.LeftRight:
+ width /= 2;
+ break;
+ case StereoPacking.TopBottom:
+ height /= 2;
+ break;
+ }
+ }
+
+ if (pixelAspectRatio > 0f)
+ {
+ if (pixelAspectRatio > 1f)
+ {
+ width = Mathf.RoundToInt(width * pixelAspectRatio);
+ }
+ else if (pixelAspectRatio < 1f)
+ {
+ height = Mathf.RoundToInt(height / pixelAspectRatio);
+ }
+ }
+ }
+
+ public static bool RequiresResolve(ITextureProducer texture)
+ {
+ return (texture.GetTextureAlphaPacking() != AlphaPacking.None ||
+ texture.RequiresVerticalFlip() ||
+ texture.GetTextureStereoPacking() != StereoPacking.None ||
+ texture.GetTextureCount() > 1
+ );
+ }
+
+ public static void DrawTexture(Rect destRect, Texture texture, ScaleMode scaleMode, AlphaPacking alphaPacking, float pixelAspectRatio, Material material)
+ {
+ if (Event.current == null || Event.current.type == EventType.Repaint)
+ {
+ int sourceWidth = texture.width;
+ int sourceHeight = texture.height;
+ Matrix4x4 textureXfrm = Matrix4x4.identity;
+ GetResolveTextureSize(alphaPacking, StereoPacking.Unknown, StereoEye.Both, pixelAspectRatio, textureXfrm, ref sourceWidth, ref sourceHeight);
+
+ float sourceRatio = (float)sourceWidth / (float)sourceHeight;
+ Rect sourceRect = new Rect(0f, 0f, 1f, 1f);
+ switch (scaleMode)
+ {
+ case ScaleMode.ScaleAndCrop:
+ {
+ float destRatio = destRect.width / destRect.height;
+ if (destRatio > sourceRatio)
+ {
+ float adjust = sourceRatio / destRatio;
+ sourceRect = new Rect(0f, (1f - adjust) * 0.5f, 1f, adjust);
+ }
+ else
+ {
+ float adjust = destRatio / sourceRatio;
+ sourceRect = new Rect(0.5f - adjust * 0.5f, 0f, adjust, 1f);
+ }
+ }
+ break;
+ case ScaleMode.ScaleToFit:
+ {
+ float destRatio = destRect.width / destRect.height;
+ if (destRatio > sourceRatio)
+ {
+ float adjust = sourceRatio / destRatio;
+ destRect = new Rect(destRect.xMin + destRect.width * (1f - adjust) * 0.5f, destRect.yMin, adjust * destRect.width, destRect.height);
+ }
+ else
+ {
+ float adjust = destRatio / sourceRatio;
+ destRect = new Rect(destRect.xMin, destRect.yMin + destRect.height * (1f - adjust) * 0.5f, destRect.width, adjust * destRect.height);
+ }
+ }
+ break;
+ case ScaleMode.StretchToFill:
+ break;
+ }
+
+ GL.PushMatrix();
+ if (RenderTexture.active == null)
+ {
+ //GL.LoadPixelMatrix();
+ GL.LoadPixelMatrix(0f, Screen.width, Screen.height, 0f);
+ }
+ else
+ {
+ GL.LoadPixelMatrix(0f, RenderTexture.active.width, RenderTexture.active.height, 0f);
+ }
+ Graphics.DrawTexture(destRect, texture, sourceRect, 0, 0, 0, 0, GUI.color, material);
+ GL.PopMatrix();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/VideoRender.cs.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/VideoRender.cs.meta
new file mode 100755
index 0000000..c14fc2f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Scripts/Internal/Utils/VideoRender.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a928f61fef33d1d4986b2190310027bc
+timeCreated: 1547737745
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders.meta
new file mode 100755
index 0000000..5bb35b0
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3402b6994a6f571448baa444fdb6df57
+folderAsset: yes
+timeCreated: 1590344466
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Diffuse.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Diffuse.shader
new file mode 100755
index 0000000..a1b6f8e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Diffuse.shader
@@ -0,0 +1,80 @@
+Shader "AVProVideo/Lit/Diffuse (texture+color+fog+stereo support)"
+{
+ Properties
+ {
+ _Color("Main Color", Color) = (1,1,1,1)
+ _MainTex("Base (RGB)", 2D) = "white" {}
+ _ChromaTex("Chroma", 2D) = "white" {}
+
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags { "Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="Geometry" }
+ LOD 200
+
+ CGPROGRAM
+ #pragma surface surf Lambert vertex:VertexFunction
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ USE_YPCBCR
+
+ #include "AVProVideo.cginc"
+
+ uniform sampler2D _MainTex;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform fixed4 _Color;
+
+ struct Input
+ {
+ float2 uv_MainTex;
+ float4 color;
+ };
+
+ void VertexFunction(inout appdata_full v, out Input o)
+ {
+ UNITY_INITIALIZE_OUTPUT(Input, o);
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), true);
+ o.uv_MainTex = v.texcoord.xy *= scaleOffset.xy;
+ o.uv_MainTex = v.texcoord.xy += scaleOffset.zw;
+#elif STEREO_CUSTOM_UV
+ o.uv_MainTex = v.texcoord.xy;
+ if (!IsStereoEyeLeft())
+ {
+ o.uv_MainTex = v.texcoord1.xy;
+ }
+#endif
+ o.color = _Color;
+#if STEREO_DEBUG
+ o.color *= GetStereoDebugTint(IsStereoEyeLeft());
+#endif
+ }
+
+ void surf(Input IN, inout SurfaceOutput o)
+ {
+ fixed4 c;
+#if USE_YPCBCR
+ c = SampleYpCbCr(_MainTex, _ChromaTex, IN.uv_MainTex, _YpCbCrTransform);
+#else
+ c = SampleRGBA(_MainTex, IN.uv_MainTex);
+#endif
+ c *= IN.color;
+ o.Albedo = c.rgb;
+ o.Alpha = c.a;
+ }
+ ENDCG
+ }
+
+ Fallback "Legacy Shaders/Transparent/VertexLit"
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Diffuse.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Diffuse.shader.meta
new file mode 100755
index 0000000..3b3e95e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Diffuse.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 06b0cff0150d7eb41b3d269f7e11daa3
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Transparent-Diffuse.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Transparent-Diffuse.shader
new file mode 100755
index 0000000..b30585b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Transparent-Diffuse.shader
@@ -0,0 +1,72 @@
+Shader "AVProVideo/Lit/Transparent Diffuse (texture+color+fog+packed alpha)"
+{
+ Properties
+ {
+ _Color("Main Color", Color) = (1,1,1,1)
+ _MainTex("Base (RGB)", 2D) = "black" {}
+ _ChromaTex("Chroma", 2D) = "black" {}
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+ LOD 200
+ ZWrite Off
+ Blend SrcAlpha OneMinusSrcAlpha
+ Cull Off
+
+ CGPROGRAM
+ #pragma surface surf Lambert vertex:VertexFunction alpha
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+
+ #include "AVProVideo.cginc"
+
+ uniform sampler2D _MainTex;
+ uniform float4 _MainTex_ST;
+ uniform float4 _MainTex_TexelSize;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform fixed4 _Color;
+
+ struct Input
+ {
+ float4 texcoords;
+ };
+
+ void VertexFunction(inout appdata_full v, out Input o)
+ {
+ UNITY_INITIALIZE_OUTPUT(Input, o);
+
+ o.texcoords = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, v.texcoord, _MainTex_ST.y < 0.0);
+ }
+
+ void surf(Input IN, inout SurfaceOutput o)
+ {
+ fixed4 col;
+#if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, IN.texcoords.xy, _YpCbCrTransform);
+#else
+ col = SampleRGBA(_MainTex, IN.texcoords.xy);
+#endif
+
+#if ALPHAPACK_TOP_BOTTOM | ALPHAPACK_LEFT_RIGHT
+ col.a = SamplePackedAlpha(_MainTex, IN.texcoords.zw);
+#endif
+ col *= _Color;
+ o.Albedo = col.rgb;
+ o.Alpha = col.a;
+ }
+ ENDCG
+ }
+
+ Fallback "Legacy Shaders/Transparent/VertexLit"
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Transparent-Diffuse.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Transparent-Diffuse.shader.meta
new file mode 100755
index 0000000..6feec9c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Lit-Transparent-Diffuse.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 751148eda67f7b34fbd51bfb7951084f
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Cube3x2.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Cube3x2.shader
new file mode 100755
index 0000000..597fbdd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Cube3x2.shader
@@ -0,0 +1,215 @@
+Shader "AVProVideo/Skybox/3x2 Cube"
+{
+ Properties
+ {
+ _Tint ("Tint Color", Color) = (.5, .5, .5, .5)
+ [Gamma] _Exposure ("Exposure", Range(0, 8)) = 1.0
+ _Rotation ("Rotation", Range(0, 360)) = 0
+ [NoScaleOffset] _MainTex ("MainTex (HDR)", 2D) = "grey" { }
+ [NoScaleOffset] _ChromaTex ("Chroma", 2D) = "grey" { }
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo ("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug ("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" }
+ Cull Off ZWrite Off
+
+ CGINCLUDE
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+
+ half4 _Tint;
+ half _Exposure;
+ float _Rotation;
+
+ sampler2D _MainTex;
+ float4 _MainTex_TexelSize;
+ half4 _MainTex_HDR;
+ float4 _MainTex_ST;
+#if USE_YPCBCR
+ sampler2D _ChromaTex;
+ float4x4 _YpCbCrTransform;
+#endif
+
+ float3 RotateAroundYInDegrees (float3 vertex, float degrees)
+ {
+ const float CONST_PI = 3.14159265359f;
+ float alpha = degrees * CONST_PI / 180.0;
+ float sina, cosa;
+ sincos(alpha, sina, cosa);
+ float2x2 m = float2x2(cosa, -sina, sina, cosa);
+ return float3(mul(m, vertex.xz), vertex.y).xzy;
+ }
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ float2 texcoord : TEXCOORD0;
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+#endif
+ };
+
+ struct v2f {
+ float4 vertex : SV_POSITION;
+ float2 texcoord : TEXCOORD0;
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_OUTPUT_STEREO
+#endif
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ #if STEREO_DEBUG
+ float4 tint : COLOR;
+ #endif
+#endif
+ };
+
+ static const float onehalf = 1.0 / 2.0;
+ static const float onethird = 1.0 / 3.0;
+ static const float twothird = 2.0 / 3.0;
+ static const float exp_coeff = 1.01;
+ static const float2 face_scale = float2(onethird, onehalf);
+
+ v2f sb_vert(appdata_t v, float2 face_offset)
+ {
+ v2f o;
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+#endif
+ float3 rotated = RotateAroundYInDegrees(v.vertex, _Rotation);
+ o.vertex = XFormObjectToClip(float4(rotated, 0.0));
+
+ // Remap texcoords for the cubemap face with the offset passed in.
+ float2 t = _MainTex_TexelSize.wz * face_scale;
+ float2 p = (floor((t * exp_coeff) - t) / t) * 0.5;
+ float2 hp = p * 0.5;
+ float2 of = face_offset + hp;
+ float2 s = face_scale - p;
+ float2 uv = v.texcoord * s + of;
+ o.texcoord = TRANSFORM_TEX(uv, _MainTex);
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+ o.texcoord *= scaleOffset.xy;
+ o.texcoord += scaleOffset.zw;
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+#endif
+
+ return o;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ half4 tex;
+#if USE_YPCBCR
+ tex = SampleYpCbCr(_MainTex, _ChromaTex, i.texcoord, _YpCbCrTransform);
+#else
+ tex = SampleRGBA(_MainTex, i.texcoord);
+#endif
+ half3 c = tex.rgb;
+ //c = DecodeHDR(tex, _MainTex_HDR);
+ //c = c * _Tint.rgb * unity_ColorSpaceDouble.rgb;
+ c *= _Exposure;
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ #if STEREO_DEBUG
+ c *= i.tint;
+ #endif
+#endif
+ return half4(c, 1.0);
+ }
+ ENDCG
+
+ Pass // Front
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v, float2(onethird, 0));
+ }
+ ENDCG
+ }
+
+ Pass // Back
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v, float2(twothird, 0));
+ }
+ ENDCG
+ }
+
+ Pass // Right
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v, float2(0, onehalf));
+ }
+ ENDCG
+ }
+
+ Pass // Left
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v, float2(onethird, onehalf));
+ }
+ ENDCG
+ }
+
+ Pass // Top
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v, float2(twothird, onehalf));
+ }
+ ENDCG
+ }
+
+ Pass // Bottom
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v, float2(0, 0));
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Cube3x2.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Cube3x2.shader.meta
new file mode 100755
index 0000000..cb8f445
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Cube3x2.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 7a533059caadf0a4388b91e05079e0d5
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Sphere.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Sphere.shader
new file mode 100755
index 0000000..c96ec9c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Sphere.shader
@@ -0,0 +1,156 @@
+Shader "AVProVideo/Skybox/Sphere"
+{
+ Properties
+ {
+ _Tint ("Tint Color", Color) = (.5, .5, .5, .5)
+ [Gamma] _Exposure ("Exposure", Range(0, 8)) = 1.0
+ _Rotation ("Rotation", Range(0, 360)) = 0
+ [NoScaleOffset] _MainTex ("MainTex (HDR)", 2D) = "grey" { }
+ [NoScaleOffset] _ChromaTex ("Chroma", 2D) = "grey" { }
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo ("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug ("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" }
+ Cull Off ZWrite Off
+
+ CGINCLUDE
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+
+ half4 _Tint;
+ half _Exposure;
+ float _Rotation;
+
+ sampler2D _MainTex;
+ float4 _MainTex_TexelSize;
+ half4 _MainTex_HDR;
+ float4 _MainTex_ST;
+#if USE_YPCBCR
+ sampler2D _ChromaTex;
+ float4x4 _YpCbCrTransform;
+#endif
+
+ float3 RotateAroundYInDegrees (float3 vertex, float degrees)
+ {
+ const float CONST_PI = 3.14159265359f;
+ float alpha = degrees * CONST_PI / 180.0;
+ float sina, cosa;
+ sincos(alpha, sina, cosa);
+ float2x2 m = float2x2(cosa, -sina, sina, cosa);
+ return float3(mul(m, vertex.xz), vertex.y).xzy;
+ }
+
+ inline float2 ToRadialCoords(float3 coords)
+ {
+ const float CONST_PI = 3.14159265359f;
+ float3 normalizedCoords = normalize(coords);
+ float latitude = acos(normalizedCoords.y);
+ float longitude = atan2(normalizedCoords.z, normalizedCoords.x);
+ float2 sphereCoords = float2(longitude, latitude) * float2(0.5/CONST_PI, 1.0/CONST_PI);
+ float2 radial = float2(0.5,1.0) - sphereCoords;
+ radial.x += 0.25;
+ radial.x = fmod(radial.x, 1.0);
+ return radial;
+ }
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ float2 texcoord : TEXCOORD0;
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+#endif
+ };
+
+ struct v2f {
+ float4 vertex : SV_POSITION;
+ float3 texcoord : TEXCOORD0;
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset : TEXCOORD1;
+ #if STEREO_DEBUG
+ float4 tint : COLOR;
+ #endif
+#endif
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_OUTPUT_STEREO
+#endif
+ };
+
+ v2f sb_vert(appdata_t v)
+ {
+ v2f o;
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_SETUP_INSTANCE_ID(v); // calculates and sets the built-n unity_StereoEyeIndex and unity_InstanceID Unity shader variables to the correct values based on which eye the GPU is currently rendering
+ UNITY_INITIALIZE_OUTPUT(v2f, o); // initializes all v2f values to 0
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); // tells the GPU which eye in the texture array it should render to
+#endif
+ float3 rotated = RotateAroundYInDegrees(v.vertex, _Rotation);
+ o.vertex = XFormObjectToClip(float4(rotated, 0.0));
+ o.texcoord = v.vertex.xyz;
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ o.scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+#endif
+ return o;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ float2 tc = ToRadialCoords(i.texcoord);
+
+ #if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ tc.xy *= i.scaleOffset.xy;
+ tc.xy += i.scaleOffset.zw;
+ #endif
+
+ tc = TRANSFORM_TEX(tc, _MainTex);
+
+ half4 tex;
+#if USE_YPCBCR
+ tex = SampleYpCbCr(_MainTex, _ChromaTex, tc, _YpCbCrTransform);
+#else
+ tex = SampleRGBA(_MainTex, tc);
+#endif
+ half3 c = tex;
+ //c = DecodeHDR(tex, _MainTex_HDR);
+ //c = c * _Tint.rgb;
+ ///c = c * unity_ColorSpaceDouble.rgb;
+ c *= _Exposure;
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ #if STEREO_DEBUG
+ c *= i.tint;
+ #endif
+#endif
+ return half4(c, 1.0);
+ }
+ ENDCG
+
+ Pass // Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+ v2f vert(appdata_t v)
+ {
+ return sb_vert(v);
+ }
+ ENDCG
+ }
+
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Sphere.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Sphere.shader.meta
new file mode 100755
index 0000000..46559f9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Skybox-Sphere.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d7bb9d4ea887e4041877356986247bba
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-AndroidOES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-AndroidOES.shader
new file mode 100755
index 0000000..8d47cdd
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-AndroidOES.shader
@@ -0,0 +1,128 @@
+Shader "AVProVideo/Unlit/Opaque (texture+color+stereo support) - Android OES ONLY"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB)", 2D) = "black" { }
+ _ChromaTex("Chroma", 2D) = "gray" { } // For fallback shader
+ _Color("Main Color", Color) = (1,1,1,1) // For fallback shader
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" "IgnoreProjector"="False" "Queue"="Geometry" }
+ LOD 100
+ Lighting Off
+ Cull Off
+
+ Pass
+ {
+ GLSLPROGRAM
+
+ #pragma only_renderers gles3
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USING_DEFAULT_TEXTURE
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+ precision mediump float;
+
+ #include "UnityCG.glslinc"
+ #if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+ #endif
+ #define SHADERLAB_GLSL
+ #include "AVProVideo.cginc"
+
+ #ifdef VERTEX
+
+ out vec2 texVal;
+ uniform vec4 _MainTex_ST;
+ uniform mat4 _MainTex_Xfrm;
+
+#if defined(STEREO_DEBUG)
+ out vec4 tint;
+#endif
+
+ INLINE bool Android_IsStereoEyeLeft()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ return (eyeIndex == 0);
+ #else
+ return IsStereoEyeLeft();
+ #endif
+ }
+
+ void main()
+ {
+#if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ mat4 vpMatrix = GetStereoMatrixVP(eyeIndex);
+ gl_Position = vpMatrix * unity_ObjectToWorld * gl_Vertex;
+#else
+ gl_Position = XFormObjectToClip(gl_Vertex);
+#endif
+
+ texVal = gl_MultiTexCoord0.xy;
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ texVal = (_MainTex_Xfrm * vec4(texVal.x, texVal.y, 0.0, 1.0)).xy;
+ texVal = TRANSFORM_TEX_ST(texVal, _MainTex_ST);
+
+#if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ vec4 scaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+
+ texVal.xy *= scaleOffset.xy;
+ texVal.xy += scaleOffset.zw;
+#endif
+
+#if defined(STEREO_DEBUG)
+ tint = GetStereoDebugTint(Android_IsStereoEyeLeft());
+#endif
+ }
+ #endif
+
+ #ifdef FRAGMENT
+
+ in vec2 texVal;
+
+#if defined(USING_DEFAULT_TEXTURE)
+ uniform sampler2D _MainTex;
+#else
+ uniform samplerExternalOES _MainTex;
+#endif
+
+#if defined(STEREO_DEBUG)
+ in vec4 tint;
+#endif
+
+ void main()
+ {
+ vec4 col = texture(_MainTex, texVal.xy);
+
+ #if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+#endif
+
+#if defined(STEREO_DEBUG)
+ col *= tint;
+#endif
+
+ gl_FragColor = col;
+ }
+ #endif
+
+ ENDGLSL
+ }
+ }
+
+ Fallback "AVProVideo/Unlit/Opaque (texture+color+fog+stereo support)"
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-AndroidOES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-AndroidOES.shader.meta
new file mode 100755
index 0000000..a9c31d1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-AndroidOES.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: eb44a525a7e2c6640a8cd90fd7fabce4
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent-AndroidOES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent-AndroidOES.shader
new file mode 100755
index 0000000..c65cc6d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent-AndroidOES.shader
@@ -0,0 +1,111 @@
+Shader "AVProVideo/Unlit/Transparent (texture+alpha support) - Android OES ONLY"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB)", 2D) = "black" { }
+ _ChromaTex("Chroma", 2D) = "gray" { } // For fallback shader
+ _Color("Main Color", Color) = (1,1,1,1) // For fallback shader
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Transparent" "IgnoreProjector"="True" "Queue"="Transparent" }
+ LOD 100
+ ZWrite Off
+ Blend SrcAlpha OneMinusSrcAlpha
+ Lighting Off
+ Cull Off
+
+ Pass
+ {
+ GLSLPROGRAM
+
+ #pragma only_renderers gles3
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USING_DEFAULT_TEXTURE
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+ precision mediump float;
+
+ #include "UnityCG.glslinc"
+ #if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+ #endif
+ #define SHADERLAB_GLSL
+ #include "AVProVideo.cginc"
+
+ #ifdef VERTEX
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ out vec4 texVal;
+ #else
+ out vec2 texVal;
+ #endif
+
+ uniform vec4 _MainTex_ST;
+ uniform vec4 _MainTex_TexelSize;
+ uniform mat4 _MainTex_Xfrm;
+
+ void main()
+ {
+ gl_Position = XFormObjectToClip(gl_Vertex);
+
+ texVal.xy = gl_MultiTexCoord0.xy;
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ texVal.xy = (_MainTex_Xfrm * vec4(texVal.x, texVal.y, 0.0, 1.0) ).xy;
+ texVal.xy = TRANSFORM_TEX_ST(texVal, _MainTex_ST);
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ texVal = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, texVal.xy, _MainTex_ST.y < 0.0);
+ #if defined(ALPHAPACK_TOP_BOTTOM)
+ texVal.yw = texVal.wy;
+ #endif
+ #endif
+ }
+ #endif // VERTEX
+
+ #ifdef FRAGMENT
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ in vec4 texVal;
+ #else
+ in vec2 texVal;
+ #endif
+
+ #if defined(USING_DEFAULT_TEXTURE)
+ uniform sampler2D _MainTex;
+ #else
+ uniform samplerExternalOES _MainTex;
+ #endif
+
+ void main()
+ {
+ vec4 col = texture(_MainTex, texVal.xy);
+
+ #if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+ #endif
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ vec3 rgb = texture(_MainTex, texVal.zw).rgb;
+ col.a = (rgb.r + rgb.g + rgb.b) / 3.0;
+ #endif
+
+ gl_FragColor = col;
+ }
+ #endif
+
+ ENDGLSL
+ }
+ }
+
+ Fallback "AVProVideo/Unlit/Transparent (texture+color+fog+stereo+alpha)"
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent-AndroidOES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent-AndroidOES.shader.meta
new file mode 100755
index 0000000..158322c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent-AndroidOES.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 329f34b49d9d2e941951589b296d042a
+timeCreated: 1634745134
+licenseType: Pro
+ShaderImporter:
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent.shader
new file mode 100755
index 0000000..381a915
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent.shader
@@ -0,0 +1,149 @@
+Shader "AVProVideo/Unlit/Transparent (texture+color+fog+stereo+alpha)"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB) Trans (A)", 2D) = "black" { }
+ _ChromaTex("Chroma", 2D) = "gray" { }
+ _Color("Main Color", Color) = (1,1,1,1)
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Transparent" "IgnoreProjector"="True" "Queue"="Transparent" }
+ LOD 100
+ ZWrite Off
+ Blend SrcAlpha OneMinusSrcAlpha
+ Lighting Off
+ Cull Off
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_fog
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+
+ struct appdata
+ {
+ float4 vertex : POSITION;
+ float2 uv : TEXCOORD0;
+ #if STEREO_CUSTOM_UV
+ float2 uv2 : TEXCOORD1; // Custom uv set for right eye (left eye is in TEXCOORD0)
+ #endif
+
+ #ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ #endif
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ float4 uv : TEXCOORD0;
+
+ #if STEREO_DEBUG
+ float4 tint : COLOR;
+ #endif
+
+ UNITY_FOG_COORDS(1)
+
+ #ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_OUTPUT_STEREO
+ #endif
+ };
+
+ uniform sampler2D _MainTex;
+ #if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+ #endif
+ uniform float4 _MainTex_ST;
+ uniform float4 _MainTex_TexelSize;
+ uniform float4x4 _MainTex_Xfrm;
+ uniform fixed4 _Color;
+
+ v2f vert (appdata v)
+ {
+ v2f o;
+
+ #ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_SETUP_INSTANCE_ID(v); // calculates and sets the built-n unity_StereoEyeIndex and unity_InstanceID Unity shader variables to the correct values based on which eye the GPU is currently rendering
+ UNITY_INITIALIZE_OUTPUT(v2f, o); // initializes all v2f values to 0
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); // tells the GPU which eye in the texture array it should render to
+ #endif
+
+ o.vertex = XFormObjectToClip(v.vertex);
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ o.uv.xy = mul(_MainTex_Xfrm, float4(v.uv.xy, 0.0, 1.0)).xy;
+ o.uv.xy = TRANSFORM_TEX(o.uv.xy, _MainTex);
+
+ // Horrible hack to undo the scale transform to fit into our UV packing layout logic...
+ if (_MainTex_ST.y < 0.0)
+ {
+ o.uv.y = 1.0 - o.uv.y;
+ }
+
+ #if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+ o.uv.xy *= scaleOffset.xy;
+ o.uv.xy += scaleOffset.zw;
+ #elif STEREO_CUSTOM_UV
+ if (!IsStereoEyeLeft())
+ {
+ o.uv.xy = TRANSFORM_TEX(v.uv2, _MainTex);
+ }
+ #endif
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+
+ o.uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, o.uv.xy, _MainTex_ST.y < 0.0);
+
+ UNITY_TRANSFER_FOG(o, o.vertex);
+
+ return o;
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ fixed4 col;
+ #if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, i.uv.xy, _YpCbCrTransform);
+ #else
+ col = SampleRGBA(_MainTex, i.uv.xy);
+ #endif
+
+ #if ALPHAPACK_TOP_BOTTOM | ALPHAPACK_LEFT_RIGHT
+ col.a = SamplePackedAlpha(_MainTex, i.uv.zw);
+ #endif
+
+ col *= _Color;
+ #if STEREO_DEBUG
+ col *= i.tint;
+ #endif
+
+ UNITY_APPLY_FOG(i.fogCoord, col);
+
+ return col;
+ }
+
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent.shader.meta
new file mode 100755
index 0000000..ee08a0b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit-Transparent.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 0ed1fb9218ad96f49acfdb428d5b5aab
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit.shader
new file mode 100755
index 0000000..d9e28a9
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit.shader
@@ -0,0 +1,128 @@
+Shader "AVProVideo/Unlit/Opaque (texture+color+fog+stereo support)"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB)", 2D) = "black" { }
+ _ChromaTex ("Chroma", 2D) = "gray" { }
+ _Color("Main Color", Color) = (1,1,1,1)
+
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" "IgnoreProjector"="False" "Queue"="Geometry" }
+ LOD 100
+ Lighting Off
+ Cull Off
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_fog
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+
+ struct appdata
+ {
+ float4 vertex : POSITION;
+ float2 uv : TEXCOORD0;
+ #if STEREO_CUSTOM_UV
+ float2 uv2 : TEXCOORD1; // Custom uv set for right eye (left eye is in TEXCOORD0)
+ #endif
+ #ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ #endif
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ float2 uv : TEXCOORD0;
+ UNITY_FOG_COORDS(1)
+ #if STEREO_DEBUG
+ float4 tint : COLOR;
+ #endif
+ #ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_OUTPUT_STEREO
+ #endif
+ };
+
+ uniform sampler2D _MainTex;
+ #if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+ #endif
+ uniform float4 _MainTex_ST;
+ uniform float4x4 _MainTex_Xfrm;
+ uniform fixed4 _Color;
+
+ v2f vert (appdata v)
+ {
+ v2f o;
+
+ #ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_SETUP_INSTANCE_ID(v); // calculates and sets the built-n unity_StereoEyeIndex and unity_InstanceID Unity shader variables to the correct values based on which eye the GPU is currently rendering
+ UNITY_INITIALIZE_OUTPUT(v2f, o); // initializes all v2f values to 0
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); // tells the GPU which eye in the texture array it should render to
+ #endif
+
+ o.vertex = XFormObjectToClip(v.vertex);
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ o.uv.xy = mul(_MainTex_Xfrm, float4(v.uv.xy, 0.0, 1.0)).xy;
+ o.uv.xy = TRANSFORM_TEX(o.uv, _MainTex);
+
+ #if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+ o.uv.xy *= scaleOffset.xy;
+ o.uv.xy += scaleOffset.zw;
+ #elif STEREO_CUSTOM_UV
+ if (!IsStereoEyeLeft())
+ {
+ o.uv.xy = TRANSFORM_TEX(v.uv2, _MainTex);
+ }
+ #endif
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+
+ UNITY_TRANSFER_FOG(o, o.vertex);
+
+ return o;
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ fixed4 col;
+ #if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, i.uv.xy, _YpCbCrTransform);
+ #else
+ col = SampleRGBA(_MainTex, i.uv.xy);
+ #endif
+ col *= _Color;
+
+ #if STEREO_DEBUG
+ col *= i.tint;
+ #endif
+
+ UNITY_APPLY_FOG(i.fogCoord, col);
+
+ return col;
+ }
+
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit.shader.meta
new file mode 100755
index 0000000..7a60d83
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-Unlit.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 1ca6555d94ddb204c87e9fe549085b3c
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-AndroidOES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-AndroidOES.shader
new file mode 100755
index 0000000..72651eb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-AndroidOES.shader
@@ -0,0 +1,254 @@
+Shader "AVProVideo/VR/InsideSphere Unlit (stereo+color) - Android OES ONLY"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB)", 2D) = "black" {}
+ _ChromaTex("Chroma", 2D) = "white" {} // For fallback shader
+ _Color("Color", Color) = (0.0, 1.0, 0.0, 1.0)
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye("Force Eye Mode", Float) = 0
+ [KeywordEnum(None, EquiRect180)] Layout("Layout", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(HIGH_QUALITY)] _HighQuality("High Quality", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ }
+ SubShader
+ {
+ Tags{ "Queue" = "Geometry" }
+ Pass
+ {
+ Cull Front
+ //ZTest Always
+ ZWrite On
+ Lighting Off
+
+ GLSLPROGRAM
+
+ #pragma only_renderers gles gles3
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ LAYOUT_EQUIRECT180
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ HIGH_QUALITY
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USING_DEFAULT_TEXTURE
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+ precision mediump float;
+
+ #ifdef VERTEX
+
+#include "UnityCG.glslinc"
+#if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+#endif
+#define SHADERLAB_GLSL
+#include "AVProVideo.cginc"
+
+
+ INLINE bool Android_IsStereoEyeLeft()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ return (eyeIndex == 0);
+ #else
+ return IsStereoEyeLeft();
+ #endif
+ }
+
+
+#if defined(HIGH_QUALITY)
+ varying vec3 texNormal;
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ varying vec4 texScaleOffset;
+ #endif
+#else
+ varying vec3 texVal;
+ uniform vec4 _MainTex_ST;
+ uniform mat4 _MainTex_Xfrm;
+#endif
+#if defined(STEREO_DEBUG)
+ varying vec4 tint;
+#endif
+
+ /// @fix: explicit TRANSFORM_TEX(); Unity's preprocessor chokes when attempting to use the TRANSFORM_TEX() macro in UnityCG.glslinc
+ /// (as of Unity 4.5.0f6; issue dates back to 2011 or earlier: http://forum.unity3d.com/threads/glsl-transform_tex-and-tiling.93756/)
+ vec2 transformTex(vec2 texCoord, vec4 texST)
+ {
+ return (texCoord * texST.xy + texST.zw);
+ }
+
+ void main()
+ {
+#if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ mat4 vpMatrix = GetStereoMatrixVP(eyeIndex);
+ gl_Position = vpMatrix * unity_ObjectToWorld * gl_Vertex;
+#else
+ gl_Position = XFormObjectToClip(gl_Vertex);
+#endif
+
+#if defined(HIGH_QUALITY)
+ texNormal = normalize(gl_Normal.xyz);
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ texScaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+ #endif
+#else
+ texVal.xy = gl_MultiTexCoord0.xy;
+ texVal.xy = transformTex(gl_MultiTexCoord0.xy, _MainTex_ST);
+ texVal.x = 1.0 - texVal.x;
+#if defined(LAYOUT_EQUIRECT180)
+ texVal.x = ((texVal.x - 0.5) * 2.0) + 0.5;
+
+ // Set value for clipping if UV area is behind viewer
+ texVal.z = (gl_MultiTexCoord0.x > 0.25 && gl_MultiTexCoord0.x < 0.75) ? 1.0 : -1.0;
+ #endif
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ texVal.xy = (_MainTex_Xfrm * vec4(texVal.x, texVal.y, 0.0, 1.0)).xy;
+
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ vec4 scaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+
+ texVal.xy *= scaleOffset.xy;
+ texVal.xy += scaleOffset.zw;
+ #elif defined(STEREO_CUSTOM_UV)
+ if(!Android_IsStereoEyeLeft())
+ {
+ texVal.xy= transformTex(gl_MultiTexCoord1.xy, _MainTex_ST);
+ texVal.xy = vec2(1.0, 1.0) - texVal.xy;
+ }
+ #endif
+#endif
+
+#if defined(STEREO_DEBUG)
+ tint = GetStereoDebugTint(Android_IsStereoEyeLeft());
+#endif
+ }
+ #endif
+
+ #ifdef FRAGMENT
+
+#if defined(HIGH_QUALITY)
+ #if defined (GL_FRAGMENT_PRECISION_HIGH)
+ precision highp float;
+ #endif
+ varying vec3 texNormal;
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ varying vec4 texScaleOffset;
+ #endif
+ uniform mat4 _MainTex_Xfrm;
+#else
+ varying vec3 texVal;
+#endif
+#if defined(STEREO_DEBUG)
+ varying vec4 tint;
+#endif
+
+#if defined(APPLY_GAMMA)
+ vec3 GammaToLinear(vec3 col)
+ {
+ return col * (col * (col * 0.305306011 + 0.682171111) + 0.012522878);
+ }
+#endif
+
+#if defined(HIGH_QUALITY)
+ vec2 NormalToEquiRect(vec3 n)
+ {
+ const float M_1_PI = 0.31830988618379067153776752674503; // 1.0/PI
+ const float M_1_2PI = 0.15915494309189533576888376337251; // 2.0/PI
+ vec2 uv;
+ uv.x = 0.5 - atan(n.z, n.x) * M_1_2PI;
+ uv.y = 0.5 - asin(-n.y) * M_1_PI;
+ return uv;
+ }
+
+ /// @fix: explicit TRANSFORM_TEX(); Unity's preprocessor chokes when attempting to use the TRANSFORM_TEX() macro in UnityCG.glslinc
+ /// (as of Unity 4.5.0f6; issue dates back to 2011 or earlier: http://forum.unity3d.com/threads/glsl-transform_tex-and-tiling.93756/)
+ vec2 transformTex(vec2 texCoord, vec4 texST)
+ {
+ return (texCoord * texST.xy + texST.zw);
+ }
+
+ uniform vec4 _MainTex_ST;
+#endif
+
+ uniform vec4 _Color;
+#if defined(USING_DEFAULT_TEXTURE)
+ uniform sampler2D _MainTex;
+#else
+ uniform samplerExternalOES _MainTex;
+#endif
+
+ void main()
+ {
+ vec2 uv;
+
+#if defined(HIGH_QUALITY)
+ vec3 n = normalize(texNormal);
+ #if defined(LAYOUT_EQUIRECT180)
+ if( n.z > 0.0001 )
+ {
+ // Clip pixels on the back of the sphere
+ discard;
+ }
+ #endif
+
+ uv = NormalToEquiRect(n);
+ uv.x += 0.75;
+ uv.x = mod(uv.x, 1.0);
+ uv = transformTex(uv, _MainTex_ST);
+
+ #if defined(LAYOUT_EQUIRECT180)
+ uv.x = ((uv.x - 0.5) * 2.0) + 0.5;
+ #endif
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ uv.xy = (_MainTex_Xfrm * vec4(uv.x, uv.y, 0.0, 1.0)).xy;
+
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ uv.xy *= texScaleOffset.xy;
+ uv.xy += texScaleOffset.zw;
+ #endif
+#else
+ uv = texVal.xy;
+ #if defined(LAYOUT_EQUIRECT180)
+ if( texVal.z < -0.0001 )
+ {
+ // Clip pixels on the back of the sphere
+ discard;
+ }
+ #endif
+#endif
+
+ vec4 col = vec4(1.0, 1.0, 0.0, 1.0);
+#if defined(SHADER_API_GLES) || defined(SHADER_API_GLES3)
+ #if __VERSION__ < 300
+ col = texture2D(_MainTex, uv);
+ #else
+ col = texture(_MainTex, uv);
+ #endif
+#endif
+ col *= _Color;
+
+#if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+#endif
+
+#if defined(STEREO_DEBUG)
+ col *= tint;
+#endif
+
+ gl_FragColor = col;
+ }
+ #endif
+
+ ENDGLSL
+ }
+ }
+
+ Fallback "AVProVideo/VR/InsideSphere Unlit (stereo+fog)"
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-AndroidOES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-AndroidOES.shader.meta
new file mode 100755
index 0000000..c556a3f
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-AndroidOES.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: a22a9f37cda6a3b48be178ec57376024
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-StereoUV.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-StereoUV.shader
new file mode 100755
index 0000000..11efea4
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-StereoUV.shader
@@ -0,0 +1,104 @@
+Shader "AVProVideo/VR/InsideSphere Unlit (stereo+fog) Stereo UV"
+{
+ Properties
+ {
+ _MainTex ("Texture", 2D) = "black" {}
+
+ [Toggle(STEREO_DEBUG)] _StereoDebug ("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" "IgnoreProjector" = "True" "Queue" = "Background" }
+ ZWrite On
+ //ZTest Always
+ Cull Front
+ Lighting Off
+
+ Pass
+ {
+ CGPROGRAM
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+ //#pragma target 3.0
+ #pragma vertex vert
+ #pragma fragment frag
+
+ //#define STEREO_DEBUG 1
+ //#define HIGH_QUALITY 1
+
+ #pragma multi_compile_fog
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ APPLY_GAMMA
+
+ struct appdata
+ {
+ float4 vertex : POSITION; // vertex position
+ float2 uv : TEXCOORD0; // texture coordinate 1
+ float2 uv2 : TEXCOORD1; // texture coordinate 2
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION; // clip space position
+ float2 uv : TEXCOORD0; // texture coordinate
+
+ UNITY_FOG_COORDS(1)
+
+#if STEREO_DEBUG
+ float4 tint : COLOR;
+#endif
+ };
+
+ uniform sampler2D _MainTex;
+ uniform float4 _MainTex_ST;
+
+ v2f vert(appdata v)
+ {
+ v2f o;
+ o.vertex = XFormObjectToClip(v.vertex);
+
+ if (IsStereoEyeLeft())
+ {
+ o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
+ o.uv.xy = float2(1.0 - o.uv.x, o.uv.y);
+ }
+ else
+ {
+ o.uv.xy = TRANSFORM_TEX(v.uv2, _MainTex);
+ o.uv.xy = float2(1.0 - o.uv.x, o.uv.y);
+ }
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+
+ UNITY_TRANSFER_FOG(o, o.vertex);
+
+ return o;
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ float2 uv;
+ uv = i.uv;
+
+ fixed4 col = tex2D(_MainTex, uv);
+
+#if APPLY_GAMMA
+ col.rgb = GammaToLinear(col.rgb);
+#endif
+
+#if STEREO_DEBUG
+ col *= i.tint;
+#endif
+
+ UNITY_APPLY_FOG(i.fogCoord, col);
+
+ return fixed4(col.rgb, 1.0);
+ }
+ ENDCG
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-StereoUV.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-StereoUV.shader.meta
new file mode 100755
index 0000000..e58d3ec
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-StereoUV.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 08ccc6021f136814494572dcad0c489d
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent-AndroidOES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent-AndroidOES.shader
new file mode 100755
index 0000000..bef226a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent-AndroidOES.shader
@@ -0,0 +1,334 @@
+Shader "AVProVideo/VR/InsideSphere Unlit Transparent (stereo+color+alpha) - Android OES ONLY"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB)", 2D) = "black" {}
+ _ChromaTex("Chroma", 2D) = "white" {} // For fallback shader
+ _Color("Color", Color) = (0.0, 1.0, 0.0, 1.0)
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye("Force Eye Mode", Float) = 0
+ [KeywordEnum(None, EquiRect180)] Layout("Layout", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(HIGH_QUALITY)] _HighQuality("High Quality", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ _EdgeFeather("Edge Feather", Range (0, 1)) = 0.02
+ }
+ SubShader
+ {
+ Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
+ Pass
+ {
+ ZWrite On
+ Blend SrcAlpha OneMinusSrcAlpha
+ Cull Front
+ Lighting Off
+
+ GLSLPROGRAM
+
+ #pragma only_renderers gles gles3
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ LAYOUT_EQUIRECT180
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ HIGH_QUALITY
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USING_DEFAULT_TEXTURE
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+ precision mediump float;
+
+#include "UnityCG.glslinc"
+#if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+#endif
+#define SHADERLAB_GLSL
+#include "AVProVideo.cginc"
+
+ #ifdef VERTEX
+
+ INLINE bool Android_IsStereoEyeLeft()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ return (eyeIndex == 0);
+ #else
+ return IsStereoEyeLeft();
+ #endif
+ }
+
+#if defined(HIGH_QUALITY)
+ varying vec3 texNormal;
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ varying vec4 texScaleOffset;
+ #endif
+#else
+ varying vec3 texVal;
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ varying vec2 alphaPackOffset;
+ #endif
+ uniform vec4 _MainTex_ST;
+ uniform vec4 _MainTex_TexelSize;
+ uniform mat4 _MainTex_Xfrm;
+#endif
+#if defined(STEREO_DEBUG)
+ varying vec4 tint;
+#endif
+
+
+ /// @fix: explicit TRANSFORM_TEX(); Unity's preprocessor chokes when attempting to use the TRANSFORM_TEX() macro in UnityCG.glslinc
+ /// (as of Unity 4.5.0f6; issue dates back to 2011 or earlier: http://forum.unity3d.com/threads/glsl-transform_tex-and-tiling.93756/)
+ vec2 transformTex(vec2 texCoord, vec4 texST)
+ {
+ return (texCoord * texST.xy + texST.zw);
+ }
+
+ void main()
+ {
+#if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ mat4 vpMatrix = GetStereoMatrixVP(eyeIndex);
+ gl_Position = vpMatrix * unity_ObjectToWorld * gl_Vertex;
+#else
+ gl_Position = XFormObjectToClip(gl_Vertex);
+#endif
+
+#if defined(HIGH_QUALITY)
+ texNormal = normalize(gl_Normal.xyz);
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ texScaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+ #endif
+#else
+ texVal.xy = gl_MultiTexCoord0.xy;
+ texVal.xy = transformTex(gl_MultiTexCoord0.xy, _MainTex_ST);
+ texVal.x = 1.0 - texVal.x;
+ #if defined(LAYOUT_EQUIRECT180)
+ texVal.x = ((texVal.x - 0.5) * 2.0) + 0.5;
+
+ // Set value for clipping if UV area is behind viewer
+ texVal.z = (gl_MultiTexCoord0.x > 0.25 && gl_MultiTexCoord0.x < 0.75) ? 1.0 : -1.0;
+ #else
+ texVal.z = 0.0;
+ #endif
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ texVal.xy = (_MainTex_Xfrm * vec4(texVal.x, texVal.y, 0.0, 1.0)).xy;
+
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ vec4 scaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+
+ texVal.xy *= scaleOffset.xy;
+ texVal.xy += scaleOffset.zw;
+ #elif defined(STEREO_CUSTOM_UV)
+ if(!Android_IsStereoEyeLeft())
+ {
+ texVal.xy= transformTex(gl_MultiTexCoord1.xy, _MainTex_ST);
+ texVal.xy = vec2(1.0, 1.0) - texVal.xy;
+ }
+ #endif
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ vec4 alphaOffset = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, texVal.xy, _MainTex_ST.y < 0.0);
+ #if defined(ALPHAPACK_TOP_BOTTOM)
+ alphaOffset.yw = alphaOffset.wy;
+ #endif
+
+ texVal.xy = alphaOffset.xy;
+ alphaPackOffset = alphaOffset.zw;
+ #endif
+#endif
+
+#if defined(STEREO_DEBUG)
+ tint = GetStereoDebugTint(Android_IsStereoEyeLeft());
+#endif
+ }
+ #endif
+
+ #ifdef FRAGMENT
+
+#if defined(HIGH_QUALITY)
+ #if defined (GL_FRAGMENT_PRECISION_HIGH)
+ precision highp float;
+ #endif
+ varying vec3 texNormal;
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ varying vec4 texScaleOffset;
+ #endif
+ uniform mat4 _MainTex_Xfrm;
+#else
+ varying vec3 texVal;
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ varying vec2 alphaPackOffset;
+ #endif
+#endif
+ uniform float _EdgeFeather;
+#if defined(STEREO_DEBUG)
+ varying vec4 tint;
+#endif
+
+#if defined(HIGH_QUALITY)
+ vec2 NormalToEquiRect(vec3 n)
+ {
+ const float M_1_PI = 0.31830988618379067153776752674503; // 1.0/PI
+ const float M_1_2PI = 0.15915494309189533576888376337251; // 2.0/PI
+ vec2 uv;
+ uv.x = 0.5 - atan(n.z, n.x) * M_1_2PI;
+ uv.y = 0.5 - asin(-n.y) * M_1_PI;
+ return uv;
+ }
+
+ /// @fix: explicit TRANSFORM_TEX(); Unity's preprocessor chokes when attempting to use the TRANSFORM_TEX() macro in UnityCG.glslinc
+ /// (as of Unity 4.5.0f6; issue dates back to 2011 or earlier: http://forum.unity3d.com/threads/glsl-transform_tex-and-tiling.93756/)
+ vec2 transformTex(vec2 texCoord, vec4 texST)
+ {
+ return (texCoord * texST.xy + texST.zw);
+ }
+
+ uniform vec4 _MainTex_ST;
+ uniform vec4 _MainTex_TexelSize;
+#endif
+
+ uniform vec4 _Color;
+#if defined(USING_DEFAULT_TEXTURE)
+ uniform sampler2D _MainTex;
+#else
+ uniform samplerExternalOES _MainTex;
+#endif
+
+ void main()
+ {
+ vec4 uv = vec4(0.0, 0.0, 0.0, 0.0);
+
+#if defined(HIGH_QUALITY)
+ vec3 n = normalize(texNormal);
+ #if defined(LAYOUT_EQUIRECT180)
+ if( n.z > 0.0001 )
+ {
+ // Clip pixels on the back of the sphere
+ discard;
+ }
+ #endif
+
+ uv.xy = NormalToEquiRect(n);
+ uv.x += 0.75;
+ uv.x = mod(uv.x, 1.0);
+ uv.xy = transformTex(uv.xy, _MainTex_ST);
+
+ #if defined(LAYOUT_EQUIRECT180)
+ uv.x = ((uv.x - 0.5) * 2.0) + 0.5;
+ #endif
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ uv.xy = (_MainTex_Xfrm * vec4(uv.x, uv.y, 0.0, 1.0)).xy;
+
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ uv.xy *= texScaleOffset.xy;
+ uv.xy += texScaleOffset.zw;
+ #endif
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, uv.xy, _MainTex_ST.y < 0.0);
+ #if defined(ALPHAPACK_TOP_BOTTOM)
+ uv.yw = uv.wy;
+ #endif
+ #endif
+#else
+ uv.xy = texVal.xy;
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ uv.zw = alphaPackOffset;
+ #endif
+ #if defined(LAYOUT_EQUIRECT180)
+ if( texVal.z < -0.0001 )
+ {
+ // Clip pixels on the back of the sphere
+ discard;
+ }
+ #endif
+#endif
+
+ vec4 col = vec4(1.0, 1.0, 0.0, 1.0);
+#if defined(SHADER_API_GLES) || defined(SHADER_API_GLES3)
+ #if __VERSION__ < 300
+ col = texture2D(_MainTex, uv.xy);
+ #else
+ col = texture(_MainTex, uv.xy);
+ #endif
+#endif
+ col *= _Color;
+
+#if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+#endif
+
+#if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ #if defined(SHADER_API_GLES) || defined(SHADER_API_GLES3)
+ #if __VERSION__ < 300
+ vec3 rgb = texture2D(_MainTex, uv.zw).rgb;
+ #else
+ vec3 rgb = texture(_MainTex, uv.zw).rgb;
+ #endif
+ col.a = (rgb.r + rgb.g + rgb.b) / 3.0;
+ #else
+ col.a = 1.0;
+ #endif
+#endif
+
+#if defined(STEREO_DEBUG)
+ col *= tint;
+#endif
+
+#if defined(LAYOUT_EQUIRECT180)
+ // Apply edge feathering based on UV mapping - this is useful if you're using a hemisphere mesh for 180 degree video and want to have soft edges
+ if (_EdgeFeather > 0.0)
+ {
+ vec4 featherDirection = vec4(0.0, 0.0, 1.0, 1.0);
+
+#if defined(STEREO_TOP_BOTTOM)
+ if (uv.y > 0.5)
+ {
+ featherDirection.y = 0.5;
+ }
+ else
+ {
+ featherDirection.w = 0.5;
+ }
+#endif
+
+#if defined(STEREO_LEFT_RIGHT)
+ if (uv.x > 0.5)
+ {
+ featherDirection.x = 0.5;
+ }
+ else
+ {
+ featherDirection.z = 0.5;
+ }
+#endif
+
+#if defined(ALPHAPACK_TOP_BOTTOM)
+ featherDirection.w *= 0.5;
+#endif
+
+#if defined(ALPHAPACK_LEFT_RIGHT)
+ featherDirection.z *= 0.5;
+#endif
+
+ float d = min(uv.x - featherDirection.x, min((uv.y - featherDirection.y), min(featherDirection.z - uv.x, featherDirection.w - uv.y)));
+ float a = smoothstep(0.0, _EdgeFeather, d);
+ col.a *= a;
+ }
+#endif
+
+ gl_FragColor = col;
+ }
+ #endif
+
+ ENDGLSL
+ }
+ }
+
+ Fallback "AVProVideo/VR/InsideSphere Unlit Transparent (stereo+color+fog+alpha)"
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent-AndroidOES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent-AndroidOES.shader.meta
new file mode 100755
index 0000000..9b451bb
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent-AndroidOES.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: d077c188d5d1c7c4f82531e47eb896a9
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent.shader
new file mode 100755
index 0000000..548b4f1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent.shader
@@ -0,0 +1,265 @@
+Shader "AVProVideo/VR/InsideSphere Unlit Transparent (stereo+color+fog+alpha)"
+{
+ Properties
+ {
+ _MainTex ("Texture", 2D) = "black" {}
+ _ChromaTex("Chroma", 2D) = "white" {}
+ _Color("Main Color", Color) = (1,1,1,1)
+
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo ("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug ("Stereo Debug Tinting", Float) = 0
+ [KeywordEnum(None, EquiRect180)] Layout("Layout", Float) = 0
+ [Toggle(HIGH_QUALITY)] _HighQuality ("High Quality", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ _EdgeFeather("Edge Feather", Range (0, 1)) = 0.02
+ }
+ SubShader
+ {
+ Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
+ ZWrite On
+ //ZTest Always
+ Blend SrcAlpha OneMinusSrcAlpha
+ Cull Front
+ Lighting Off
+
+ Pass
+ {
+ CGPROGRAM
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+#if HIGH_QUALITY || APPLY_GAMMA
+ #pragma target 3.0
+#endif
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #pragma multi_compile_fog
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ HIGH_QUALITY
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+ #pragma multi_compile __ LAYOUT_EQUIRECT180
+
+ struct appdata
+ {
+ float4 vertex : POSITION; // vertex position
+#if HIGH_QUALITY
+ float3 normal : NORMAL;
+#else
+ float2 uv : TEXCOORD0; // texture coordinate
+ #if STEREO_CUSTOM_UV
+ float2 uv2 : TEXCOORD1; // Custom uv set for right eye (left eye is in TEXCOORD0)
+ #endif
+#endif
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+#endif
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION; // clip space position
+#if HIGH_QUALITY
+ float3 normal : TEXCOORD0;
+
+ #if STEREO_TOP_BOTTOM || STEREO_LEFT_RIGHT
+ float4 scaleOffset : TEXCOORD1; // texture coordinate
+ UNITY_FOG_COORDS(2)
+ #else
+ UNITY_FOG_COORDS(1)
+ #endif
+#else
+ float4 uv : TEXCOORD0; // texture coordinate
+ UNITY_FOG_COORDS(1)
+#endif
+
+#if STEREO_DEBUG
+ float4 tint : COLOR;
+#endif
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_OUTPUT_STEREO
+#endif
+ };
+
+ uniform sampler2D _MainTex;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform float4 _MainTex_ST;
+ uniform float4 _MainTex_TexelSize;
+ uniform fixed4 _Color;
+ uniform float _EdgeFeather;
+
+ v2f vert (appdata v)
+ {
+ v2f o;
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_SETUP_INSTANCE_ID(v); // calculates and sets the built-n unity_StereoEyeIndex and unity_InstanceID Unity shader variables to the correct values based on which eye the GPU is currently rendering
+ UNITY_INITIALIZE_OUTPUT(v2f, o); // initializes all v2f values to 0
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); // tells the GPU which eye in the texture array it should render to
+#endif
+
+ o.vertex = XFormObjectToClip(v.vertex);
+#if !HIGH_QUALITY
+ o.uv.zw = 0.0;
+ o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
+ #if LAYOUT_EQUIRECT180
+ o.uv.x = ((o.uv.x - 0.5) * 2.0) + 0.5;
+ // Set value for clipping if UV area is behind viewer
+ o.uv.z = -1.0;
+ if (v.uv.x > 0.25 && v.uv.x < 0.75)
+ {
+ o.uv.z = 1.0;
+ }
+ #endif
+ o.uv.xy = float2(1.0-o.uv.x, o.uv.y);
+#endif
+
+#if STEREO_TOP_BOTTOM || STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+
+ #if !HIGH_QUALITY
+ o.uv.xy *= scaleOffset.xy;
+ o.uv.xy += scaleOffset.zw;
+ #else
+ o.scaleOffset = scaleOffset;
+ #endif
+#elif STEREO_CUSTOM_UV && !HIGH_QUALITY
+ if (!IsStereoEyeLeft())
+ {
+ o.uv.xy = TRANSFORM_TEX(v.uv2, _MainTex);
+ o.uv.xy = float2(1.0 - o.uv.x, o.uv.y);
+ }
+#endif
+
+#if !HIGH_QUALITY
+ #if ALPHAPACK_TOP_BOTTOM || ALPHAPACK_LEFT_RIGHT
+ o.uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, o.uv.xy, _MainTex_ST.y > 0.0);
+ #endif
+#endif
+
+#if HIGH_QUALITY
+ o.normal = v.normal;
+#endif
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+
+ UNITY_TRANSFER_FOG(o, o.vertex);
+ return o;
+ }
+
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ float4 uv = 0;
+#if HIGH_QUALITY
+ float3 n = normalize(i.normal);
+ #if LAYOUT_EQUIRECT180
+ clip(-n.z); // Clip pixels on the back of the sphere
+ #endif
+
+ float M_1_PI = 1.0 / 3.1415926535897932384626433832795;
+ float M_1_2PI = 1.0 / 6.283185307179586476925286766559;
+ uv.x = 0.5 - atan2(n.z, n.x) * M_1_2PI;
+ uv.y = 0.5 - asin(-n.y) * M_1_PI;
+ uv.x += 0.75;
+ uv.x = fmod(uv.x, 1.0);
+ //uv.x = uv.x % 1.0;
+ uv.xy = TRANSFORM_TEX(uv, _MainTex);
+ #if LAYOUT_EQUIRECT180
+ uv.x = ((uv.x - 0.5) * 2.0) + 0.5;
+ #endif
+ #if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ uv.xy *= i.scaleOffset.xy;
+ uv.xy += i.scaleOffset.zw;
+ #endif
+ #if ALPHAPACK_TOP_BOTTOM | ALPHAPACK_LEFT_RIGHT
+ uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, uv.xy, _MainTex_ST.y < 0.0);
+ #endif
+#else
+ uv = i.uv;
+ #if LAYOUT_EQUIRECT180
+ clip(i.uv.z); // Clip pixels on the back of the sphere
+ #endif
+#endif
+
+ fixed4 col;
+#if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, uv.xy, _YpCbCrTransform);
+#else
+ col = SampleRGBA(_MainTex, uv.xy);
+#endif
+
+#if ALPHAPACK_TOP_BOTTOM | ALPHAPACK_LEFT_RIGHT
+ col.a = SamplePackedAlpha(_MainTex, uv.zw);
+#endif
+
+#if STEREO_DEBUG
+ col *= i.tint;
+#endif
+
+ col *= _Color;
+
+ UNITY_APPLY_FOG(i.fogCoord, col);
+
+#if LAYOUT_EQUIRECT180
+ // Apply edge feathering based on UV mapping - this is useful if you're using a hemisphere mesh for 180 degree video and want to have soft edges
+ if (_EdgeFeather > 0.0)
+ {
+ float4 featherDirection = float4(0.0, 0.0, 1.0, 1.0);
+
+#if STEREO_TOP_BOTTOM
+ if (uv.y > 0.5)
+ {
+ featherDirection.y = 0.5;
+ }
+ else
+ {
+ featherDirection.w = 0.5;
+ }
+#endif
+
+#if STEREO_LEFT_RIGHT
+ if (uv.x > 0.5)
+ {
+ featherDirection.x = 0.5;
+ }
+ else
+ {
+ featherDirection.z = 0.5;
+ }
+#endif
+
+
+#if ALPHAPACK_TOP_BOTTOM
+ featherDirection.w *= 0.5;
+#endif
+
+#if ALPHAPACK_LEFT_RIGHT
+ featherDirection.z *= 0.5;
+#endif
+
+ float d = min(uv.x - featherDirection.x, min((uv.y - featherDirection.y), min(featherDirection.z - uv.x, featherDirection.w - uv.y)));
+ float a = smoothstep(0.0, _EdgeFeather, d);
+ col.a *= a;
+ }
+#endif
+
+ return col;
+
+ }
+ ENDCG
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent.shader.meta
new file mode 100755
index 0000000..bc61466
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere-Transparent.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 867ec56bd96e5504a95f991314cd5706
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere.shader
new file mode 100755
index 0000000..3eabb0e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere.shader
@@ -0,0 +1,191 @@
+Shader "AVProVideo/VR/InsideSphere Unlit (stereo+fog)"
+{
+ Properties
+ {
+ _MainTex ("Texture", 2D) = "black" {}
+ _ChromaTex("Chroma", 2D) = "white" {}
+
+ [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo ("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug ("Stereo Debug Tinting", Float) = 0
+ [KeywordEnum(None, EquiRect180)] Layout("Layout", Float) = 0
+ [Toggle(HIGH_QUALITY)] _HighQuality ("High Quality", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" "IgnoreProjector" = "True" "Queue" = "Background" }
+ ZWrite On
+ //ZTest Always
+ Cull Front
+ Lighting Off
+
+ Pass
+ {
+ CGPROGRAM
+ #include "UnityCG.cginc"
+ #include "AVProVideo.cginc"
+#if HIGH_QUALITY || APPLY_GAMMA
+ #pragma target 3.0
+#endif
+ #pragma vertex vert
+ #pragma fragment frag
+
+ //#define STEREO_DEBUG 1
+ //#define HIGH_QUALITY 1
+
+ #pragma multi_compile_fog
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ HIGH_QUALITY
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+ #pragma multi_compile __ LAYOUT_EQUIRECT180
+
+ struct appdata
+ {
+ float4 vertex : POSITION; // vertex position
+#if HIGH_QUALITY
+ float3 normal : NORMAL;
+#else
+ float2 uv : TEXCOORD0; // texture coordinate
+#if STEREO_CUSTOM_UV
+ float2 uv2 : TEXCOORD1; // Custom uv set for right eye (left eye is in TEXCOORD0)
+#endif
+#endif
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+#endif
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION; // clip space position
+#if HIGH_QUALITY
+ float3 normal : TEXCOORD0;
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset : TEXCOORD1; // texture coordinate
+ UNITY_FOG_COORDS(2)
+#else
+ UNITY_FOG_COORDS(1)
+#endif
+#else
+ float2 uv : TEXCOORD0; // texture coordinate
+ UNITY_FOG_COORDS(1)
+#endif
+
+#if STEREO_DEBUG
+ float4 tint : COLOR;
+#endif
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_VERTEX_OUTPUT_STEREO
+#endif
+ };
+
+ uniform sampler2D _MainTex;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform float4 _MainTex_ST;
+
+ v2f vert (appdata v)
+ {
+ v2f o;
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+ UNITY_SETUP_INSTANCE_ID(v); // calculates and sets the built-n unity_StereoEyeIndex and unity_InstanceID Unity shader variables to the correct values based on which eye the GPU is currently rendering
+ UNITY_INITIALIZE_OUTPUT(v2f, o); // initializes all v2f values to 0
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); // tells the GPU which eye in the texture array it should render to
+#endif
+
+ o.vertex = XFormObjectToClip(v.vertex);
+
+#if !HIGH_QUALITY
+ o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
+ #if LAYOUT_EQUIRECT180
+ o.uv.x = ((o.uv.x - 0.5) * 2.0) + 0.5;
+ #endif
+ o.uv.xy = float2(1.0-o.uv.x, o.uv.y);
+#endif
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+
+ #if !HIGH_QUALITY
+ o.uv.xy *= scaleOffset.xy;
+ o.uv.xy += scaleOffset.zw;
+ #else
+ o.scaleOffset = scaleOffset;
+ #endif
+#elif STEREO_CUSTOM_UV && !HIGH_QUALITY
+ if (!IsStereoEyeLeft())
+ {
+ o.uv.xy = TRANSFORM_TEX(v.uv2, _MainTex);
+ o.uv.xy = float2(1.0 - o.uv.x, o.uv.y);
+ }
+#endif
+
+#if HIGH_QUALITY
+ o.normal = v.normal;
+#endif
+
+ #if STEREO_DEBUG
+ o.tint = GetStereoDebugTint(IsStereoEyeLeft());
+ #endif
+
+ UNITY_TRANSFER_FOG(o, o.vertex);
+
+ return o;
+ }
+
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ float2 uv;
+
+#if HIGH_QUALITY
+ float3 n = normalize(i.normal);
+
+ float M_1_PI = 1.0 / 3.1415926535897932384626433832795;
+ float M_1_2PI = 1.0 / 6.283185307179586476925286766559;
+ uv.x = 0.5 - atan2(n.z, n.x) * M_1_2PI;
+ uv.y = 0.5 - asin(-n.y) * M_1_PI;
+ uv.x += 0.75;
+ uv.x = fmod(uv.x, 1.0);
+ //uv.x = uv.x % 1.0;
+ uv.xy = TRANSFORM_TEX(uv, _MainTex);
+ #if LAYOUT_EQUIRECT180
+ uv.x = ((uv.x - 0.5) * 2.0) + 0.5;
+ #endif
+ #if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ uv.xy *= i.scaleOffset.xy;
+ uv.xy += i.scaleOffset.zw;
+ #endif
+#else
+ uv = i.uv;
+#endif
+ fixed4 col;
+#if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, uv, _YpCbCrTransform);
+#else
+ col = SampleRGBA(_MainTex, uv);
+#endif
+
+#if STEREO_DEBUG
+ col *= i.tint;
+#endif
+
+ UNITY_APPLY_FOG(i.fogCoord, col);
+ return fixed4(col.rgb, 1.0);
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere.shader.meta
new file mode 100755
index 0000000..0753cd1
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo-VR-InsideSphere.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 46b84ca7ab6291e4fb6c57ac48d01e8f
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo.cginc b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo.cginc
new file mode 100755
index 0000000..444f867
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo.cginc
@@ -0,0 +1,442 @@
+//-----------------------------------------------------------------------------
+// Copyright 2015-2021 RenderHeads Ltd. All rights reserverd.
+//-----------------------------------------------------------------------------
+
+
+//#define AVPRO_CHEAP_GAMMA_CONVERSION
+
+#if defined (SHADERLAB_GLSL)
+ #define AVPRO_CHEAP_GAMMA_CONVERSION
+ #define INLINE
+ #define FIXED float
+ #define HALF float
+ #define HALF2 vec2
+ #define HALF3 vec3
+ #define HALF4 vec4
+ #define FLOAT2 vec2
+ #define FLOAT3 vec3
+ #define FLOAT4 vec4
+ #define FIXED4 vec4
+ #define FLOAT3X3 mat3
+ #define FLOAT4X4 mat4
+ #define LERP mix
+#else
+ #define INLINE inline
+ #define FIXED fixed
+ #define HALF half
+ #define HALF2 half2
+ #define HALF3 half3
+ #define HALF4 half4
+ #define FLOAT2 float2
+ #define FLOAT3 float3
+ #define FLOAT4 float4
+ #define FIXED4 fixed4
+ #define FLOAT3X3 float3x3
+ #define FLOAT4X4 float4x4
+ #define LERP lerp
+#endif
+
+// Specify this so Unity doesn't automatically update our shaders.
+#define UNITY_SHADER_NO_UPGRADE 1
+
+//#pragma multi_compile __ XR_USE_BUILT_IN_EYE_VARIABLE
+
+// We use this method so that when Unity automatically updates the shader from the old
+// mul(UNITY_MATRIX_MVP.. to UnityObjectToClipPos that it only changes in one place.
+INLINE FLOAT4 XFormObjectToClip(FLOAT4 vertex)
+{
+#if defined(SHADERLAB_GLSL)
+ return gl_ModelViewProjectionMatrix * vertex;
+#else
+ return UnityObjectToClipPos(vertex);
+#endif
+}
+
+uniform FLOAT3 _WorldCameraPosition;
+uniform FLOAT3 _WorldCameraRight;
+
+INLINE bool IsStereoEyeLeft()
+{
+#if defined(FORCEEYE_LEFT)
+ return true;
+#elif defined(FORCEEYE_RIGHT)
+ return false;
+//#elif defined(USING_STEREO_MATRICES) || defined(XR_USE_BUILT_IN_EYE_VARIABLE)
+#elif defined(USING_STEREO_MATRICES)
+ // Unity 5.4 has this new variable
+ return (unity_StereoEyeIndex == 0);
+#elif defined (UNITY_DECLARE_MULTIVIEW)
+ // OVR_multiview extension
+ return (UNITY_VIEWID == 0);
+#else
+ #if defined(SHADERLAB_GLSL) && defined(USING_URP)
+ // NOTE: Bug #1416: URP + OES
+ FLOAT3 renderCameraPos = FLOAT3( gl_ModelViewMatrixInverseTranspose[0][3], gl_ModelViewMatrixInverseTranspose[1][3], gl_ModelViewMatrixInverseTranspose[2][3] );
+ #elif defined(UNITY_MATRIX_I_V)
+ // NOTE: Bug #1165: _WorldSpaceCameraPos is not correct in multipass VR (when skybox is used) but UNITY_MATRIX_I_V seems to be
+ FLOAT3 renderCameraPos = UNITY_MATRIX_I_V._m03_m13_m23;
+ #else
+ FLOAT3 renderCameraPos = _WorldSpaceCameraPos.xyz;
+ #endif
+
+ float fL = distance(_WorldCameraPosition - _WorldCameraRight, renderCameraPos);
+ float fR = distance(_WorldCameraPosition + _WorldCameraRight, renderCameraPos);
+ return (fL < fR);
+#endif
+}
+
+#if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+FLOAT4 GetStereoScaleOffset(bool isLeftEye, bool isYFlipped)
+{
+ FLOAT2 scale = FLOAT2(1.0, 1.0);
+ FLOAT2 offset = FLOAT2(0.0, 0.0);
+
+ // Top-Bottom
+#if defined(STEREO_TOP_BOTTOM)
+
+ scale.y = 0.5;
+ offset.y = 0.0;
+
+ if (!isLeftEye)
+ {
+ offset.y = 0.5;
+ }
+
+#if !defined(SHADERLAB_GLSL)
+//#if !defined(UNITY_UV_STARTS_AT_TOP) // UNITY_UV_STARTS_AT_TOP is for directx
+ if (!isYFlipped)
+ {
+ // Currently this only runs for Android and Windows using DirectShow
+ offset.y = 0.5 - offset.y;
+ }
+//#endif
+#endif
+
+ // Left-Right
+#elif defined(STEREO_LEFT_RIGHT)
+
+ scale.x = 0.5;
+ offset.x = 0.0;
+ if (!isLeftEye)
+ {
+ offset.x = 0.5;
+ }
+
+#endif
+
+ return FLOAT4(scale, offset);
+}
+#endif
+
+#if defined(STEREO_DEBUG)
+INLINE FLOAT4 GetStereoDebugTint(bool isLeftEye)
+{
+ FLOAT4 tint = FLOAT4(1.0, 1.0, 1.0, 1.0);
+
+#if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT) || defined(STEREO_CUSTOM_UV)
+ FLOAT4 leftEyeColor = FLOAT4(0.0, 1.0, 0.0, 1.0); // green
+ FLOAT4 rightEyeColor = FLOAT4(1.0, 0.0, 0.0, 1.0); // red
+
+ if (isLeftEye)
+ {
+ tint = leftEyeColor;
+ }
+ else
+ {
+ tint = rightEyeColor;
+ }
+#endif
+
+#if defined(UNITY_UV_STARTS_AT_TOP)
+ //tint.b = 0.5;
+#endif
+/*#if defined(UNITY_SINGLE_PASS_STEREO) || defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_DECLARE_MULTIVIEW)
+ tint.b = 1.0;
+#endif*/
+
+ return tint;
+}
+#endif
+
+FLOAT2 ScaleZoomToFit(float targetWidth, float targetHeight, float sourceWidth, float sourceHeight)
+{
+#if defined(ALPHAPACK_TOP_BOTTOM)
+ sourceHeight *= 0.5;
+#elif defined(ALPHAPACK_LEFT_RIGHT)
+ sourceWidth *= 0.5;
+#endif
+ float targetAspect = targetHeight / targetWidth;
+ float sourceAspect = sourceHeight / sourceWidth;
+ FLOAT2 scale = FLOAT2(1.0, sourceAspect / targetAspect);
+ if (targetAspect < sourceAspect)
+ {
+ scale = FLOAT2(targetAspect / sourceAspect, 1.0);
+ }
+ return scale;
+}
+
+FLOAT4 OffsetAlphaPackingUV(FLOAT2 texelSize, FLOAT2 uv, bool flipVertical)
+{
+ FLOAT4 result = uv.xyxy;
+
+ // We don't want bilinear interpolation to cause bleeding
+ // when reading the pixels at the edge of the packed areas.
+ // So we shift the UV's by a fraction of a pixel so the edges don't get sampled.
+
+#if defined(ALPHAPACK_TOP_BOTTOM)
+ float offset = texelSize.y * 1.5;
+ result.y = LERP(0.0 + offset, 0.5 - offset, uv.y);
+ result.w = result.y + 0.5;
+
+ if (flipVertical)
+ {
+ // Flip vertically (and offset to put back in 0..1 range)
+ result.yw = 1.0 - result.yw;
+ result.yw = result.wy;
+ }
+ else
+ {
+#if !defined(UNITY_UV_STARTS_AT_TOP)
+ // For opengl we flip
+ result.yw = result.wy;
+#endif
+ }
+
+#elif defined(ALPHAPACK_LEFT_RIGHT)
+ float offset = texelSize.x * 1.5;
+ result.x = LERP(0.0 + offset, 0.5 - offset, uv.x);
+ result.z = result.x + 0.5;
+
+ if (flipVertical)
+ {
+ // Flip vertically (and offset to put back in 0..1 range)
+ result.yw = 1.0 - result.yw;
+ }
+
+#else
+
+ if (flipVertical)
+ {
+ // Flip vertically (and offset to put back in 0..1 range)
+ result.yw = 1.0 - result.yw;
+ }
+
+#endif
+
+ return result;
+}
+
+INLINE HALF3 GammaToLinear_ApproxPow(HALF3 col)
+{
+ #if defined (SHADERLAB_GLSL)
+ return pow(col, HALF3(2.2, 2.2, 2.2));
+ #else
+ return pow(col, HALF3(2.2h, 2.2h, 2.2h));
+ #endif
+}
+
+INLINE HALF3 LinearToGamma_ApproxPow(HALF3 col)
+{
+ #if defined (SHADERLAB_GLSL)
+ return pow(col, HALF3(1.0/2.2, 1.0/2.2, 1.0/2.2));
+ #else
+ return pow(col, HALF3(1.0h/2.2h, 1.0h/2.2h, 1.0h/2.2h));
+ #endif
+}
+
+// Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1
+// NOTE: This is about 4 instructions vs 10 instructions for the accurate version
+INLINE HALF3 GammaToLinear_ApproxFit(HALF3 col)
+{
+#if defined (SHADERLAB_GLSL)
+ HALF a = 0.305306011;
+ HALF b = 0.682171111;
+ HALF c = 0.012522878;
+#else
+ HALF a = 0.305306011h;
+ HALF b = 0.682171111h;
+ HALF c = 0.012522878h;
+#endif
+ return col * (col * (col * a + b) + c);
+}
+
+// Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1
+INLINE HALF3 LinearToGamma_ApproxFit(HALF3 col)
+{
+#if defined (SHADERLAB_GLSL)
+ HALF a = 0.416666667;
+ HALF b = 0.055;
+ HALF c = 0.0;
+ HALF d = 1.055;
+#else
+ HALF a = 0.416666667h;
+ HALF b = 0.055h;
+ HALF c = 0.0h;
+ HALF d = 1.055h;
+#endif
+ return max(d * pow(col, HALF3(a, a, a)) - b, c);
+}
+
+INLINE HALF3 GammaToLinear_Accurate(HALF3 col)
+{
+ if (col.r <= 0.04045)
+ col.r = col.r / 12.92;
+ else
+ col.r = pow((col.r + 0.055) / 1.055, 2.4);
+
+ if (col.g <= 0.04045)
+ col.g = col.g / 12.92;
+ else
+ col.g = pow((col.g + 0.055) / 1.055, 2.4);
+
+ if (col.b <= 0.04045)
+ col.b = col.b / 12.92;
+ else
+ col.b = pow((col.b + 0.055) / 1.055, 2.4);
+
+ // NOTE: We tried to optimise the above, but actually the compiler does a better job..
+ /*HALF3 a = col / 12.92;
+ HALF3 b = pow((col + 0.055) / 1.055, 2.4);
+ HALF3 c = step(col,0.04045);
+ col = LERP(b, a, c);*/
+
+ return col;
+}
+
+INLINE HALF3 LinearToGamma_Accurate(HALF3 col)
+{
+ if (col.r <= 0.0031308)
+ col.r = col.r * 12.92;
+ else
+ col.r = 1.055 * pow(col.r, 0.4166667) - 0.055;
+
+ if (col.g <= 0.0031308)
+ col.g = col.g * 12.92;
+ else
+ col.g = 1.055 * pow(col.g, 0.4166667) - 0.055;
+
+ if (col.b <= 0.0031308)
+ col.b = col.b * 12.92;
+ else
+ col.b = 1.055 * pow(col.b, 0.4166667) - 0.055;
+
+ return col;
+}
+
+// http://entropymine.com/imageworsener/srgbformula/
+INLINE HALF3 GammaToLinear(HALF3 col)
+{
+#if defined(AVPRO_CHEAP_GAMMA_CONVERSION)
+ return GammaToLinear_ApproxFit(col);
+#else
+ return GammaToLinear_Accurate(col);
+#endif
+}
+
+// http://entropymine.com/imageworsener/srgbformula/
+INLINE HALF3 LinearToGamma(HALF3 col)
+{
+#if defined(AVPRO_CHEAP_GAMMA_CONVERSION)
+ return LinearToGamma_ApproxFit(col);
+#else
+ return LinearToGamma_Accurate(col);
+#endif
+}
+
+INLINE FLOAT3 ConvertYpCbCrToRGB(FLOAT3 YpCbCr, FLOAT4X4 YpCbCrTransform)
+{
+#if defined(SHADERLAB_GLSL)
+ return clamp(FLOAT3X3(YpCbCrTransform) * (YpCbCr + YpCbCrTransform[3].xyz), 0.0, 1.0);
+#else
+ return saturate(mul((FLOAT3X3)YpCbCrTransform, YpCbCr + YpCbCrTransform[3].xyz));
+#endif
+}
+
+#if defined(SHADERLAB_GLSL)
+ #if __VERSION__ < 300
+ #define TEX_EXTERNAL(sampler, uv) texture2D(sampler, uv.xy);
+ #else
+ #define TEX_EXTERNAL(sampler, uv) texture(sampler, uv.xy)
+ #endif
+#endif
+
+INLINE HALF4 SampleRGBA(sampler2D tex, FLOAT2 uv)
+{
+#if defined(SHADERLAB_GLSL) // GLSL doesn't support tex2D, and Adreno GPU doesn't support passing sampler as a parameter, so just return if this is called
+ return HALF4(1.0, 1.0, 0.0, 1.0);
+#else
+ HALF4 rgba = tex2D(tex, uv);
+#if defined(APPLY_GAMMA)
+ rgba.rgb = GammaToLinear(rgba.rgb);
+#endif
+ return rgba;
+#endif
+}
+
+INLINE HALF4 SampleYpCbCr(sampler2D luma, sampler2D chroma, FLOAT2 uv, FLOAT4X4 YpCbCrTransform)
+{
+#if defined(SHADERLAB_GLSL) // GLSL doesn't support tex2D, and Adreno GPU doesn't support passing sampler as a parameter, so just return if this is called
+ return HALF4(1.0, 1.0, 0.0, 1.0);
+#else
+#if defined(SHADER_API_METAL) || defined(SHADER_API_GLES) || defined(SHADER_API_GLES3)
+ FLOAT3 YpCbCr = FLOAT3(tex2D(luma, uv).r, tex2D(chroma, uv).rg);
+#else
+ FLOAT3 YpCbCr = FLOAT3(tex2D(luma, uv).r, tex2D(chroma, uv).ra);
+#endif
+ HALF4 rgba = HALF4(ConvertYpCbCrToRGB(YpCbCr, YpCbCrTransform), 1.0);
+#if defined(APPLY_GAMMA)
+ rgba.rgb = GammaToLinear(rgba.rgb);
+#endif
+ return rgba;
+#endif
+}
+
+INLINE HALF SamplePackedAlpha(sampler2D tex, FLOAT2 uv)
+{
+#if defined(SHADERLAB_GLSL) // GLSL doesn't support tex2D, and Adreno GPU doesn't support passing sampler as a parameter, so just return if this is called
+ return 0.0;
+#else
+ HALF alpha;
+#if defined(USE_YPCBCR)
+ alpha = (tex2D(tex, uv).r - 0.0625) * (255.0 / 219.0);
+#else
+ HALF3 rgb = tex2D(tex, uv).rgb;
+#if defined(APPLY_GAMMA)
+ rgb = GammaToLinear(rgb);
+#endif
+ alpha = (rgb.r + rgb.g + rgb.b) / 3.0;
+#endif
+ return alpha;
+#endif
+}
+
+#if defined(USE_HSBC)
+INLINE HALF3 ApplyHue(HALF3 color, HALF hue)
+{
+ HALF angle = radians(hue);
+ HALF3 k = HALF3(0.57735, 0.57735, 0.57735);
+ HALF cosAngle = cos(angle);
+ //Rodrigues' rotation formula
+ return color * cosAngle + cross(k, color) * sin(angle) + k * dot(k, color) * (1.0 - cosAngle);
+}
+
+INLINE HALF3 ApplyHSBEffect(HALF3 color, FIXED4 hsbc)
+{
+ HALF hue = hsbc.r * 360.0;
+ HALF saturation = hsbc.g * 2.0;
+ HALF brightness = hsbc.b * 2.0 - 1.0;
+ HALF contrast = hsbc.a * 2.0;
+
+ HALF3 result = color;
+ result.rgb = ApplyHue(result, hue);
+ result.rgb = (result - 0.5) * contrast + 0.5 + brightness;
+
+ #if defined(SHADERLAB_GLSL)
+ result.rgb = LERP(vec3(Luminance(result)), result, saturation);
+ #else
+ result.rgb = LERP(Luminance(result), result, saturation);
+ #endif
+
+ return result;
+}
+#endif
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo.cginc.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo.cginc.meta
new file mode 100755
index 0000000..903ef78
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/AVProVideo.cginc.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 5bcf2893fead7a14a8c737d1bb6cdd09
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources.meta
new file mode 100755
index 0000000..22dac87
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6ed1c7be51e4ffc448c72fc7154ad955
+folderAsset: yes
+timeCreated: 1590346443
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-BlendFrames.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-BlendFrames.shader
new file mode 100755
index 0000000..eabf52d
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-BlendFrames.shader
@@ -0,0 +1,63 @@
+//-----------------------------------------------------------------------------
+// Copyright 2014-2017 RenderHeads Ltd. All rights reserved.
+//-----------------------------------------------------------------------------
+
+Shader "AVProVideo/Internal/BlendFrames"
+{
+ Properties
+ {
+ _MainTex("Before Texture", 2D) = "white" {}
+ _AfterTex("After Texture", 2D) = "white" {}
+ _t("t", Float) = 0.5
+ }
+
+ SubShader
+ {
+ Pass
+ {
+ ZTest Always Cull Off ZWrite Off
+ Fog{ Mode off }
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma exclude_renderers flash xbox360 ps3 gles
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ uniform sampler2D _MainTex;
+ uniform sampler2D _AfterTex;
+ uniform float _t;
+
+ struct v2f
+ {
+ float4 pos : POSITION;
+ float4 uv : TEXCOORD0;
+ };
+
+ v2f vert(appdata_img v)
+ {
+ v2f o;
+ o.uv = float4(0.0, 0.0, 0.0, 0.0);
+ o.pos = XFormObjectToClip(v.vertex);
+
+ o.uv.xy = v.texcoord.xy;
+ return o;
+ }
+
+ float4 frag(v2f i) : COLOR
+ {
+ float4 before = tex2D(_MainTex, i.uv.xy);
+ float4 after = tex2D(_AfterTex, i.uv.xy);
+
+ float4 result = ((1.0 -_t) * before) + (_t * after);
+
+ return result;
+ }
+
+ ENDCG
+ }
+ }
+
+ FallBack Off
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-BlendFrames.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-BlendFrames.shader.meta
new file mode 100755
index 0000000..6d4dad6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-BlendFrames.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 8ebaafdbf44b0b9489f20bc27374d187
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Blit.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Blit.shader
new file mode 100755
index 0000000..9b67d11
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Blit.shader
@@ -0,0 +1,65 @@
+Shader "AVProVideo/Internal/Blit"
+{
+ Properties
+ {
+ _SrcTex("Texture", 2D) = "white" { }
+ }
+ SubShader
+ {
+ Tags
+ {
+ "IgnoreProjector" = "True"
+ "PreviewType" = "Plane"
+ }
+
+ Lighting Off
+ Cull Off
+ ZWrite Off
+ ZTest Always
+
+ Pass
+ {
+ Name "BLIT"
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ float2 uv : TEXCOORD0;
+ };
+
+ uniform sampler2D _SrcTex;
+ uniform float4 _SrcTex_ST;
+
+ v2f vert(appdata_t v)
+ {
+ v2f o;
+ o.vertex = UnityObjectToClipPos(v.vertex);
+ o.uv = TRANSFORM_TEX(v.texcoord, _SrcTex);
+ return o;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ if (i.uv.x < 0.0f || i.uv.y < 0.0f || i.uv.x > 1.0f || i.uv.y > 1.0f)
+ return half4(0.0f, 0.0f, 0.0f, 0.0f);
+ return SampleRGBA(_SrcTex, i.uv);
+ }
+ ENDCG
+ }
+ }
+
+ Fallback off
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Blit.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Blit.shader.meta
new file mode 100755
index 0000000..3293f4b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Blit.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: cc82d5ef8f3834ab78b36ba88e35ae65
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ preprocessorOverride: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-IMGUI-Transparent.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-IMGUI-Transparent.shader
new file mode 100755
index 0000000..fa80296
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-IMGUI-Transparent.shader
@@ -0,0 +1,88 @@
+Shader "AVProVideo/Internal/IMGUI/Texture Transparent"
+{
+ Properties
+ {
+ _MainTex("Texture", any) = "" {}
+ _ChromaTex("Chroma", any) = "" {}
+ _VertScale("Vertical Scale", Range(-1, 1)) = 1.0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags { "ForceSupported" = "True" "RenderType" = "Overlay" }
+
+ Lighting Off
+ Blend SrcAlpha OneMinusSrcAlpha
+ Cull Off
+ ZWrite Off
+ ZTest Always
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float4 uv : TEXCOORD0;
+ };
+
+ uniform sampler2D _MainTex;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform float4 _MainTex_ST;
+ uniform float4 _MainTex_TexelSize;
+ uniform float _VertScale;
+
+ v2f vert(appdata_t v)
+ {
+ v2f o;
+ o.vertex = XFormObjectToClip(v.vertex);
+ o.color = v.color;
+ o.uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, TRANSFORM_TEX(v.texcoord, _MainTex), _VertScale < 0.0);
+
+ return o;
+ }
+
+ fixed4 frag(v2f i) : SV_Target
+ {
+ fixed4 col;
+#if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, i.uv.xy, _YpCbCrTransform);
+#else
+ col = SampleRGBA(_MainTex, i.uv.xy);
+#endif
+
+#if ALPHAPACK_TOP_BOTTOM | ALPHAPACK_LEFT_RIGHT
+ col.a = SamplePackedAlpha(_MainTex, i.uv.zw);
+#endif
+ return col * i.color;
+ }
+ ENDCG
+ }
+ }
+
+ Fallback off
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-IMGUI-Transparent.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-IMGUI-Transparent.shader.meta
new file mode 100755
index 0000000..7d703b6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-IMGUI-Transparent.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: d1085d25f9ef09b4c91188f9f99f37a2
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Preview.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Preview.shader
new file mode 100755
index 0000000..3136589
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Preview.shader
@@ -0,0 +1,79 @@
+Shader "AVProVideo/Internal/Preview"
+{
+ Properties
+ {
+ _MainTex("Texture", any) = "" {}
+ }
+
+ SubShader
+ {
+ Tags { "ForceSupported" = "True" }
+
+ Blend SrcAlpha OneMinusSrcAlpha
+ Lighting Off
+ Cull Off
+ ZWrite Off
+ ZTest Always
+
+ Pass
+ {
+ Name "ALPHA BLEND"
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct v2f {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ float2 clipUV : TEXCOORD1;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ uniform sampler2D _MainTex;
+ uniform sampler2D _GUIClipTexture;
+ uniform bool _ManualTex2SRGB;
+ uniform float4 _MainTex_ST;
+ uniform fixed4 _Color;
+ uniform float4x4 unity_GUIClipTextureMatrix;
+
+ v2f vert (appdata_t v)
+ {
+ v2f o;
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+ o.vertex = UnityObjectToClipPos(v.vertex);
+ float3 eyePos = UnityObjectToViewPos(v.vertex);
+ o.clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0));
+ o.color = v.color;
+ o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+ return o;
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ fixed4 colTex = tex2D(_MainTex, i.texcoord);
+ if (_ManualTex2SRGB)
+ colTex.rgb = LinearToGamma(colTex.rgb);
+ fixed4 col = colTex * i.color;
+ col.a *= tex2D(_GUIClipTexture, i.clipUV).a;
+ return col;
+ }
+ ENDCG
+ }
+ }
+
+ Fallback off
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Preview.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Preview.shader.meta
new file mode 100755
index 0000000..af53dd2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Preview.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 1df272a1da1d6814eb2be42cad7516f2
+timeCreated: 1600887843
+licenseType: Pro
+ShaderImporter:
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Resolve.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Resolve.shader
new file mode 100755
index 0000000..13f5227
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Resolve.shader
@@ -0,0 +1,131 @@
+Shader "AVProVideo/Internal/Resolve"
+{
+ Properties
+ {
+ _MainTex("Texture", any) = "" { }
+ _ChromaTex("Chroma", any) = "" { }
+ _Color ("Tint", Color) = (1,1,1,1)
+ _VertScale("Vertical Scale", Range(-1, 1)) = 1.0
+
+ [Toggle(USE_HSBC)] _UseHSBC("Use HSBC", Float) = 0
+ _Hue("Hue", Range(0, 1.0)) = 0
+ _Saturation("Saturation", Range(0, 1.0)) = 0.5
+ _Brightness("Brightness", Range(0, 1.0)) = 0.5
+ _Contrast("Contrast", Range(0, 1.0)) = 0.5
+ _InvGamma("InvGamma", Range(0.0001, 10000.0)) = 1.0
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "IgnoreProjector" = "True"
+ "PreviewType" = "Plane"
+ }
+
+ Lighting Off
+ Cull Off
+ ZWrite Off
+ ZTest Always
+
+ Pass
+ {
+ Name "RESOLVE"
+
+ CGPROGRAM
+ #pragma exclude_renderers gles
+ #pragma vertex vert
+ #pragma fragment frag
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_YPCBCR
+ #pragma multi_compile __ USE_HSBC
+
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float4 uv : TEXCOORD0;
+ };
+
+ uniform sampler2D _MainTex;
+
+ #if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+ #endif
+
+ #if USE_HSBC
+ uniform fixed _Hue, _Saturation, _Brightness, _Contrast, _InvGamma;
+ #endif
+
+ uniform fixed4 _Color;
+ uniform float4 _MainTex_ST;
+ uniform float4 _MainTex_TexelSize;
+ uniform float4x4 _MainTex_Xfrm;
+ uniform float _VertScale;
+
+ v2f vert(appdata_t v)
+ {
+ v2f o;
+ o.vertex = XFormObjectToClip(v.vertex);
+ o.color = v.color * _Color;
+ o.uv.xy = mul(_MainTex_Xfrm, float4(v.texcoord, 0.0f, 1.0f)).xy;
+ o.uv.wz = 0.0;
+
+ #if STEREO_TOP_BOTTOM || STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+ o.uv.xy *= scaleOffset.xy;
+ o.uv.xy += scaleOffset.zw;
+ #endif
+
+ // NOTE: this always runs because it's also used to flip vertically
+ o.uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, o.uv.xy, _VertScale < 0.0);
+
+ return o;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ half4 col;
+ #if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, i.uv.xy, _YpCbCrTransform);
+ #else
+ col = SampleRGBA(_MainTex, i.uv.xy);
+ #endif
+
+ #if ALPHAPACK_TOP_BOTTOM || ALPHAPACK_LEFT_RIGHT
+ col.a = SamplePackedAlpha(_MainTex, i.uv.zw);
+ #endif
+
+ #if USE_HSBC
+ col.rgb = ApplyHSBEffect(col.rgb, fixed4(_Hue, _Saturation, _Brightness, _Contrast));
+ col.rgb = pow(col.rgb, _InvGamma);
+ #endif
+
+ return col * i.color;
+ }
+ ENDCG
+ }
+ }
+
+ Fallback off
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Resolve.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Resolve.shader.meta
new file mode 100755
index 0000000..d6d9f00
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Resolve.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 698a57138fc7d844da1f0cac92fa8e36
+timeCreated: 1600887843
+licenseType: Pro
+ShaderImporter:
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-ResolveOES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-ResolveOES.shader
new file mode 100755
index 0000000..6b1aef3
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-ResolveOES.shader
@@ -0,0 +1,156 @@
+Shader "AVProVideo/Internal/ResolveOES"
+{
+ Properties
+ {
+ _MainTex("Texture", any) = "" {}
+ _ChromaTex("Chroma", any) = "" {}
+ _Color ("Tint", Color) = (1,1,1,1)
+ _VertScale("Vertical Scale", Range(-1, 1)) = 1.0
+
+ [Toggle(USE_HSBC)] _UseHSBC("Use HSBC", Float) = 0
+ _Hue("Hue", Range(0, 1.0)) = 0
+ _Saturation("Saturation", Range(0, 1.0)) = 0.5
+ _Brightness("Brightness", Range(0, 1.0)) = 0.5
+ _Contrast("Contrast", Range(0, 1.0)) = 0.5
+ _InvGamma("InvGamma", Range(0.0001, 10000.0)) = 1.0
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "IgnoreProjector" = "True"
+ "PreviewType" = "Plane"
+ }
+
+ Lighting Off
+ Cull Off
+ ZWrite Off
+ ZTest Always
+
+ Pass
+ {
+ Name "RESOLVE-OES"
+
+ GLSLPROGRAM
+ #pragma only_renderers gles gles3
+
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USE_HSBC
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+
+ #include "UnityCG.glslinc"
+ #if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+ #endif
+ #define SHADERLAB_GLSL
+ #include "../AVProVideo.cginc"
+
+ #ifdef VERTEX
+
+ varying vec4 varTexCoord;
+ varying vec4 varColor;
+
+ uniform vec4 _Color;
+ uniform vec4 _MainTex_ST;
+ uniform vec4 _MainTex_TexelSize;
+ uniform mat4 _MainTex_Xfrm;
+ uniform float _VertScale;
+
+ INLINE bool Android_IsStereoEyeLeft()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ return (eyeIndex == 0);
+ #else
+ return IsStereoEyeLeft();
+ #endif
+ }
+
+ vec2 transformTex(vec4 texCoord, vec4 texST)
+ {
+ return (texCoord.xy * texST.xy + texST.zw);
+ }
+
+ void main()
+ {
+#if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ mat4 vpMatrix = GetStereoMatrixVP(eyeIndex);
+ gl_Position = vpMatrix * unity_ObjectToWorld * gl_Vertex;
+#else
+ gl_Position = XFormObjectToClip(gl_Vertex);
+#endif
+
+ varColor = gl_Color * _Color;
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ varTexCoord.xy = (_MainTex_Xfrm * vec4(gl_MultiTexCoord0.x, gl_MultiTexCoord0.y, 0.0, 1.0)).xy;
+ varTexCoord.zw = vec2(0.0, 0.0);
+
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ vec4 scaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+ varTexCoord.xy *= scaleOffset.xy;
+ varTexCoord.xy += scaleOffset.zw;
+ #endif
+
+ #if defined (ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ varTexCoord = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, varTexCoord.xy, false);
+ #if defined(ALPHAPACK_TOP_BOTTOM)
+ varTexCoord.yw = varTexCoord.wy;
+ #endif
+ #endif
+ }
+
+ #endif
+
+ #ifdef FRAGMENT
+
+ varying vec4 varTexCoord;
+ varying vec4 varColor;
+
+ uniform samplerExternalOES _MainTex;
+ #if defined(USE_HSBC)
+ uniform float _Hue, _Saturation, _Brightness, _Contrast, _InvGamma;
+ #endif
+
+ void main()
+ {
+ vec4 col = TEX_EXTERNAL(_MainTex, varTexCoord.xy);
+ #if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+ #endif
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ vec4 colAlpha = TEX_EXTERNAL(_MainTex, varTexCoord.zw);
+ col.a = (colAlpha.r + colAlpha.g + colAlpha.b) / 3.0;
+ #endif
+
+ #if defined(USE_HSBC)
+ col.rgb = ApplyHSBEffect(col.rgb, vec4(_Hue, _Saturation, _Brightness, _Contrast));
+ col.rgb = pow(col.rgb, vec3(_InvGamma));
+ #endif
+
+ gl_FragColor = col * varColor;
+ }
+
+ #endif
+
+ ENDGLSL
+ }
+ }
+
+ Fallback off
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-ResolveOES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-ResolveOES.shader.meta
new file mode 100755
index 0000000..b800cd6
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-ResolveOES.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7f39a07505493c248b3129e08feb50c4
+timeCreated: 1600887843
+licenseType: Pro
+ShaderImporter:
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transition.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transition.shader
new file mode 100755
index 0000000..a239b7e
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transition.shader
@@ -0,0 +1,180 @@
+Shader "AVProVideo/Internal/Transition"
+{
+ Properties
+ {
+ _MainTex ("Texture To", 2D) = "white" {}
+ _FromTex ("Texture From", 2D) = "white" {}
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" }
+ LOD 100
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile LERP_NONE LERP_FADE LERP_BLACK LERP_WHITE LERP_TRANSP LERP_HORIZ LERP_HORIZ_MIRROR LERP_VERT LERP_VERT_MIRROR LERP_DIAG LERP_DIAG_MIRROR LERP_CIRCLE LERP_SCROLL_VERT LERP_SCROLL_HORIZ LERP_DIAMOND LERP_BLINDS LERP_RECTS_VERT LERP_ARROW LERP_SLIDE_HORIZ LERP_SLIDE_VERT LERP_ZOOM_FADE
+
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata
+ {
+ float4 vertex : POSITION;
+ float2 uv : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float2 uv : TEXCOORD0;
+ float4 vertex : SV_POSITION;
+ };
+
+ sampler2D _MainTex;
+ sampler2D _FromTex;
+ float4 _MainTex_ST;
+ float4 _FromTex_ST;
+ float _Fade;
+
+ v2f vert (appdata v)
+ {
+ v2f o;
+ o.vertex = XFormObjectToClip(v.vertex);
+ o.uv = TRANSFORM_TEX(v.uv, _MainTex);
+ return o;
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ float2 uv1 = i.uv;
+ float2 uv2 = i.uv;
+
+#if LERP_FADE
+ float t = _Fade;
+#elif LERP_BLACK
+ float t = _Fade;
+ if (t < 0.5)
+ {
+ return lerp(tex2D(_FromTex, uv1), float4(0.0, 0.0, 0.0, 1.0), t * 2.0);
+ }
+ else
+ {
+ return lerp(float4(0.0, 0.0, 0.0, 1.0), tex2D(_MainTex, uv2), 2.0 * (t - 0.5));
+ }
+#elif LERP_WHITE
+ float t = _Fade;
+ if (t < 0.5)
+ {
+ return lerp(tex2D(_FromTex, uv1), float4(1.0, 1.0, 1.0, 1.0), t * 2.0);
+ }
+ else
+ {
+ return lerp(float4(1.0, 1.0, 1.0, 1.0), tex2D(_MainTex, uv2), 2.0 * (t - 0.5));
+ }
+#elif LERP_TRANSP
+ float t = _Fade;
+ if (t < 0.5)
+ {
+ return lerp(tex2D(_FromTex, uv1), float4(0.0, 0.0, 0.0, 0.0), t * 2.0);
+ }
+ else
+ {
+ return lerp(float4(0.0, 0.0, 0.0, 0.0), tex2D(_MainTex, uv2), 2.0 * (t - 0.5));
+ }
+#elif LERP_HORIZ
+ float t = step(i.uv.x, _Fade);
+#elif LERP_HORIZ_MIRROR
+ float t = step(abs(i.uv.x - 0.5), _Fade);
+#elif LERP_VERT
+ float t = step(i.uv.y, _Fade);
+#elif LERP_VERT_MIRROR
+ float t = step(abs(i.uv.y - 0.5), _Fade);
+#elif LERP_DIAG
+ float t = step((i.uv.y+i.uv.x)*0.5, _Fade);
+#elif LERP_DIAG_MIRROR
+ float t = step(abs(i.uv.y - i.uv.x), _Fade);
+#elif LERP_CIRCLE
+ float t = distance(float2(i.uv.x*1.777, i.uv.y), float2(0.5*1.7777, 0.5));
+ t = step(t, _Fade*2.1);
+#elif LERP_SCROLL_VERT
+ float t = _Fade;
+ uv1.y += _Fade;
+ t = step(1 - uv1.y, 0);
+#elif LERP_SCROLL_HORIZ
+ float t = _Fade;
+ uv1.x += _Fade;
+ t = step(1 - uv1.x, 0);
+#elif LERP_DIAMOND
+ float2 origin = float2(0.5 * 1.7777, 0.5);
+
+ float t = abs(uv1.x*1.7777 - origin.x);
+ t += abs(uv1.y - origin.y);
+
+ t = step(t, _Fade*1.4);
+#elif LERP_BLINDS
+
+ float x = frac(uv1.x*4.0);
+ float t = step(x, _Fade);
+
+#elif LERP_ARROW
+ // Arrow
+ float y = abs(i.uv.y - 0.5) * 0.5;
+ float x = lerp(0.5, 1.0, i.uv.x);
+ float t = step(x, y + _Fade);
+#elif LERP_SLIDE_HORIZ
+ // Slide horiz
+ float t = _Fade;
+ uv1.x += _Fade;
+ uv2.x -= 1.0 - _Fade;
+ t = step(1 - uv1.x, 0);
+#elif LERP_SLIDE_VERT
+ // slide vert
+ float t = _Fade;
+ uv1.y += _Fade;
+ uv2.y -= 1.0 - _Fade;
+ t = step(1 - uv1.y, 0);
+#elif LERP_ZOOM_FADE
+ // zoom-fade
+ float scale = lerp(1.0, 0.15, _Fade);
+ float scale2 = lerp(1.0, 0.15, 1.0-_Fade);
+ uv1 -= 0.5;
+ uv2 -= 0.5;
+ uv1 *= scale;
+ uv2 *= scale2;
+ uv1 += 0.5;
+ uv2 += 0.5;
+ float t = smoothstep(0.5, 1.0, _Fade);
+
+#elif LERP_RECTS_VERT
+
+ float x = uv1.x;
+
+ float bf = _Fade / 1.5;
+
+ bf = frac(uv1.y * 8.0);
+ bf = (int)fmod(uv1.y * 8.0, 8.0);
+ bf += 1.0;
+
+ bf *= _Fade / 2.0;
+
+ float t = step(abs(x - 0.5), bf);
+
+#endif
+
+#if LERP_NONE
+ return tex2D(_MainTex, uv1);
+#else
+ float4 cola = tex2D(_FromTex, uv1);
+ float4 colb = tex2D(_MainTex, uv2);
+
+ float4 col = lerp(cola, colb, t);
+ return col;
+#endif
+ }
+ ENDCG
+ }
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transition.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transition.shader.meta
new file mode 100755
index 0000000..2f9b129
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transition.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 73f378cafe7b4a745907b70e76bb3259
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-AndroidOES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-AndroidOES.shader
new file mode 100755
index 0000000..7ac76b7
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-AndroidOES.shader
@@ -0,0 +1,164 @@
+Shader "AVProVideo/Internal/UI/Stereo - AndroidOES"
+{
+ Properties
+ {
+ [PerRendererData] _MainTex("Sprite Texture", 2D) = "balck" { }
+ [PerRendererData] _ChromaTex("Sprite Texture", 2D) = "gray" { }
+ _Color("Tint", Color) = (1,1,1,1)
+
+ _StencilComp("Stencil Comparison", Float) = 8
+ _Stencil("Stencil ID", Float) = 0
+ _StencilOp("Stencil Operation", Float) = 0
+ _StencilWriteMask("Stencil Write Mask", Float) = 255
+ _StencilReadMask("Stencil Read Mask", Float) = 255
+
+ _ColorMask("Color Mask", Float) = 15
+
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "Queue" = "Transparent"
+ "IgnoreProjector" = "True"
+ "RenderType" = "Transparent"
+ "PreviewType" = "Plane"
+ "CanUseSpriteAtlas" = "True"
+ }
+
+ Stencil
+ {
+ Ref[_Stencil]
+ Comp[_StencilComp]
+ Pass[_StencilOp]
+ ReadMask[_StencilReadMask]
+ WriteMask[_StencilWriteMask]
+ }
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ ZTest[unity_GUIZTestMode]
+ Fog{ Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask[_ColorMask]
+
+ Pass
+ {
+ GLSLPROGRAM
+ #pragma only_renderers gles3
+
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ USING_DEFAULT_TEXTURE
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+
+ precision mediump float;
+
+ #include "UnityCG.glslinc"
+ #if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+ #endif
+ #define SHADERLAB_GLSL
+ #include "../AVProVideo.cginc"
+
+ #ifdef VERTEX
+
+ INLINE bool Android_IsStereoEyeLeft()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ return (eyeIndex == 0);
+ #else
+ return IsStereoEyeLeft();
+ #endif
+ }
+
+ out vec2 texVal;
+ uniform vec4 _MainTex_ST;
+ uniform mat4 _MainTex_Xfrm;
+
+ #if defined(STEREO_DEBUG)
+ out vec4 tint;
+ #endif
+
+ void main()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ mat4 vpMatrix = GetStereoMatrixVP(eyeIndex);
+ gl_Position = vpMatrix * unity_ObjectToWorld * gl_Vertex;
+ #else
+ gl_Position = XFormObjectToClip(gl_Vertex);
+ #endif
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ texVal.xy = (_MainTex_Xfrm * vec4(gl_MultiTexCoord0.x, gl_MultiTexCoord0.y, 0.0, 1.0)).xy;
+ texVal.xy = TRANSFORM_TEX_ST(texVal, _MainTex_ST);
+
+ #if defined(STEREO_TOP_BOTTOM) | defined(STEREO_LEFT_RIGHT)
+ vec4 scaleOffset = GetStereoScaleOffset(Android_IsStereoEyeLeft(), false);
+ texVal.xy *= scaleOffset.xy;
+ texVal.xy += scaleOffset.zw;
+ #elif defined (STEREO_CUSTOM_UV)
+ if (!Android_IsStereoEyeLeft())
+ {
+ texVal = gl_MultiTexCoord1.xy;
+ texVal = vec2(1.0, 1.0) - texVal;
+ }
+ #endif
+
+ #if defined(STEREO_DEBUG)
+ tint = GetStereoDebugTint(Android_IsStereoEyeLeft());
+ #endif
+ }
+ #endif // VERTEX
+
+ #ifdef FRAGMENT
+ in vec2 texVal;
+
+ #if defined(STEREO_DEBUG)
+ in vec4 tint;
+ #endif
+
+ uniform vec4 _Color;
+ #if defined(USING_DEFAULT_TEXTURE)
+ uniform sampler2D _MainTex;
+ #else
+ uniform samplerExternalOES _MainTex;
+ #endif
+
+ void main()
+ {
+ vec4 col = texture(_MainTex, texVal.xy);
+
+ #if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+ #endif
+
+ col *= _Color;
+
+ #if defined(STEREO_DEBUG)
+ col *= tint;
+ #endif
+
+ gl_FragColor = col;
+ }
+ #endif // FRAGMENT
+
+ ENDGLSL
+ }
+ }
+
+ Fallback "AVProVideo/Internal/UI/Stereo"
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-AndroidOES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-AndroidOES.shader.meta
new file mode 100755
index 0000000..5c5ff65
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-AndroidOES.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f9f51999155859b419ff715c8127688a
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Stereo.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Stereo.shader
new file mode 100755
index 0000000..4aca60b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Stereo.shader
@@ -0,0 +1,131 @@
+Shader "AVProVideo/Internal/UI/Stereo"
+{
+ Properties
+ {
+ [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
+ [PerRendererData] _ChromaTex ("Sprite Texture", 2D) = "white" {}
+ _Color ("Tint", Color) = (1,1,1,1)
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _ColorMask ("Color Mask", Float) = 15
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ "PreviewType"="Plane"
+ "CanUseSpriteAtlas"="True"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ ZTest [unity_GUIZTestMode]
+ Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ USE_YPCBCR
+
+ #include "UnityCG.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ float4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ half2 texcoord : TEXCOORD0;
+ };
+
+ uniform fixed4 _Color;
+ uniform sampler2D _MainTex;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform float4 _MainTex_ST;
+ uniform float4 _MainTex_TexelSize;
+
+ v2f vert(appdata_t IN)
+ {
+ v2f OUT;
+
+ OUT.vertex = XFormObjectToClip(IN.vertex);
+
+#ifdef UNITY_HALF_TEXEL_OFFSET
+ OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
+#endif
+
+ OUT.texcoord.xy = IN.texcoord.xy;
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_ST.y < 0.0);
+ OUT.texcoord.xy *= scaleOffset.xy;
+ OUT.texcoord.xy += scaleOffset.zw;
+#endif
+
+ OUT.color = IN.color * _Color;
+
+#if STEREO_DEBUG
+ OUT.color *= GetStereoDebugTint(IsStereoEyeLeft());
+#endif
+ return OUT;
+ }
+
+ fixed4 frag(v2f IN) : SV_Target
+ {
+ fixed4 col;
+#if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, IN.texcoord, _YpCbCrTransform);
+#else
+ col = SampleRGBA(_MainTex, IN.texcoord);
+#endif
+ col *= IN.color;
+ return col;
+ }
+
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Stereo.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Stereo.shader.meta
new file mode 100755
index 0000000..41d1975
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Stereo.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 018fe741dec71f14bb43801a31a07303
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent-Android OES.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent-Android OES.shader
new file mode 100755
index 0000000..288cad7
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent-Android OES.shader
@@ -0,0 +1,183 @@
+Shader "AVProVideo/Internal/UI/Transparent Packed (stereo) - AndroidOES"
+{
+ Properties
+ {
+ [PerRendererData] _MainTex ("Sprite Texture", 2D) = "black" { }
+ [PerRendererData] _ChromaTex ("Sprite Texture", 2D) = "gray" { }
+ _Color ("Tint", Color) = (1,1,1,1)
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _ColorMask ("Color Mask", Float) = 15
+
+ _VertScale("Vertical Scale", Range(-1, 1)) = 1.0
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ "PreviewType"="Plane"
+ "CanUseSpriteAtlas"="True"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ ZTest [unity_GUIZTestMode]
+ Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+ GLSLPROGRAM
+ #pragma only_renderers gles3
+
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ USE_YPCBCR
+ #pragma multi_compile __ USING_DEFAULT_TEXTURE
+ #pragma multi_compile __ USING_URP
+
+ #extension GL_OES_EGL_image_external : require
+ #extension GL_OES_EGL_image_external_essl3 : enable
+
+ #include "UnityCG.glslinc"
+ #if defined(STEREO_MULTIVIEW_ON)
+ UNITY_SETUP_STEREO_RENDERING
+ #endif
+ #define SHADERLAB_GLSL
+ #include "../AVProVideo.cginc"
+
+ #ifdef VERTEX
+
+ INLINE bool Android_IsStereoEyeLeft()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ return (eyeIndex == 0);
+ #else
+ return IsStereoEyeLeft();
+ #endif
+ }
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ out vec4 texVal;
+ #else
+ out vec2 texVal;
+ #endif
+
+ #if defined(STEREO_DEBUG)
+ out vec4 tint;
+ #endif
+
+ uniform vec4 _MainTex_ST;
+ uniform vec4 _MainTex_TexelSize;
+ uniform mat4 _MainTex_Xfrm;
+
+ void main()
+ {
+ #if defined(STEREO_MULTIVIEW_ON)
+ int eyeIndex = SetupStereoEyeIndex();
+ mat4 vpMatrix = GetStereoMatrixVP(eyeIndex);
+ gl_Position = vpMatrix * unity_ObjectToWorld * gl_Vertex;
+ #else
+ gl_Position = XFormObjectToClip(gl_Vertex);
+ #endif
+
+ // Apply texture transformation matrix - adjusts for offset/cropping (when the decoder decodes in blocks that overrun the video frame size, it pads)
+ texVal.xy = (_MainTex_Xfrm * vec4(gl_MultiTexCoord0.x, gl_MultiTexCoord0.y, 0.0, 1.0)).xy;
+ texVal.xy = TRANSFORM_TEX_ST(texVal, _MainTex_ST);
+
+ #if defined(STEREO_TOP_BOTTOM) || defined(STEREO_LEFT_RIGHT)
+ vec4 scaleOffset = GetStereoScaleOffset( Android_IsStereoEyeLeft(), _MainTex_ST.y < 0.0 );
+ texVal.xy *= scaleOffset.xy;
+ texVal.xy += scaleOffset.zw;
+ #endif
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ texVal = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, texVal.xy, _MainTex_ST.y < 0.0);
+ #if defined(ALPHAPACK_TOP_BOTTOM)
+ texVal.yw = texVal.wy;
+ #endif
+ #endif
+
+ #if defined(STEREO_DEBUG)
+ tint = GetStereoDebugTint( Android_IsStereoEyeLeft() );
+ #endif
+ }
+
+ #endif // VERTEX
+
+ #ifdef FRAGMENT
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ in vec4 texVal;
+ #else
+ in vec2 texVal;
+ #endif
+
+ #if defined(STEREO_DEBUG)
+ in vec4 tint;
+ #endif
+
+ #if defined(USING_DEFAULT_TEXTURE)
+ uniform sampler2D _MainTex;
+ #else
+ uniform samplerExternalOES _MainTex;
+ #endif
+
+ void main()
+ {
+ vec4 col = texture(_MainTex, texVal.xy);
+
+ #if defined(APPLY_GAMMA)
+ col.rgb = GammaToLinear(col.rgb);
+ #endif
+
+ #if defined(ALPHAPACK_TOP_BOTTOM) || defined(ALPHAPACK_LEFT_RIGHT)
+ vec3 rgb = texture(_MainTex, texVal.zw).rgb;
+ col.a = (rgb.r + rgb.g + rgb.b) / 3.0;
+ #endif
+
+ #if defined(STEREO_DEBUG)
+ col *= tint;
+ #endif
+
+ gl_FragColor = col;
+ }
+ #endif // FRAGMENT
+
+ ENDGLSL
+ }
+ }
+ Fallback "AVProVideo/Internal/UI/Transparent Packed (stereo)"
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent-Android OES.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent-Android OES.shader.meta
new file mode 100755
index 0000000..5ba0f43
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent-Android OES.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f35019bbb2560394aac63e40e1d98da7
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent.shader b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent.shader
new file mode 100755
index 0000000..338101b
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent.shader
@@ -0,0 +1,165 @@
+Shader "AVProVideo/Internal/UI/Transparent Packed (stereo)"
+{
+ Properties
+ {
+ [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
+ [PerRendererData] _ChromaTex ("Sprite Texture", 2D) = "white" {}
+ _Color ("Tint", Color) = (1,1,1,1)
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _ColorMask ("Color Mask", Float) = 15
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+
+ _VertScale("Vertical Scale", Range(-1, 1)) = 1.0
+
+ [KeywordEnum(None, Top_Bottom, Left_Right)] AlphaPack("Alpha Pack", Float) = 0
+ [KeywordEnum(None, Top_Bottom, Left_Right)] Stereo("Stereo Mode", Float) = 0
+ [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
+ [Toggle(STEREO_DEBUG)] _StereoDebug("Stereo Debug Tinting", Float) = 0
+ [Toggle(APPLY_GAMMA)] _ApplyGamma("Apply Gamma", Float) = 0
+ [Toggle(USE_YPCBCR)] _UseYpCbCr("Use YpCbCr", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ "PreviewType"="Plane"
+ "CanUseSpriteAtlas"="True"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ ZTest [unity_GUIZTestMode]
+ Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ // TODO: replace use multi_compile_local instead (Unity 2019.1 feature)
+ #pragma multi_compile ALPHAPACK_NONE ALPHAPACK_TOP_BOTTOM ALPHAPACK_LEFT_RIGHT
+ #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT
+ #pragma multi_compile FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
+ #pragma multi_compile __ APPLY_GAMMA
+ #pragma multi_compile __ STEREO_DEBUG
+ #pragma multi_compile __ USE_YPCBCR
+
+#if APPLY_GAMMA
+ //#pragma target 3.0
+#endif
+ #include "UnityCG.cginc"
+ // TODO: once we drop support for Unity 4.x then we can include this
+ //#include "UnityUI.cginc"
+ #include "../AVProVideo.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ float4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ half4 uv : TEXCOORD0;
+ float4 worldPosition : TEXCOORD1;
+ };
+
+ uniform fixed4 _Color;
+ uniform sampler2D _MainTex;
+#if USE_YPCBCR
+ uniform sampler2D _ChromaTex;
+ uniform float4x4 _YpCbCrTransform;
+#endif
+ uniform float4 _MainTex_TexelSize;
+ uniform float _VertScale;
+ uniform float4 _ClipRect;
+
+ inline float UnityGet2DClipping (in float2 position, in float4 clipRect)
+ {
+ float2 inside = step(clipRect.xy, position.xy) * step(position.xy, clipRect.zw);
+ return inside.x * inside.y;
+ }
+
+ v2f vert(appdata_t IN)
+ {
+ v2f OUT;
+ OUT.worldPosition = IN.vertex;
+
+ OUT.vertex = XFormObjectToClip(IN.vertex);
+
+#ifdef UNITY_HALF_TEXEL_OFFSET
+ OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
+#endif
+
+ OUT.uv.xy = IN.texcoord.xy;
+
+ // Horrible hack to undo the scale transform to fit into our UV packing layout logic...
+ if (_VertScale < 0.0)
+ {
+ OUT.uv.y = 1.0 - OUT.uv.y;
+ }
+
+#if STEREO_TOP_BOTTOM | STEREO_LEFT_RIGHT
+ float4 scaleOffset = GetStereoScaleOffset(IsStereoEyeLeft(), _MainTex_TexelSize.y < 0.0);
+ OUT.uv.xy *= scaleOffset.xy;
+ OUT.uv.xy += scaleOffset.zw;
+#endif
+
+ OUT.uv = OffsetAlphaPackingUV(_MainTex_TexelSize.xy, OUT.uv.xy, _VertScale < 0.0);
+
+ OUT.color = IN.color * _Color;
+#if STEREO_DEBUG
+ OUT.color *= GetStereoDebugTint(IsStereoEyeLeft());
+#endif
+ return OUT;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ half4 col;
+#if USE_YPCBCR
+ col = SampleYpCbCr(_MainTex, _ChromaTex, i.uv.xy, _YpCbCrTransform);
+#else
+ col = SampleRGBA(_MainTex, i.uv.xy);
+#endif
+
+#if ALPHAPACK_TOP_BOTTOM | ALPHAPACK_LEFT_RIGHT
+ col.a = SamplePackedAlpha(_MainTex, i.uv.zw);
+#endif
+ col *= i.color;
+
+ col.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect);
+ clip(col.a - 0.001);
+
+ return col;
+ }
+
+ ENDCG
+ }
+ }
+}
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent.shader.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent.shader.meta
new file mode 100755
index 0000000..74b7080
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-UI-Default-Transparent.shader.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f32079bbb2560394abb63e40e1d53da7
+ShaderImporter:
+ defaultTextures: []
+ userData:
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/_AVProVideo.Runtime.asmdef b/Viagg-io/Assets/Packages/AVProVideo/Runtime/_AVProVideo.Runtime.asmdef
new file mode 100755
index 0000000..918e1c5
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/_AVProVideo.Runtime.asmdef
@@ -0,0 +1,17 @@
+{
+ "name": "AVProVideo.Runtime",
+ "references": [],
+ "includePlatforms": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.render-pipelines.universal",
+ "expression": "0.0",
+ "define": "USING_URP"
+ },
+ {
+ "name": "com.unity.render-pipelines.high-definition",
+ "expression": "0.0",
+ "define": "USING_HDRP"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/AVProVideo/Runtime/_AVProVideo.Runtime.asmdef.meta b/Viagg-io/Assets/Packages/AVProVideo/Runtime/_AVProVideo.Runtime.asmdef.meta
new file mode 100755
index 0000000..55dc546
--- /dev/null
+++ b/Viagg-io/Assets/Packages/AVProVideo/Runtime/_AVProVideo.Runtime.asmdef.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3ca842002c51d0a43b73e45298809a13
+timeCreated: 1546681457
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/Addons/VrTemplate/XRI/Settings/Resources/InteractionLayerSettings.asset b/Viagg-io/Assets/Packages/Addons/VrTemplate/XRI/Settings/Resources/InteractionLayerSettings.asset
index 06793d8..437d139 100644
--- a/Viagg-io/Assets/Packages/Addons/VrTemplate/XRI/Settings/Resources/InteractionLayerSettings.asset
+++ b/Viagg-io/Assets/Packages/Addons/VrTemplate/XRI/Settings/Resources/InteractionLayerSettings.asset
@@ -14,12 +14,12 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LayerNames:
- Default
- -
- -
- -
- -
- -
- -
+ - Olivenoel
+ - Weisswein
+ - Bouillon
+ - Salz
+ - Pfeffer
+ - Risotto
-
-
-
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor.meta b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor.meta
new file mode 100644
index 0000000..c6c7235
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2b771290a9ed1614fbc5a745ef7ba669
+folderAsset: yes
+timeCreated: 1514034907
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Changelog.txt b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Changelog.txt
new file mode 100644
index 0000000..42820f2
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Changelog.txt
@@ -0,0 +1,196 @@
+-----------------------------
+v3.0.5
+
+- Fixed small issue with Safe Area not being updated when the screen resolution changes.
+
+-----------------------------
+v3.0.4
+
+- Fixed small oversight in Resolution.refreshRate is obsolete warning fix.
+
+-----------------------------
+v3.0.3
+
+- Fixed some comments and removed unused using statements.
+- Fixed Resolution.refreshRate is obsolete warning for Unity 2022.2 and newer.
+- Increased minimum version to recommended Unity 2019.4 LTS.
+
+-----------------------------
+v3.0.2
+
+- Renamed GRAPHY_VR to GRAPHY_XR
+- Added GRAPHY_XR to missing places to fix code compilation
+
+-----------------------------
+v3.0.1
+
+- Added GRAPHY_VR scripting define.
+
+-----------------------------
+v3.0.0
+
+- Added beta support for VR!
+- Added support for an offset in all modules.
+- Big refactor and cleanup.
+
+-----------------------------
+v2.1.3
+
+- Added null check for Keyboard.current.
+
+-----------------------------
+v2.1.2
+
+- Fixed NullRef in AudioMonitor if no main camera is in the scene.
+
+-----------------------------
+v2.1.1
+
+- Small hotfix for a index of out bounds error.
+- Simplified Singleton class to allow Graphy to be Destroyed.
+- Deallocating cached strings on Destroy to free up memory.
+
+-----------------------------
+v2.1.0
+
+- Pretty big refactor.
+- Lots of optimization.
+- Removed min/max fps for 1% and 0.1% lows, which is the industry standard now.
+- Improved UI. Added rounded corners and a better default color palette.
+
+-----------------------------
+v2.0.1
+
+- Updated package.json to 2.0.1.
+
+-----------------------------
+v2.0.0
+
+- Now supports UPM (Unity Package Manager).
+- Minimum official supported version is now Unity 2019.3.0. If you want a version that supports 5.4+, go to Github to download it.
+- Lots of minor tweaks, optimizations and bugfixes.
+
+-----------------------------
+v1.6.0
+
+This is the last release that will officially support Unity 5.4+. Next releases will be targeted towards 2019.3+.
+
+- Minor tweaks, optimizations and bugfixes.
+- Added support for VR single pass instanced rendering.
+
+-----------------------------
+v1.5.2
+
+- Removed asmdefs to avoid missing reference issues in new Unity alpha versions.
+- Improvements avgFps calculation, changed list to array (thanks @Kaladrius2trip).
+
+-----------------------------
+v1.5.1
+
+- Hide Graphy in Game view when it's be disabled on startup.
+- Fixed error if no camera is present in the scene.
+- Added SceneManager namespace so to avoid possible conflicts.
+- Added support for asmdefs (thanks @QSFW).
+
+-----------------------------
+v1.5
+
+- Fixed a number alignment in the audio module (thanks @SuperPenguin).
+- Refactored some code to avoid warnings with the new NET framework 4.0.
+- Shader sorting fix for Screen Space - Camera.
+- Fixed a possible Null Reference Error in the debugger (thanks @strawlink).
+- Fixed import settings in 2 textures (thanks @strawlink).
+- Renamed all Action into System.Action to avoid possible namespace conflicts.
+- Fixed the int rounding to prevent 59.99999FPS from turning into 59FPS (thanks @Rockylars).
+
+-----------------------------
+v1.4.3
+
+- Renamed all the classes with the "G_" prefix to avoid namespace issues with external code (thanks @Rockylars).
+- Refactored some code and added explanations and regions in the G_ShaderGraph class.
+- Assigned all the variables in their declaration to avoid a new NET framework warning.
+
+-----------------------------
+v1.4.2
+
+- Added the option to disable hotkeys.
+- Disabled hotkey check when Editor is not focused (thanks @Rockylars).
+- Refatored and cleaned up code (thanks @Rockylars).
+- Fixed a bug where if the app was defocused and focused back, it would reset Graphy's module active values (thanks @Rockylars).
+
+-----------------------------
+v1.4.1
+
+- Introduced plenty of safety checks to avoid some null reference errors.
+- Possibly fixed the graphs bug when the Editor is defocused and focused back.
+- Code cleanup and refactoring.
+
+-----------------------------
+v1.4
+
+- Updated the header comments in all scripts.
+- Added option to toggle active on start up (thanks @DarkMio).
+- Removed a leftover raycast script in the Graphy UI.Canvas (thanks @DarkMio).
+- Updated the shaders to use UnityObjectToClipPos() (thanks @DarkMio).
+- Bug-Fix: NullRef for EditorStyles.boldlabel (thanks @Flavelius)
+
+-----------------------------
+v1.3
+
+- Added a second graph to the Audio module that shows the highest spectrum value.
+- Added option to Toggle Active and Mode, as well as setting a specific Preset from the API.
+- Fixed a bug that occured when Time.timeScale = 0 (thanks @xDavidLeon!).
+
+-----------------------------
+v1.2.2
+
+- Improved the dB calculations, now the values are much more precise.
+
+-----------------------------
+v1.2.1
+
+- Modified the default UI text values to more generic placeholders to increase clarity.
+- Small fixes in the audio module.
+
+-----------------------------
+v1.2
+
+- MASSIVE reduction in garbage generation. From 8-10 KB every 2-3 seconds to just 200-300 bytes. Garbage generation right now is negligible.
+- Some code optimizations.
+
+-----------------------------
+v1.1
+
+- New Feature: Added a modifiable MODE. If set to LIGHT it will reduce some features or maximum values (like graph resolution) but it will improve compatibility with older hardware.
+- Small performance optimizations.
+- Code refactoring.
+- Improved the vetical alpha fade-off effect in the graph to make it more visible for lower values.
+- Updated the "Customize Graphy" scene to account for these new changes.
+
+-----------------------------
+v1.0
+
+- First major update!
+- Removed some leftover raycast targets from the Graphy UI to avoid interfering with users UI.
+- Added a Customization Scene that allows changing all the parameters in runtime to improve the user experience when testing new values.
+- Added a feature to rescale the background overlay of the Advanced Data module to the text with the highest width.
+- Made ALL parameters modifiable from code using the API.
+- Fixed a bug where sometimes the Graphy Manager would fail trying to retrieve the Audio Module.
+- Improved stabilty.
+
+-----------------------------
+v0.6
+
+- Added a feature to choose if you want to apply a background overlay to Graphy, improving readability in cluttered scenes.
+- Optimized the access to Shader parameters when updating them, improving performance.
+
+-----------------------------
+v0.5.1
+
+- Added a feature to choose if you want to keep Graphy alive through scene changes. Careful, if you activate it but Graphy is the child of another object, the root GameObject will also survive scene changes.
+- Fixed a bug where setting Graphy as a child of another object would break the graphs.
+
+-----------------------------
+v0.5
+
+- Initial release!
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Changelog.txt.meta b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Changelog.txt.meta
new file mode 100644
index 0000000..0ff1461
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Changelog.txt.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 425066d07b7c1204887be96c53348ac6
+labels:
+- counter
+- fps
+- graphy
+- tayx
+timeCreated: 1515072754
+licenseType: Store
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor.meta b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor.meta
new file mode 100644
index 0000000..6de3ace
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 74026f7916b08a343916493b0a1752cc
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyDebuggerEditor.cs b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyDebuggerEditor.cs
new file mode 100644
index 0000000..d6ff106
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyDebuggerEditor.cs
@@ -0,0 +1,578 @@
+/* ---------------------------------------
+ * Author: Martin Pane (martintayx@gmail.com) (@tayx94)
+ * Contributors: https://github.com/Tayx94/graphy/graphs/contributors
+ * Project: Graphy - Ultimate Stats Monitor
+ * Date: 02-Jan-18
+ * Studio: Tayx
+ *
+ * Git repo: https://github.com/Tayx94/graphy
+ *
+ * This project is released under the MIT license.
+ * Attribution is not required, but it is always welcomed!
+ * -------------------------------------*/
+
+using System;
+using UnityEngine;
+using System.Collections.Generic;
+using System.IO;
+using UnityEditor;
+
+namespace Tayx.Graphy
+{
+ [CustomEditor( typeof( GraphyDebugger ) )]
+ internal class GraphyDebuggerEditor : Editor
+ {
+ #region Variables -> Private
+
+ private GraphyDebugger m_target;
+
+ private int m_newDebugPacketListSize = 0;
+
+ private int m_previouslySelectedDebugPacketIndex = 0;
+ private int m_currentlySelectedDebugPacketIndex = 0;
+
+ private int m_selectedDebugPacketCondition = 0;
+
+ #endregion
+
+ #region Methods -> Unity Callbacks
+
+ private void OnEnable()
+ {
+ m_target = (GraphyDebugger) target;
+ }
+
+ #endregion
+
+ #region Methods -> Public Override
+
+ public override void OnInspectorGUI()
+ {
+ if( m_target == null && target == null )
+ {
+ base.OnInspectorGUI();
+
+ return;
+ }
+
+ float defaultLabelWidth = EditorGUIUtility.labelWidth;
+ float defaultFieldWidth = EditorGUIUtility.fieldWidth;
+
+ //===== CONTENT REGION ========================================================================
+
+ GUILayout.Space( 20 );
+
+ #region Section -> Logo
+
+ if( GraphyEditorStyle.DebuggerLogoTexture != null )
+ {
+ GUILayout.Label
+ (
+ image: GraphyEditorStyle.DebuggerLogoTexture,
+ style: new GUIStyle( GUI.skin.GetStyle( "Label" ) )
+ {
+ alignment = TextAnchor.UpperCenter
+ }
+ );
+
+ GUILayout.Space( 10 );
+ }
+ else
+ {
+ EditorGUILayout.LabelField
+ (
+ label: "[ GRAPHY - DEBUGGER ]",
+ style: GraphyEditorStyle.HeaderStyle1
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space( 5 ); //Extra pixels added when the logo is used.
+
+ #region Section -> Settings
+
+ SerializedObject serObj = serializedObject;
+
+ SerializedProperty
+ debugPacketList =
+ serObj.FindProperty( "m_debugPackets" ); // Find the List in our script and create a refrence of it
+
+ //Update our list
+ serObj.Update();
+
+ EditorGUILayout.LabelField( "Current [Debug Packets] list size: " + debugPacketList.arraySize );
+
+ EditorGUIUtility.fieldWidth = 32;
+ EditorGUILayout.BeginHorizontal();
+
+
+ m_newDebugPacketListSize = EditorGUILayout.IntField
+ (
+ label: "Define a new list size",
+ value: m_newDebugPacketListSize
+ );
+
+ if( GUILayout.Button( "Resize List" ) )
+ {
+ if( EditorUtility.DisplayDialog
+ (
+ title:
+ "Resize List",
+ message:
+ "Are you sure you want to resize the entire List?\n\n" +
+ "Current List Size -> " +
+ debugPacketList.arraySize +
+ "\n" +
+ "New List Size -> " +
+ m_newDebugPacketListSize +
+ "\n" +
+ "This will add default entries if the value is greater than the list size, or erase the bottom values until the new size specified.",
+ ok:
+ "Resize",
+ cancel:
+ "Cancel" )
+ )
+ {
+ m_currentlySelectedDebugPacketIndex = 0;
+
+ if( m_newDebugPacketListSize != debugPacketList.arraySize )
+ {
+ while( m_newDebugPacketListSize > debugPacketList.arraySize )
+ {
+ debugPacketList.InsertArrayElementAtIndex( debugPacketList.arraySize );
+ SetDefaultDebugPacketValues( debugPacketList );
+ }
+
+ while( m_newDebugPacketListSize < debugPacketList.arraySize )
+ {
+ debugPacketList.DeleteArrayElementAtIndex( debugPacketList.arraySize - 1 );
+ }
+ }
+ }
+ }
+
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.LabelField( "NOT RECOMMENDED (Only use for first initialization)",
+ EditorStyles.centeredGreyMiniLabel );
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ if( debugPacketList.arraySize < 1 )
+ {
+ m_previouslySelectedDebugPacketIndex = 0;
+ m_currentlySelectedDebugPacketIndex = 0;
+ m_selectedDebugPacketCondition = 0;
+
+ serializedObject.ApplyModifiedProperties();
+ return;
+ }
+
+ GraphyEditorStyle.HeaderStyle2.contentOffset = Vector2.down * 3f;
+
+ EditorGUILayout.LabelField( "Selected debug packet:" );
+
+ EditorGUILayout.BeginHorizontal();
+
+ List debugPacketNames = new List();
+ for( int i = 0; i < debugPacketList.arraySize; i++ )
+ {
+ SerializedProperty listItem = debugPacketList.GetArrayElementAtIndex( i );
+ // NOTE: If the Popup detects two equal strings, it just paints 1, that's why I always add the "i"
+ char checkMark = listItem.FindPropertyRelative( "Active" ).boolValue ? '\u2714' : '\u2718';
+ debugPacketNames.Add
+ (
+ (i + 1) +
+ " (" +
+ checkMark +
+ ") " +
+ " - ID: " +
+ listItem.FindPropertyRelative( "Id" ).intValue +
+ " (Conditions: " +
+ listItem.FindPropertyRelative( "DebugConditions" ).arraySize +
+ ")"
+ );
+ }
+
+ m_currentlySelectedDebugPacketIndex =
+ EditorGUILayout.Popup( m_currentlySelectedDebugPacketIndex, debugPacketNames.ToArray() );
+
+ if( m_currentlySelectedDebugPacketIndex != m_previouslySelectedDebugPacketIndex )
+ {
+ m_selectedDebugPacketCondition = 0;
+
+ m_previouslySelectedDebugPacketIndex = m_currentlySelectedDebugPacketIndex;
+ }
+
+ Color defaultGUIColor = GUI.color;
+
+ GUI.color = new Color( 0.7f, 1f, 0.0f, 1f );
+
+ //Or add a new item to the List<> with a button
+
+ if( GUILayout.Button( "Add", GUILayout.Width( 60 ) ) )
+ {
+ debugPacketList.InsertArrayElementAtIndex( debugPacketList.arraySize );
+ SetDefaultDebugPacketValues( debugPacketList );
+ }
+
+ GUI.color = new Color( 1f, 0.7f, 0.0f, 1f );
+
+ //Remove this index from the List
+
+ if( GUILayout.Button( "Remove", GUILayout.Width( 60 ) ) )
+ {
+ debugPacketList.DeleteArrayElementAtIndex( m_currentlySelectedDebugPacketIndex );
+ if( m_currentlySelectedDebugPacketIndex > 0 )
+ {
+ m_currentlySelectedDebugPacketIndex--;
+ }
+
+ if( debugPacketList.arraySize < 1 )
+ {
+ serializedObject.ApplyModifiedProperties();
+ return;
+ }
+ }
+
+ GUI.color = defaultGUIColor;
+
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ //Display our list to the inspector window
+
+ SerializedProperty listItemSelected =
+ debugPacketList.GetArrayElementAtIndex( m_currentlySelectedDebugPacketIndex );
+
+ SerializedProperty Active = listItemSelected.FindPropertyRelative( "Active" );
+ SerializedProperty Id = listItemSelected.FindPropertyRelative( "Id" );
+ SerializedProperty ExecuteOnce = listItemSelected.FindPropertyRelative( "ExecuteOnce" );
+ SerializedProperty InitSleepTime = listItemSelected.FindPropertyRelative( "InitSleepTime" );
+ SerializedProperty ExecuteSleepTime = listItemSelected.FindPropertyRelative( "ExecuteSleepTime" );
+ SerializedProperty ConditionEvaluation = listItemSelected.FindPropertyRelative( "ConditionEvaluation" );
+ SerializedProperty DebugConditions = listItemSelected.FindPropertyRelative( "DebugConditions" );
+ SerializedProperty MessageType = listItemSelected.FindPropertyRelative( "MessageType" );
+ SerializedProperty Message = listItemSelected.FindPropertyRelative( "Message" );
+ SerializedProperty TakeScreenshot = listItemSelected.FindPropertyRelative( "TakeScreenshot" );
+ SerializedProperty ScreenshotFileName = listItemSelected.FindPropertyRelative( "ScreenshotFileName" );
+ SerializedProperty DebugBreak = listItemSelected.FindPropertyRelative( "DebugBreak" );
+ SerializedProperty UnityEvents = listItemSelected.FindPropertyRelative( "UnityEvents" );
+
+ #endregion
+
+ EditorGUILayout.LabelField
+ (
+ label:
+ "[ PACKET ] - ID: " +
+ Id.intValue +
+ " (Conditions: " +
+ DebugConditions.arraySize +
+ ")",
+ style: GraphyEditorStyle.HeaderStyle2
+ );
+
+ EditorGUIUtility.labelWidth = 150;
+ EditorGUIUtility.fieldWidth = 35;
+
+ Active.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Active",
+ tooltip: "If false, it will not be checked"
+ ),
+ value: Active.boolValue
+ );
+
+ Id.intValue = EditorGUILayout.IntField
+ (
+ new GUIContent
+ (
+ text: "ID",
+ tooltip: "Optional Id. It's used to get or remove DebugPackets in runtime"
+ ),
+ value: Id.intValue
+ );
+
+ ExecuteOnce.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Execute once",
+ tooltip: "If true, once the actions are executed, this DebugPacket will delete itself"
+ ),
+ value: ExecuteOnce.boolValue
+ );
+
+ InitSleepTime.floatValue = EditorGUILayout.FloatField
+ (
+ new GUIContent
+ (
+ text: "Init sleep time",
+ tooltip:
+ "Time to wait before checking if conditions are met (use this to avoid low fps drops triggering the conditions when loading the game)"
+ ),
+ value: InitSleepTime.floatValue
+ );
+
+ ExecuteSleepTime.floatValue = EditorGUILayout.FloatField
+ (
+ new GUIContent
+ (
+ text: "Sleep time after execute",
+ tooltip:
+ "Time to wait before checking if conditions are met again (once they have already been met and if ExecuteOnce is false)"
+ ),
+ value: ExecuteSleepTime.floatValue
+ );
+
+
+ EditorGUIUtility.labelWidth = defaultLabelWidth;
+ EditorGUIUtility.fieldWidth = defaultFieldWidth;
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ EditorGUILayout.LabelField( "[ CONDITIONS ] (" + DebugConditions.arraySize + ")",
+ GraphyEditorStyle.HeaderStyle2 );
+
+ EditorGUILayout.PropertyField
+ (
+ ConditionEvaluation,
+ new GUIContent( "Condition evaluation" )
+ );
+
+ EditorGUILayout.Space();
+
+ if( DebugConditions.arraySize < 1 )
+ {
+ DebugConditions.InsertArrayElementAtIndex( DebugConditions.arraySize );
+ m_selectedDebugPacketCondition = 0;
+ }
+
+ EditorGUILayout.BeginHorizontal();
+
+ List debugPacketConditionNames = new List();
+ for( int i = 0; i < DebugConditions.arraySize; i++ )
+ {
+ SerializedProperty listItem = DebugConditions.GetArrayElementAtIndex( i );
+ // NOTE: If the Popup detects two equal strings, it just paints 1, that's why I always add the "i"
+
+ string conditionName = (i + 1).ToString() + " - ";
+ conditionName +=
+ GetComparerStringFromDebugVariable(
+ (GraphyDebugger.DebugVariable) listItem.FindPropertyRelative( "Variable" ).intValue ) + " ";
+ conditionName +=
+ GetComparerStringFromDebugComparer(
+ (GraphyDebugger.DebugComparer) listItem.FindPropertyRelative( "Comparer" ).intValue ) + " ";
+ conditionName += listItem.FindPropertyRelative( "Value" ).floatValue.ToString();
+
+ debugPacketConditionNames.Add( conditionName );
+ }
+
+ m_selectedDebugPacketCondition =
+ EditorGUILayout.Popup( m_selectedDebugPacketCondition, debugPacketConditionNames.ToArray() );
+
+ GUI.color = new Color( 0.7f, 1f, 0.0f, 1f );
+
+ if( GUILayout.Button( "Add", GUILayout.Width( 60 ) ) )
+ {
+ DebugConditions.InsertArrayElementAtIndex( DebugConditions.arraySize );
+ }
+
+ if( DebugConditions.arraySize > 1 )
+ {
+ GUI.color = new Color( 1f, 0.7f, 0.0f, 1f );
+ }
+ else
+ {
+ GUI.color = new Color( 1f, 0.7f, 0.0f, 0.5f );
+ }
+
+ //Remove this index from the List
+ if( GUILayout.Button( "Remove", GUILayout.Width( 60 ) ) )
+ {
+ if( DebugConditions.arraySize > 1 )
+ {
+ DebugConditions.DeleteArrayElementAtIndex( m_selectedDebugPacketCondition );
+ if( m_selectedDebugPacketCondition > 0 )
+ {
+ m_selectedDebugPacketCondition--;
+ }
+ }
+ }
+
+ GUI.color = defaultGUIColor;
+
+ EditorGUILayout.EndHorizontal();
+
+ SerializedProperty conditionListItemSelected =
+ DebugConditions.GetArrayElementAtIndex( m_selectedDebugPacketCondition );
+
+ SerializedProperty Variable = conditionListItemSelected.FindPropertyRelative( "Variable" );
+ SerializedProperty Comparer = conditionListItemSelected.FindPropertyRelative( "Comparer" );
+ SerializedProperty Value = conditionListItemSelected.FindPropertyRelative( "Value" );
+
+ EditorGUILayout.PropertyField
+ (
+ Variable,
+ new GUIContent( "Variable" )
+ );
+
+ EditorGUILayout.PropertyField
+ (
+ Comparer,
+ new GUIContent( "Comparer" )
+ );
+
+ EditorGUILayout.PropertyField
+ (
+ Value,
+ new GUIContent( "Value" )
+ );
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ EditorGUILayout.LabelField( "[ ACTIONS ]", GraphyEditorStyle.HeaderStyle2 );
+
+ EditorGUIUtility.labelWidth = 140;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ MessageType,
+ new GUIContent( "Message type" )
+ );
+
+ EditorGUILayout.PropertyField( Message );
+
+ TakeScreenshot.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Take screenshot",
+ tooltip:
+ "If true, it takes a screenshot and stores it. The location where the image is written to can include a directory/folder list. With no directory/folder list the image will be written into the Project folder. On mobile platforms the filename is appended to the persistent data path."
+ ),
+ value: TakeScreenshot.boolValue
+ );
+
+ if( TakeScreenshot.boolValue )
+ {
+ EditorGUILayout.PropertyField
+ (
+ ScreenshotFileName,
+ new GUIContent
+ (
+ text: "Screenshot file name",
+ tooltip:
+ "Avoid this characters: * . \" / \\ [ ] : ; | = , \n\nIt will have the date appended at the end to avoid overwriting."
+ )
+ );
+ }
+
+ DebugBreak.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Debug Break",
+ tooltip: "If true, it pauses the editor"
+ ),
+ DebugBreak.boolValue
+ );
+
+ EditorGUILayout.PropertyField( UnityEvents );
+
+ EditorGUIUtility.labelWidth = defaultLabelWidth;
+ EditorGUIUtility.fieldWidth = defaultFieldWidth;
+
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ #endregion
+
+ #region Methods -> Private
+
+ private void SetDefaultDebugPacketValues( SerializedProperty debugPacketSerializedProperty )
+ {
+ GraphyDebugger.DebugPacket debugPacket = new GraphyDebugger.DebugPacket();
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex( debugPacketSerializedProperty.arraySize - 1 )
+ .FindPropertyRelative( "Active" )
+ .boolValue = debugPacket.Active;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex( debugPacketSerializedProperty.arraySize - 1 )
+ .FindPropertyRelative( "Id" )
+ .intValue = debugPacketSerializedProperty.arraySize;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex( debugPacketSerializedProperty.arraySize - 1 )
+ .FindPropertyRelative( "ExecuteOnce" )
+ .boolValue = debugPacket.ExecuteOnce;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex( debugPacketSerializedProperty.arraySize - 1 )
+ .FindPropertyRelative( "InitSleepTime" )
+ .floatValue = debugPacket.InitSleepTime;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex( debugPacketSerializedProperty.arraySize - 1 )
+ .FindPropertyRelative( "ExecuteSleepTime" )
+ .floatValue = debugPacket.ExecuteSleepTime;
+ }
+
+ private string GetComparerStringFromDebugVariable( GraphyDebugger.DebugVariable debugVariable )
+ {
+ switch( debugVariable )
+ {
+ case GraphyDebugger.DebugVariable.Fps:
+ return "FPS Current";
+ case GraphyDebugger.DebugVariable.Fps_Min:
+ return "FPS Min";
+ case GraphyDebugger.DebugVariable.Fps_Max:
+ return "FPS Max";
+ case GraphyDebugger.DebugVariable.Fps_Avg:
+ return "FPS Avg";
+
+ case GraphyDebugger.DebugVariable.Ram_Allocated:
+ return "Ram Allocated";
+ case GraphyDebugger.DebugVariable.Ram_Reserved:
+ return "Ram Reserved";
+ case GraphyDebugger.DebugVariable.Ram_Mono:
+ return "Ram Mono";
+
+ case GraphyDebugger.DebugVariable.Audio_DB:
+ return "Audio DB";
+
+ default:
+ return null;
+ }
+ }
+
+ private string GetComparerStringFromDebugComparer( GraphyDebugger.DebugComparer debugComparer )
+ {
+ switch( debugComparer )
+ {
+ case GraphyDebugger.DebugComparer.Less_than:
+ return "<";
+ case GraphyDebugger.DebugComparer.Equals_or_less_than:
+ return "<=";
+ case GraphyDebugger.DebugComparer.Equals:
+ return "==";
+ case GraphyDebugger.DebugComparer.Equals_or_greater_than:
+ return ">=";
+ case GraphyDebugger.DebugComparer.Greater_than:
+ return ">";
+
+ default:
+ return null;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyDebuggerEditor.cs.meta b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyDebuggerEditor.cs.meta
new file mode 100644
index 0000000..576169a
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyDebuggerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4a96825e094d61441b5247d0c32652b3
+timeCreated: 1514907656
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyEditorStyle.cs b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyEditorStyle.cs
new file mode 100644
index 0000000..2d17c76
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyEditorStyle.cs
@@ -0,0 +1,118 @@
+/* ---------------------------------------
+ * Author: Martin Pane (martintayx@gmail.com) (@tayx94)
+ * Contributors: https://github.com/Tayx94/graphy/graphs/contributors
+ * Project: Graphy - Ultimate Stats Monitor
+ * Date: 02-Jan-18
+ * Studio: Tayx
+ *
+ * Git repo: https://github.com/Tayx94/graphy
+ *
+ * This project is released under the MIT license.
+ * Attribution is not required, but it is always welcomed!
+ * -------------------------------------*/
+
+using System;
+using System.IO;
+using UnityEditor;
+using UnityEngine;
+
+namespace Tayx.Graphy
+{
+ internal static class GraphyEditorStyle
+ {
+ #region Variables -> Private
+
+ private static Texture2D _managerLogoTexture = null;
+ private static Texture2D _debuggerLogoTexture = null;
+ private static GUISkin m_skin = null;
+ private static GUIStyle m_headerStyle1 = null;
+ private static GUIStyle m_headerStyle2 = null;
+ private static GUIStyle m_foldoutStyle = null;
+ private static string path;
+
+ #endregion
+
+ #region Properties -> Public
+
+ public static Texture2D ManagerLogoTexture => _managerLogoTexture;
+ public static Texture2D DebuggerLogoTexture => _debuggerLogoTexture;
+ public static GUISkin Skin => m_skin;
+ public static GUIStyle HeaderStyle1 => m_headerStyle1;
+ public static GUIStyle HeaderStyle2 => m_headerStyle2;
+ public static GUIStyle FoldoutStyle => m_foldoutStyle;
+
+ #endregion
+
+ #region Static Constructor
+
+ static GraphyEditorStyle()
+ {
+ string managerLogoGuid = AssetDatabase.FindAssets( $"Manager_Logo_{(EditorGUIUtility.isProSkin ? "White" : "Dark")}" )[ 0 ];
+ string debuggerLogoGuid = AssetDatabase.FindAssets( $"Debugger_Logo_{(EditorGUIUtility.isProSkin ? "White" : "Dark")}" )[ 0 ];
+ string guiSkinGuid = AssetDatabase.FindAssets( "GraphyGUISkin" )[ 0 ];
+
+ _managerLogoTexture = AssetDatabase.LoadAssetAtPath
+ (
+ AssetDatabase.GUIDToAssetPath( managerLogoGuid )
+ );
+
+ _debuggerLogoTexture = AssetDatabase.LoadAssetAtPath
+ (
+ AssetDatabase.GUIDToAssetPath( debuggerLogoGuid )
+ );
+
+ m_skin = AssetDatabase.LoadAssetAtPath
+ (
+ AssetDatabase.GUIDToAssetPath( guiSkinGuid )
+ );
+
+ if( m_skin != null )
+ {
+ m_headerStyle1 = m_skin.GetStyle( "Header1" );
+ m_headerStyle2 = m_skin.GetStyle( "Header2" );
+
+ SetGuiStyleFontColor
+ (
+ guiStyle: m_headerStyle2,
+ color: EditorGUIUtility.isProSkin ? Color.white : Color.black
+ );
+ }
+ else
+ {
+ m_headerStyle1 = EditorStyles.boldLabel;
+ m_headerStyle2 = EditorStyles.boldLabel;
+ }
+
+ m_foldoutStyle = new GUIStyle( EditorStyles.foldout )
+ {
+ font = m_headerStyle2.font,
+ fontStyle = m_headerStyle2.fontStyle,
+ contentOffset = Vector2.down * 3f
+ };
+
+ SetGuiStyleFontColor
+ (
+ guiStyle: m_foldoutStyle,
+ color: EditorGUIUtility.isProSkin ? Color.white : Color.black
+ );
+ }
+
+ #endregion
+
+ #region Methods -> Private
+
+ private static void SetGuiStyleFontColor( GUIStyle guiStyle, Color color )
+ {
+ guiStyle.normal.textColor = color;
+ guiStyle.hover.textColor = color;
+ guiStyle.active.textColor = color;
+ guiStyle.focused.textColor = color;
+ guiStyle.onNormal.textColor = color;
+ guiStyle.onHover.textColor = color;
+ guiStyle.onActive.textColor = color;
+ guiStyle.onFocused.textColor = color;
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyEditorStyle.cs.meta b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyEditorStyle.cs.meta
new file mode 100644
index 0000000..b2cd77c
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyEditorStyle.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1bb06e7c222a60f47a476e2648224330
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyManagerEditor.cs b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyManagerEditor.cs
new file mode 100644
index 0000000..d4b9399
--- /dev/null
+++ b/Viagg-io/Assets/Packages/Graphy - Ultimate Stats Monitor/Editor/GraphyManagerEditor.cs
@@ -0,0 +1,873 @@
+/* ---------------------------------------
+ * Author: Martin Pane (martintayx@gmail.com) (@tayx94)
+ * Contributors: https://github.com/Tayx94/graphy/graphs/contributors
+ * Project: Graphy - Ultimate Stats Monitor
+ * Date: 20-Dec-17
+ * Studio: Tayx
+ *
+ * Git repo: https://github.com/Tayx94/graphy
+ *
+ * This project is released under the MIT license.
+ * Attribution is not required, but it is always welcomed!
+ * -------------------------------------*/
+
+using System;
+using UnityEngine;
+using System.IO;
+using UnityEditor;
+
+namespace Tayx.Graphy
+{
+ [CustomEditor( typeof( GraphyManager ) )]
+ internal class GraphyManagerEditor : Editor
+ {
+ #region Variables -> Private
+
+ private GraphyManager m_target;
+
+ private int[] m_spectrumSizeValues =
+ {
+ 128,
+ 256,
+ 512,
+ 1024,
+ 2048,
+ 4096,
+ 8192
+ };
+
+ #region Section -> Settings
+
+ private SerializedProperty m_graphyMode;
+
+ private SerializedProperty m_enableOnStartup;
+
+ private SerializedProperty m_keepAlive;
+
+ private SerializedProperty m_background;
+ private SerializedProperty m_backgroundColor;
+
+ private SerializedProperty m_enableHotkeys;
+
+ private SerializedProperty m_toggleModeKeyCode;
+ private SerializedProperty m_toggleModeCtrl;
+ private SerializedProperty m_toggleModeAlt;
+
+ private SerializedProperty m_toggleActiveKeyCode;
+ private SerializedProperty m_toggleActiveCtrl;
+ private SerializedProperty m_toggleActiveAlt;
+
+
+ private SerializedProperty m_graphModulePosition;
+ private SerializedProperty m_graphModuleOffset;
+
+ #endregion
+
+ #region Section -> FPS
+
+ private bool m_fpsModuleInspectorToggle = true;
+
+ private SerializedProperty m_fpsModuleState;
+
+ private SerializedProperty m_goodFpsColor;
+ private SerializedProperty m_goodFpsThreshold;
+
+ private SerializedProperty m_cautionFpsColor;
+ private SerializedProperty m_cautionFpsThreshold;
+
+ private SerializedProperty m_criticalFpsColor;
+
+ private SerializedProperty m_fpsGraphResolution;
+
+ private SerializedProperty m_fpsTextUpdateRate;
+
+ #endregion
+
+ #region Section -> RAM
+
+ private bool m_ramModuleInspectorToggle = true;
+
+ private SerializedProperty m_ramModuleState;
+
+ private SerializedProperty m_allocatedRamColor;
+ private SerializedProperty m_reservedRamColor;
+ private SerializedProperty m_monoRamColor;
+
+ private SerializedProperty m_ramGraphResolution;
+
+ private SerializedProperty m_ramTextUpdateRate;
+
+ #endregion
+
+ #region Section -> Audio
+
+ private bool m_audioModuleInspectorToggle = true;
+
+ private SerializedProperty m_findAudioListenerInCameraIfNull;
+
+ private SerializedProperty m_audioListener;
+
+ private SerializedProperty m_audioModuleState;
+
+ private SerializedProperty m_audioGraphColor;
+
+ private SerializedProperty m_audioGraphResolution;
+
+ private SerializedProperty m_audioTextUpdateRate;
+
+ private SerializedProperty m_FFTWindow;
+
+ private SerializedProperty m_spectrumSize;
+
+ #endregion
+
+ #region Section -> Advanced Settings
+
+ private bool m_advancedModuleInspectorToggle = true;
+
+ private SerializedProperty m_advancedModulePosition;
+
+ private SerializedProperty m_advancedModuleOffset;
+
+ private SerializedProperty m_advancedModuleState;
+
+ #endregion
+
+ #endregion
+
+ #region Methods -> Unity Callbacks
+
+ private void OnEnable()
+ {
+ m_target = (GraphyManager) target;
+
+ SerializedObject serObj = serializedObject;
+
+ #region Section -> Settings
+
+ m_graphyMode = serObj.FindProperty( "m_graphyMode" );
+
+ m_enableOnStartup = serObj.FindProperty( "m_enableOnStartup" );
+
+ m_keepAlive = serObj.FindProperty( "m_keepAlive" );
+
+ m_background = serObj.FindProperty( "m_background" );
+ m_backgroundColor = serObj.FindProperty( "m_backgroundColor" );
+
+ m_enableHotkeys = serObj.FindProperty( "m_enableHotkeys" );
+
+ m_toggleModeKeyCode = serObj.FindProperty( "m_toggleModeKeyCode" );
+
+ m_toggleModeCtrl = serObj.FindProperty( "m_toggleModeCtrl" );
+ m_toggleModeAlt = serObj.FindProperty( "m_toggleModeAlt" );
+
+ m_toggleActiveKeyCode = serObj.FindProperty( "m_toggleActiveKeyCode" );
+
+ m_toggleActiveCtrl = serObj.FindProperty( "m_toggleActiveCtrl" );
+ m_toggleActiveAlt = serObj.FindProperty( "m_toggleActiveAlt" );
+
+ m_graphModulePosition = serObj.FindProperty( "m_graphModulePosition" );
+
+ m_graphModuleOffset = serObj.FindProperty( "m_graphModuleOffset" );
+
+ #endregion
+
+ #region Section -> FPS
+
+ m_fpsModuleState = serObj.FindProperty( "m_fpsModuleState" );
+
+ m_goodFpsColor = serObj.FindProperty( "m_goodFpsColor" );
+ m_goodFpsThreshold = serObj.FindProperty( "m_goodFpsThreshold" );
+
+ m_cautionFpsColor = serObj.FindProperty( "m_cautionFpsColor" );
+ m_cautionFpsThreshold = serObj.FindProperty( "m_cautionFpsThreshold" );
+
+ m_criticalFpsColor = serObj.FindProperty( "m_criticalFpsColor" );
+
+ m_fpsGraphResolution = serObj.FindProperty( "m_fpsGraphResolution" );
+
+ m_fpsTextUpdateRate = serObj.FindProperty( "m_fpsTextUpdateRate" );
+
+ #endregion
+
+ #region Section -> RAM
+
+ m_ramModuleState = serObj.FindProperty( "m_ramModuleState" );
+
+ m_allocatedRamColor = serObj.FindProperty( "m_allocatedRamColor" );
+ m_reservedRamColor = serObj.FindProperty( "m_reservedRamColor" );
+ m_monoRamColor = serObj.FindProperty( "m_monoRamColor" );
+
+ m_ramGraphResolution = serObj.FindProperty( "m_ramGraphResolution" );
+
+ m_ramTextUpdateRate = serObj.FindProperty( "m_ramTextUpdateRate" );
+
+ #endregion
+
+ #region Section -> Audio
+
+ m_findAudioListenerInCameraIfNull = serObj.FindProperty( "m_findAudioListenerInCameraIfNull" );
+
+ m_audioListener = serObj.FindProperty( "m_audioListener" );
+
+ m_audioModuleState = serObj.FindProperty( "m_audioModuleState" );
+
+ m_audioGraphColor = serObj.FindProperty( "m_audioGraphColor" );
+
+ m_audioGraphResolution = serObj.FindProperty( "m_audioGraphResolution" );
+
+ m_audioTextUpdateRate = serObj.FindProperty( "m_audioTextUpdateRate" );
+
+ m_FFTWindow = serObj.FindProperty( "m_FFTWindow" );
+
+ m_spectrumSize = serObj.FindProperty( "m_spectrumSize" );
+
+ #endregion
+
+ #region Section -> Advanced Settings
+
+ m_advancedModulePosition = serObj.FindProperty( "m_advancedModulePosition" );
+
+ m_advancedModuleOffset = serObj.FindProperty( "m_advancedModuleOffset" );
+
+ m_advancedModuleState = serObj.FindProperty( "m_advancedModuleState" );
+
+ #endregion
+ }
+
+ #endregion
+
+ #region Methods -> Public Override
+
+ public override void OnInspectorGUI()
+ {
+ if( m_target == null && target == null )
+ {
+ base.OnInspectorGUI();
+ return;
+ }
+
+ float defaultLabelWidth = EditorGUIUtility.labelWidth;
+ float defaultFieldWidth = EditorGUIUtility.fieldWidth;
+
+ //===== CONTENT REGION ========================================================================
+
+ GUILayout.Space( 20 );
+
+ #region Section -> Logo
+
+ if( GraphyEditorStyle.ManagerLogoTexture != null )
+ {
+ GUILayout.Label
+ (
+ image: GraphyEditorStyle.ManagerLogoTexture,
+ style: new GUIStyle( GUI.skin.GetStyle( "Label" ) )
+ {
+ alignment = TextAnchor.UpperCenter
+ }
+ );
+
+ GUILayout.Space( 10 );
+ }
+ else
+ {
+ EditorGUILayout.LabelField
+ (
+ label: "[ GRAPHY - MANAGER ]",
+ style: GraphyEditorStyle.HeaderStyle1
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space( 5 ); //Extra pixels added when the logo is used.
+
+ #region Section -> Settings
+
+ EditorGUIUtility.labelWidth = 130;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ m_graphyMode,
+ new GUIContent
+ (
+ text: "Graphy Mode",
+ tooltip:
+ "LIGHT mode increases compatibility with mobile and older, less powerful GPUs, but reduces the maximum graph resolutions to 128."
+ )
+ );
+
+ GUILayout.Space( 10 );
+
+ m_enableOnStartup.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Enable On Startup",
+ tooltip:
+ "If ticked, Graphy will be displayed by default on startup, otherwise it will initiate and hide."
+ ),
+ value: m_enableOnStartup.boolValue
+ );
+
+ // This is a neat trick to hide Graphy in the Scene if it's going to be deactivated in play mode so that it doesn't use screen space.
+ if( !Application.isPlaying )
+ {
+ m_target.GetComponent